1、软件工程定义
软件工程由方法、工具和过程三个部分组成。软件工程过程是指为获得软件产品,在软件工具的支持下由软件工程师完成的一系列软件工程活动,包括以下4个方面:软件规格说明(P)、软件开发(D)、软件确认(C)、软件演进(A)。
2、软件工程过程模型
软件要经历从需求分析、软件设计、软件开发、运行维护,直至被淘汰这样的全过程,这个全过程称为软件的生命周期。
瀑布模型
瀑布模型包括需求分析、系统设计、程序设计、编码实现、单元测试、集成测试、系统测试、运行维护 。它们之间因果关系紧密相连,前一个阶段工作的输出结果是后一阶段工作的输入。每一个阶段都是建立在前一个阶段正确实施的结果之上。每一个阶段工作完成后都伴随 着一个里程碑(一组检查条件),对该阶段的工作进行审查和确认。
优点:强调开发的阶段性、早期计划及需求调查和产品测试,以这样严格的方式构造软件,开发人员很清楚每一步应该做什么,有利于项目管理。
缺点:1、软件需求的完整性、正确性很难确定;2、瀑布模型是串行化的过程模型型,使得用户和软件项目负责人要相当长的时间 才能得到一个可以看得见的软件系统。如果出现与用户的期望不一致,或者出现需求变更,将 会带来巨大的损失(例如人力、财力、时间等);3、瀑布模型的基本原则是在每个阶段一次性地完全解决该阶段的工作,不会出现遗漏、 错误等情况,而实际上这是不现实或不可能的
原型模型(快速原型)
原型模型包括原型开发阶段(需求分析、系统设计、程序设计)、目标软件开发阶段(编码实现、单元测试、集成测试、系统测试、运行维护) 。原型模型后续也发生了一些演变,按照原型的作用不同,出现了抛弃型原型 和演化型原型 。抛弃型原型 是将原型作为需求确认的手段,在需求确认结束后,原型就被抛弃不用,重新采用一个完整的瀑布模型进行开发。演化性原型 是在需求确认结束后,不断补充和完善原型,直至形成一个完整的产品。原型的概念也被后续出现的过程模型采纳,如螺旋模型和敏捷方法。 强调开发的阶段性、早期计划及需求调查和产品测试,以这样严格的方式构造软件,开发人员很清楚每一步应该做什么,有利于项目管理。
螺旋模型
螺旋模型 (Spiral Model) 是在快速原型的基础上扩展而成。它有4个部分组成:目标设定、风险分析、开发和有效性验证、评审 。
- 目标设定。为该项目进行需求分析,定义和确定这一个阶段的专门目标,指定对过程 和产品的约束,并且制订详细的管理计划。
- 风险分析。对可选方案进行风险识别和详细分析,制定解决办法,采取有效措施避免 这些风险。
- 开发和有效性验证。风险评估后,可以为系统选择开发模型,并且进行原型开发,即 开发软件产品。
- 评审。对项目进行评审,以确定是否需要进入螺旋线的下一次回路,如果决定继续, 就要制订下一阶段计划。
螺旋模型支持用户需求的动态变化。过多的迭代次数会增加开发成本,延迟提交时间。
V模型
V 模型从左到右,描述了基本的开发过程和测试行为,明确地标明了测试工程中存在的不同级别以及测试阶段和开发过程各阶段的对应关系。图中箭头代表了时间方向,左边下降的是开发过程各阶段,与此相对应的是右边上升的部分,即测试过程各阶段。
3、敏捷方法
敏捷方法的特点
主要体现在其适应性 和面向人的特性上。与传统的计划驱动或重型开发方法不同,敏捷方法更强调对变化的适应性和对人的重视。
首先,敏捷方法是适应性的,而非预设性的。这意味着敏捷方法不试图对软件开发项目在长时间跨度内做出详细的计划,而是欢迎变化,并能适应变化。其目标是通过反馈机制对不可预测的过程进行控制,使开发过程能向期望的目标前进。
其次,敏捷方法是面向人的,而非面向过程的。它试图使软件开发工作能够充分发挥人的创造能力,并强调软件开发应当是一项愉快的活动。在敏捷方法中,开发人员和技术决策处于核心地位,他们有权做出技术方面的所有决定。同时,敏捷方法特别强调开发中相关人员之间的信息交流,认为项目失败的原因往往可以追溯到信息没有及时准确地传递。
敏捷方法的核心思想
敏捷方法的核心思想主要有下面3点。
- 敏捷方法是适应型,而非可预测型。与传统方法不同,敏捷方法拥抱变化,也可以说 它的初衷就是适应变化的需求,利用变化来发展,甚至改变自己,最后完善自己。
- 敏捷方法是以人为本,而非以过程为本。传统方法以过程为本,强调充分发挥人的特性,不去限制它。并且软件开发在无过程控制和过于严格繁琐的过程控制中取得一种平衡,以 保证软件的质量。
- 迭代增量式的开发过程。敏捷方法以原型开发思想为基础,采用迭代增量式开发,发 行版本小型化。它根据客户需求的优先级和开发风险,制订版本发行计划,每一发行版都是在 前一成功发行版的基础上进行功能需求扩充,最后满足客户的所有功能需求。
几种主要敏捷方法
- 极限编程 (Extreme Programming,XP),XP是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期;通过积极的交流、反馈以及其他一系列的方法,开发人员和客户可以非常清楚开发进度、 变化、待解决的问题和潜在的困难等,并根据实际情况及时地调整开发过程。
- 水晶系列方法,其目的是发展一种提倡"机动性 的"方法,包含具有共性的核心元素,每个都含有独特的角色、过程模式、工作产品和实践。
- Scrum,该方法侧重于项目管理。
- 特征驱动开发方法 (Feature Driven Development,FDD),FDD有5个核心过程:开发整体对象模型、构造特征列表、计划特征开发、特征设计和特征构建
4、统一过程(RUP)
RUP(Rational Unified Process)软件开发生命周期是一个二维的软件开发模型,它结合了迭代式开发、以用例驱动和基于架构的开发方法。其核心在于通过有序的迭代,逐步细化软件系统的需求、设计、实现、测试等过程,从而确保项目的成功交付。
在RUP中,有9个核心工作流,它们贯穿整个软件开发生命周期,包括业务建模、需求、分析与设计、实现、测试、部署、配置与变更管理、项目管理和环境。这些工作流相互关联,共同构成了软件开发的完整过程。
RUP将软件开发生命周期划分为多个循环,每个循环生成产品的一个新版本。每个循环又依次由四个连续的阶段组成:初始阶段、细化阶段、构造阶段和移交阶段。每个阶段都完成确定的任务,并通过迭代的方式逐步细化产品。
在每个阶段结束前,都有一个里程碑来评估该阶段的工作成果。如果未能通过里程碑的评估,决策者需要做出决定,是取消该项目还是继续进行下一阶段的工作。
总的来说,RUP软件开发生命周期是一个结构化、可重复且可预测的过程,它能够帮助开发团队有效地管理项目、控制风险,并确保软件产品的质量。通过有序的迭代和里程碑评估,RUP使得软件开发过程更加透明和可控,提高了项目成功的概率。
5、软件能力成熟度模型
软件能力成熟度模型(CMM)是一个用于指导软件过程改进和评估软件开发能力的概念模型。CMMI将软件过程改进划分为五个成熟度等级,每个等级都有其特定的关键过程域、过程目标和关键实践。分别是初始级(Level1)、已管理级(Level2)、已定义级(Level3)、量化管理级(Level4)、优化级(Level5)。