软件工程学习笔记(一):软件工程

北城余情 提交于 2020-01-06 18:28:41

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

1 计算机软件

1.1 软件

计算机软件是指计算机系统中的程序以及文档,程序是计算任务处理对象和处理规则的描述.

1.2 软件特点

  • 一种逻辑实体.
  • 维护工作量大.
  • 维护软件过程中会引入副作用.

1.3 软件分类

1.3.1 系统软件

最靠近硬件的一层,比如操作系统.

1.3.2 支撑软件

软件开发,维护与运行的软件,比如各种IDE等.

1.3.3 应用软件

应用于特定领域的软件.

2 软件语言

软件语言主要包括需求定义语言,功能性语言,设计性语言,程序设计语言与文档语言.

2.1 需求定义语言

用于书写软件需求定义的语言,包括功能需求与非功能需求.典型的语言有PSL.

2.2 功能性语言

书写软件功能规约的语言,描述软件做什么以及只做什么.典型语言有广谱语言,Z语言.

2.3 设计性语言

书写软件设计规约的语言,是软件设计的严格而完整的描述.典型语言有PDL.

2.4 程序设计语言

即编程语言,可以分为低级语言与高级语言,过程式语言与非过程式语言,通用语言与专用语言,交互式语言与非交互式语言,顺序语言与并发语言与分布语言.

2.5 文档语言

书写软件文档使用的语言,比如Z语言.

3 软件工程

软件工程是建立和使用一套合理的工程原则,以便获得经济的软件,这种软件是可靠的,可以在实际机器上高效地运行.软件工程是应用计算机科学理论以及工程管理原则的方法,按预算与进度实现满足用户要求的软件产品的工程,或以此为研究对象的学科.

4 软件工程的基本原则

4.1 适宜的开发规范

选用适宜的开发规范,以保证软件开发的可持续性,并使最终的软件产品满足客户的需求.

4.2 合适的设计方法

要考虑软件的模块化,信息隐藏,局部化,一致性以及适应性等问题,采用合适的设计方法有助于支持问题的解决与实现.

4.3 高质量的工程支持

需要提供高质量的工程支持,例如配置管理,质量保证等.

4.4 有效的软件工程管理

软件工程的管理直接影响可用资源的有效利用,以提高软件组织的生产能力.

5 软件生存周期

软件生存周期分为6个阶段:

5.1 计算机系统工程

计算机系统工程的任务是确定待开发软件的总体要求与范围,以及该软件与其他计算机系统元素之间的关系,进行成本估算,作出进度安排,并进行可行性分析.

5.2 需求分析

需求分析主要解决待开发软件要做什么的问题,确定软件的功能,性能,数据,界面等要求,生成软件需求规约.

5.3 设计

软件设计主要解决待开发软件怎么做的问题,通常可以分为系统设计与详细设计,系统设计的任务是设计软件系统的体系结构,详细设计的任务是设计各个组成成分的实现细节.

5.4 编码

利用程序设计语言进行编码.

5.5 测试

发现并纠正软件中的错误与缺陷,包括单元测试,集成测试,确认测试与系统测试.

5.6 运行与维护

软件运行期间需要进行维护,对软件进行修改.

6 CMM

CMM是能力成熟度模型,定义了5个软件过程成熟度等级,包括初始级,可重复级,已定义级,已管理级,优化级.

6.1 初始级

软件过程的特点是无秩序的,甚至是混乱的,几乎没有什么过程是经过妥善定义的.

6.2 可重复级

建立了基本的项目管理过程来跟踪成本,进度与功能特性.制定了必要的过程纪律,能重复早先类似应用项目取得的成功.

6.3 已定义级

已将管理和工程活动两方面的软件过程文档化,标准化,并综合成该组织的标准软件过程.所有项目均使用经批准,剪裁的标准软件过程来开发与维护软件.

6.4 已管理级

收集对软件过程和产品质量的详细度量值,对软件过程和产品都有定量的理解与控制.

6.5 优化级

过程的量化反馈和先进的新思想,新技术促使过程不断改进.

7 CMMI

CMMI是若干过程模型的综合与改进,是支撑多个工程学科和领域的系统的,一致的过程改进框架,能适应现代工程的特点与需要,能提高过程的质量与工作效率.CMMI有两种表示法:阶段式模型与连续式模型.

7.1 阶段式模型

阶段式模型的结构类似于CMM,分为5个成熟度等级:

7.1.1 初始的

过程不可预测且缺乏控制.

7.1.2 已管理的

过程为项目服务.

7.1.3 已定义的

过程为组织服务.

7.1.4 定量管理的

过程已度量和控制.

7.1.5 优化的

集中与过程改进.

7.2 连续式模型

连续式模型关注每个过程域的能力,一个组织对不同的过程域可以达到不同的过程域能力等级. CMMI包含了6个过程域能力等级,等级号为0-5,能力等级表明了单个过程域中组织执行的好坏程度.能力等级包括共性目标及相关的共性实践,可以独立地应用于任何单独的过程域,各能力等级的含义:

7.2.1 CL0

未完成的,过程域未执行或未达到CL1中定义的所有目标.

7.2.2 CL1

已执行的,其共性目标是过程可以将标识的输入工作产品转换成可标识的输出工作产品,以实现支持过程域的特定目标.

7.2.3 CL2

已管理的,共性目标是集中于已管理的过程的制度化.根据组织政策规定过程的运作将使用哪个过程,项目遵循已文档化的计划和过程描述,所有正在工作的人都有权使用足够的资源,所有工作任务和工作产品都被监督,控制和评审.

7.2.4 CL3

已定义的,共性目标是集中于已定义的过程的制度化.过程是按照组织的剪裁指南从组织的标准过程集中剪裁得到的,还必须收集过程资产和过程的度量,并用于将来对该过程的改进上.

7.2.5 CL4

定量管理的,共性目标是集中于可定量管理的过程的制度化.使用测量与质量保证来控制和改进过程域,建立和使用关于质量和过程执行的定量目标作为管理准则.

7.2.6 CL5

优化的,使用量化手段改变和优化过程域,以应对客户的要求的改变与持续改进计划的过程域的功效.

8 软件过程模型

软件过程模型习惯上也叫软件开发模型,是软件开发全部过程,活动和任务的结构框架.

8.1 瀑布模型

1970年由W.Royce提出,给出了软件生存周期活动的固定顺序,上一阶段的活动完成后向下一阶段活动过渡,最终得到开发的软件产品.瀑布模型中上一阶段的活动完成并经过评审后才能开始下一阶段的活动,特征是:

  • 接受上一阶段活动的结果作为本阶段活动的输入.
  • 依据上一阶段活动的结果实施本阶段应完成的活动.
  • 对本阶段的活动进行评审.
  • 将本阶段活动的结果作为输出,传递给下一阶段.

8.1.1 优点

最早出现应用最广泛的模型,确保软件开发的顺利进行,对提高软件项目的质量和开发效率起到重要作用.

8.1.2 缺点

  • 用户难以清晰描述所有需求,开发过程中需求也有可能发生改变.
  • 发现错误时,为了改正错误要回到前一阶段,造成瀑布倒流.
  • 在测试完成后才可以看到可运行的软件,发现问题的修改代价极大.

8.2 增量模型

增量模型将软件的开发过程分成若干个日程时间交错的线性序列,每个线性序列产生一个可发布的增量版本,后一个版本是对前一个版本的修改和补充,重复增量发布的过程,直至产生最终的完善产品.

8.2.1 优点

适用于需求经常发生变化的软件开发,以后的增量中可以逐渐加入需求,另外可以有计划地管理技术风险.

8.2.2 缺点

需要良好的架构设计,避免加入的构件破坏已构造好的系统部分,需要对系统有好的全盘分析,否则容易退化成边做边改模型.

8.3 原型模型

原型是预期系统的一个可执行版本,反映了系统性质的一个选定的子集.一个原型不必满足目标软件的所有约束,目的是可以快速,低成本地构建原型.步骤是:

定义总体目标 --> 标识需求 --> 指定原型开发计划--> 确定原型目标和范围--> 快速设计建模--> 构建原型 --> 交付使用--> 收集反馈意见 -- > 下一轮原型迭代开发--> 定义总体目标

8.3.1 优点

用户与开发者在原型上达成一致,减少错误,缩短开发周期,加快进度,降低成本.

8.3.2 缺点

不利于原型系统作为最终产品,原型被建造仅仅是用户用来定义需求,之后便会被部分或全部抛弃,准确的原型设计比较困难,不利于开发人员创新.

8.4 螺旋模型

螺旋模型将原型实现的迭代特征与瀑布模型中的控制的和系统化的方面结合起来,增加了风险分析.螺旋模型沿着螺线自内向外旋转,4个任务区域(4个象限)内分别完成以下任务:

  • 第一象限:风险分析,评价所选方案,识别风险,清楚风险.
  • 第二象限:制订计划,确定软件目标,选定实施方案,弄清项目开发的限制条件.
  • 第三象限:客户评估,评价开发工作,提出修正建议.
  • 第四象限:工程实施,实施软件开发,验证工作产品.

(图片来源:https://www.itread01.com/content/1544588849.html)

8.4.1 优点

设计灵活,成本计算容易,客户始终参加每个阶段的开发,可以进行有效的互动.

8.4.2 缺点

周期长,需要丰富的风险评估经验以及专门知识,如果未能及时标识风险,势必造成重大损失.

8.5 喷泉模型

喷泉模型是一种支持面向对象开发的过程模型.喷泉体现了面向对象的迭代与无间隙特性.

8.5.1 优点

各个阶段没有明显的边界,开发人员可以进行同步开发,提高软件项目的开发效率,节省开发时间.

8.5.2 缺点

不利于项目管理,要求严格编写文档,审核难度大.

8.6 基于构件的开发模型

利用预先包装的构件来构造应用系统.构件可以是内部开发的构件,也可以是商业化的构件.

8.6.1 优点

构件可重用,易于维护,对提高软件生产率,提高软件质量,降低成本有很大的帮助.

8.6.2 缺点

很难找到100%合适的构件,就是现有的构件不一定很适合使用,但基于已有构件构造出的构件未必经过100%的测试,难以保证质量.

8.7 形式化方法模型

形式化方法是建立在严格的数学基础上的一种软件开发方法,用严格的数学语言和语义描述功能规约与设计规约,通过数学的分析与推导,易于发现需求的歧义性,不完整性与不一致性,易于对分析模型,设计模型和程序进行验证.通过数学的演算,使得从形式化功能规约到形式化设计规约,以及从形式化设计规约到程序代码的转换成为可能.

8.7.1 优点

用数学语言解决了规格说明的二义性问题,提高了精确性用数学提供了确认手段,使得证明与验证软件按程序满足用户和系统的需求成为可能,可以可视化地模拟/执行模型.

8.7.2 缺点

形式化的方法比其他技术的抽象级别要低,容易陷入细节,需要提早确定系统边界,通常限于正确一致的模型,但大多数情况下模型并非正确与一致.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!