• 60090

    文章

  • 611

    评论

  • 59

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

软件工程笔记

撸了今年阿里、腾讯和美团的面试,我有一个重要发现.......>>

一 软件工程概要

IEEE对软件工程的定义:将系统的、规范的、可度量的工程化方法应用于软件开发、运行和维护的全过程及上述方法的研究。
软件工程由方法、工具、过程三个部分组成。

1.开发模型

1)瀑布模型SDLC 适用于需求明确    软件计划-->需求分析-->软件设计-->程序编码-->软件测试-->运行维护
2)演化模型(变换模型) 适用于需求不明确    通过对原型的不断演化,形成最终产品
3)增量模型 在原型思想和瀑布模型的基础上演化而来 强调一块一块的做
4)螺旋模型 融合原型/瀑布/演化模型的特点 引入了风险分析
5)v模型 需求分析-->概要设计-->详细设计-->编码-->V-->单元测试-->集成测试-->系统测试-->验收测试
          需求分析-->验收测试/系统测试计划做成
          概要设计-->集成测试
          详细设计-->单元测试
6)喷泉模型 面向对象的模型 早期的都是面向结构化的模型 迭代/无间隙
7)CBSD构件组装模型 将组成部分构件化 提高了软件开发的复用性
    需求分析和定义-->软件架构定义-->构件库的建立-->应用软件构建-->测试和发布
    常见的构件标准 CORBA/COM-DCOM-COM+/EJB
8)RAD快速开发模型 由瀑布模型SDLC和CBSD构件化开发模型发展而来 例如C#组件拖拉
    业务建模-->数据建模-->过程建模-->应用生成-->测试与交付
9)统一过程模型UP/RUP 可以应用于大型项目
特点:用例驱动/以架构为中心/迭代和增量
流程:初始-->细化-->构建-->交付-->初始
    初始:1)确定项目范围和边界
               2)识别系统的关键用例
               3)展示系统的候选架构
               4)估计项目费用和时间
               5)评估项目风险
    细化:1)分析系统问题领域
               2)建立软件架构基础
               3)淘汰最高风险元素
    构建:1)开发剩余的构件
               2)构件组装与测试
    交付:1)进行beta测试(在用户环境中进行的测试) alpha测试(在开发环境进行的测试)
               2)制作发布版本
               3)用户文档定稿
               4)确认新系统
               5)培训、调整产品
10)敏捷开发方法 适合于小项目
a.代表方法
    自适应开发/水晶方法/特征驱动方法/SCRUM/极限编程XP
b.基本原则
    短平快的会议/小型版本发布/较少的文档/合作为重/客户直接参与/自动化测试
    适应性计划调整/结对编程/测试驱动开发/持续集成/重构
c.价值观
    沟通/简单/反馈/勇气
d.5大原则 快速反馈/简单性假设/逐步修改/提倡更改/优质工作
e.最佳实践
    计划游戏/小型发布/隐喻/简单设计/测试先行/重构/结对编程/集体代码所有制
    /持续集成/每周工作40h/现场客户/编码标准

2.逆向工程

现有系统-->逆向工程-->新需求-->正向工程-->新系统
现有系统-->再工程(重构)-->新系统

3.设计模型(实现级)

程序和数据结构信息(结构级)
对象模型、数据和控制流模型(功能级)
UML状态图和部署图(领域级)

4.净室软件过程

净室即无尘、洁净室。也就是一个受控污染级别的环境。
使用盒结构规约(或形式化方法)进行分析和设计建模,并且强调将正确性
验证,而不是测试,作为发现和消除错误的主要机制。
使用统计的测试来获取认证被交付软件的可靠性所必须的出错率信息。

5.新旧系统转换策略

直接转换策略/并行转换策略/分段转换策略
数据转换与迁移
旧数据库-->抽取-->转换-->装载-->新数据库

6.系统运行与维护

软件维护交付前的活动包括:交付后运行的计划和维护计划等;交付后的活动包括软件修改、培训、帮助资料等。
可维护性:易分析性/易改变性/稳定性/易测试性
维护类型:改正性(正确性)维护(25%)、适应性维护(20%)、完善性维护(50%)、预防性维护(5%)

7.CMMI 能力成熟度模型

阶段式(组织能力成熟度) 混乱级/已管理级(项目级)/已定义级(组织级)/定量管理级(量化管理)/优化级(持续优化)
连续式(软件过程能力) 

二、软件生命周期

1.软件生存周期

5个基本过程/9个支持过程/7个组织过程。
每个过程分为一组活动,每一项活动进一步划分为一组任务。
基本过程分为:获取过程(需方)/供应过程(供方)/开发过程(开发方)/运作过程(使用方)/维护过程(维护方)
支持过程分为:文档编制过程/配置管理过程/质量保证过程/验证过程/确认过程/联合评审过程/审核过程/问题解决过程/易用性过程
组织过程分为:管理过程/基础设施过程/改进过程/人力资源过程/资产管理过程/重用大纲管理过程/领域工程过程

2.软件生命周期

共10个阶段:可行性研究/需求分析/概要设计/详细设计/实现/组装测试/确认测试/使用/维护/退役
可行性研究和项目开发计划:得出可行性研究报告/系统设计任务书/详细的开发计划
需求分析:定义SRS(Software Requirements Specification,软件需求规格说明书)
概要设计:定义模块接口/设计全局数据库/规定设计约束/制定组装测试计划
详细设计:
实现:完成程序和单元测试
组装测试:
确认测试:验收
使用:收集发现的软件错误,撰写软件问题报告和软件修改报告
维护:
退役:

三、软件开发方法

1.分类

从开发风范上分为自顶向下开发和自底向上开发。
从性质上分为形式化方法和非形式化方法。
从适应范围上分为整体性方法和局部性方法。

2.形式化方法

1)形式化方法是具有坚实数学基础的方法。
2)形式化方法通过下面两个方面改善其实用性:
a.形式化方法与图形语言机制相结合。b.用CASE(Computer Aided Software Engineering,计算机辅助软件工程)工具,支持形式化软件开发。
3)净室软件工程CSE(Cleanroom Software Engineering)
净室即无尘、洁净室。也就是一个受控污染级别的环境。
净室软件工程是软件开发的一种形式化方法。使用盒结构归约进行分析和建模,将正确性验证作为发现和排除错误的主要机制,
使用统计测试来获取认证软件可靠性所需的信息。
它对开发人员要求较高,正确性验证比较困难且耗时,不现实。

3.逆向工程

1)现有系统-->逆向工程-->新需求-->正向工程-->新系统
现有系统-->再工程(重构)-->新系统
2)完备性
逆向工程的完备性可以用在某一个抽象层次上提供信息的详细程度来描述。
抽象层次越高,完备性越低,与代码距离越远,逆向恢复难度越大。

四、软件开发模型

1.分类

软件开发模型为软件工程管理提供了里程碑和进度表,为软件开发过程提供了原则和方法。
软件开发模型可以分为三类:
a.软件需求完全确定 如:瀑布模型;
b.在软件开发初始阶段只能提供基本需求 需要迭代式或渐进式开发模型 如:喷泉模型、螺旋模型、统一开发过程、敏捷方法等;
c.以形式化方法为基础的变换模型

2.常见模型

1)瀑布模型
将软件开发过程分为:软件计划、需求分析、软件设计、程序编码、软件测试、运行维护6个阶段。
定义阶段(软件计划、需求分析)、开发阶段(软件设计、程序编码、软件测试)、维护阶段(运行维护)
瀑布模型不能满足软件的演化特点,不能适应需求变化;风险往往到后期才会发现,风险控制能力较弱。
2)演化模型
演化模型在快速开发一个原型的基础上,对原型不断改进,演化为最终产品。
缺点是:如果不加控制的让用户接触不稳定的功能,可能会产生负面影响。
3)螺旋模型
螺旋模型将瀑布模型和演化模型相结合,并引入了风险分析。
螺旋模型每次迭代都包括:制定计划、风险分析、实施工程和客户评估4方面。
4)喷泉模型
是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。
5)变换模型
变换模型是基于形式化规格说明语言和程序变换的软件开发模型。
a.往往以形式化规格说明为基础,开发一个软件原型。开发人员可对形式化的规格说明进行一系列的程序变换,
直至生成计算机可以接受的目标代码。
b.程序变换是软件开发的另一种方法,其基本思想是把程序设计的过程分为生成阶段和改进阶段。
变换后程序的正确性由变换法则的正确性来保证。
变换模型的优点是解决了代码结构经多次修改而变坏的问题,减少了许多中间步骤(如:设计、编码、测试)。
变换模型的缺点是局限性较大,需要严格的数学理论和一整套开发环境的支持。
6)智能模型
也称基于知识的软件开发模型,它综合了上述若干模型,并与专家系统结合在了一起。
7)V模型
V模型是在快速应用开发模型基础上演变而来的。
需求分析-->概要设计-->详细设计-->编码-->V-->单元测试-->集成测试-->系统测试-->验收测试
          需求分析-->验收测试/系统测试计划做成
          概要设计-->集成测试
          详细设计-->单元测试

3.快速应用开发模型

1)快速应用开发(Rapid Application Development,RAD)强调极短的开发周期。
RAD模型是瀑布模型的高速变种,通过使用基于构件的开发方法获得快速开发。如C#的拖拉拽。
2)RAD基本思想
    a.让用户更主动的参与到系统分析,设计和构造活动中来。
    b.将项目开发组织成一系列重点突出的研讨会,让各方一起参与。
    c.通过一种迭代的构造方法,加速需求分析和设计阶段。
    d.让用户提前看到一个可工作的系统。
3)RAD开发阶段
业务建模/数据建模/处理建模/应用生成/测试交付。
4)RAD特点
通过大量使用可复用构件,加快了开发速度。
局限性:RAD只适用于管理信息系统的开发,不适合技术风险很高的情况。
必须在较短的时间内完成需求分析,任何一方不配合,都可能导致项目失败。
RAD对模块化要求比较高,不适合于所有项目。

4.统一过程模型

1)统一过程(Unified Process,UP)是一个通用过程框架。
UP是基于构件的,在为软件系统建模时,使用的是UML。
UP的三个显著特点:用例驱动,以架构为中心,迭代和增量。
UP的目标是:在可预见的日程和预算前提下,确保满足最终用户需求的高质量产品。
2)RUP阶段划分:初始阶段,细化阶段,构建阶段,移交阶段。每个阶段都要安排一次技术评审。
通过循环迭代上面四个过程,生成最终产品。
初始阶段:明确项目规模/评估项目风险/制定项目计划/阶段技术评审
细化阶段:确定架构/制定构建阶段计划/建立支持环境/选择构件/阶段技术评审
构建阶段:
移交阶段:
3)RUP过于庞大和复杂,不能快速适应需求变更。对于较小的项目使用敏捷开发更合适。

5.敏捷开发

1)敏捷软件开发宣言:个体和交互胜过过程和工具,可工作的软件胜过大量文档,客户合作胜过合同谈判,响应变化胜过遵循计划。
2)主要的敏捷方法:极限编程XP,自适应软件开发ASD,水晶方法Crystal,特性驱动开发(FDD),动态系统开发方法(DSDM),测试驱动开发(TDD),
敏捷数据库技术AD和精益软件开发(Lean Software Development)等。
3)XP的四大价值观:沟通,简单,反馈,勇气。

五、软件过程管理

1.软件能力成熟度模型(Capability Maturity Model,CMM)

1)CMM的5个成熟度等级:
初始级(混乱级)/可重复级(已建立基本的项目管理)/已定义级(整个组织标准管理)/已管理级(量化管理)/优化级(持续优化)
2)CMMI(能力成熟度模型集成)模型(24个过程域)
阶段式模型:初始级/可重复级/已定义级/已管理级/优化级
连续式模型:过程管理、项目管理、工程、支持。

2.软件过程评估

1)CMM评估
2)Trillum模型 主要用于嵌入式软件开发和支持的能力评估模型。以CMM为基础。
3)Bootstrap方法,改进了CMM的问卷表和成熟度计算方法。
4)ISO/IEC 15504标准
5)SJ/T 11234-2001标准
我国的行业标准,与CMMI类似,共22个过程域,分为4大类:过程管理类,项目管理类,工程化类,支持类。
6个评估等级:不完整级,已执行级,受管理级,已定义级,定量管理级,持续优化级。


 转载至链接:https://my.oschina.net/dajianguo/blog/3031088。

695856371Web网页设计师②群 | 喜欢本站的朋友可以收藏本站,或者加入我们大家一起来交流技术!

欢迎来到梁钟霖个人博客网站。本个人博客网站提供最新的站长新闻,各种互联网资讯。 还提供个人博客模板,最新最全的java教程,java面试题。在此我将尽我最大所能将此个人博客网站做的最好! 谢谢大家,愿大家一起进步!

转载原创文章请注明出处,转载至: 梁钟霖个人博客www.liangzl.com

0条评论

Loading...


发表评论

电子邮件地址不会被公开。 必填项已用*标注

自定义皮肤
注册梁钟霖个人博客