目录
能力成熟度模型集成(Capability Maturity Model Integration,CMMI)
统一过程(Rational Unified Process,UP)
软件工程概述
单个系统开发生命周期(明确各阶段产出物)
单个系统开发生命周期如下图所示。
能力成熟度模型
CMM是对软件组织化阶段的描述,随着软件组织定义、实施、测量、控制和改进其软件过程,软件组织的能力经过这些阶段逐步提高。针对软件研制和测试阶段,分为五个级别,见下表
CMM成熟度模型
能力等级 | 特点 | 关键过程区域 |
初始级 (Initial) | 软件过程的特点是杂乱无章,有时甚至很混乱,几乎没有明确定义的步骤,项目的成功完全依赖个人的努力和英雄式核心人物的作用 | 无 |
可重复级(Repeatable) | 建立了基本的项目管理过程和实践来跟踪项目费用、进度和功能特性,有必要的过程准则来重复以前在同类项目中的成功 | 软件配置管理、软件质量保证、软件子合同管理、软件项目跟踪与监督、软件项目策划、软件需求管理 |
已定义级 (Defined) | 管理和工程两方面的软件过程已经文档化、标准化,并综合成整个软件开发组织的标准软件过程。所有项目都采用根据实际情况修改后得到的标准软件过程开发和维护软件 | 同行评审、组间协调、软件产品工程、集成软件管理、培训大纲、组织过程定义、组织过程集点 |
已管理级 (Managed) | 制定了软件过程和产品质量的详细度量标准。对软件过程和产品质量有定量的理解和控制 | 软件质量管理和定量过程管理 |
优化级 (Optimized) | 加强了定量分析,通过来自过程质量反馈和来自新观念、新技术的反馈使过程能不断持续地改进 | 过程更改管理、技术改革管理和缺陷预防 |
能力成熟度模型集成(Capability Maturity Model Integration,CMMI)
CMMI是若干过程模型的综合和改进,不仅仅支持软件过程模型,还支持多个工程学科和领域的、系统的、一致的过程改进框架,能适应现代工程的特点和需要,能提高过程的质量和工作效率。
CMMI有阶段式模型和连续式模型两种表示方法。
(1)阶段式模型:类似于CMM,它关注组织的成熟度,五个成熟度模型见下表。
(2)连续式模型:关注每个过程域的能力,一个组织对不同的过程域可以达到不同的能力等级。
能力等级 | 特点 | 关键过程区域 |
初始级 | 过程不可预测且缺乏控制 | 无 |
已管理级 | 过程为项目服务 | 需求管理、项目计划、配置管理、项目监督与控制、供应商合同管理、度量和分析、过程和产品质量保证 |
已定义级 | 过程为组织服务 | 需求开发、技术解决方案、产品集成、验证、确认组织 级过程焦点、组织级过程定义、组织级培训、集成项目管理、风险管理、集成化的团队、决策分析和解决方案、组织级集成环境 |
定量管理 | 过程已度量和控制 | 组织过程性能、定量项目管理 |
优化级 | 集中于过程改进和优化 | 组织级改革与实施、因果分析和解决方案 |
软件开发模型
瀑布模型
瀑布模型是结构化方法中的模型,是结构化的开发,开发流程如同瀑布一般,一步一步地走下去,直到最后完成项目开发,只适用于需求明确或者二次开发(需求稳定),当需求不明确时,最终开发的项目会错误,有很大的缺陷。
原型
与瀑布模型相反,原型针对的就是需求不明确的情况,首先快速构造一个功能模型,演示给用户看,并按用户要求及时修改,中间再通过不断的演示与用户沟通,最终设计出项目,就不会出现与用户要求不符合的情况,采用的是迭代的思想。不适合超大项目开发。
增量模型
增量模型首先开发核心模块功能,而后与用户确认,之后再开发次核心模块的功能,即每次开发一部分功能,并与用户需求确认,最终完成项目开发,优先级最高的服务最先交付,但由于并不是从系统整体角度规划各个模块,因此不利于模块划分。难点在于如何将客户需求划分为多个增量。与原型不用的是增量模型的每一次增量版本都可作为独立可操作的作品,而原型的构造一般是为了演示。
螺旋模型
螺旋模型是多种模型的混合,针对需求不明确的项目,与原型类似,但是增加了风险分析,这也是其最大的特点。适合大型项目开发。
V模型
V模型特点是增加了很多轮测试,并且这些测试贯穿于软件开发的各个阶段,不像其他模型都是软件开发完再测试,很大程度上保证了项目的准确性。V模型开发和测试级别如下图所示。
喷泉模型
喷泉模型特点是面向对象的模型,而上述其他的模型都是结构化的模型,使用了迭代思想和无间隙开发。
基于构件的开发模型
基于构件的开发模型特点是增强了复用性,在系统开发过程中,会构建一个构件库,供其他系统复用,因此可以提高可靠性,节省时间和成本。
形式化方法模型
形式化方法模型是建立在严格数学基础上的一种软件开发方法,主要活动是生成计算机软件形式化的数学规格说明。
统一过程(Rational Unified Process,UP)
UP针对大型项目,有三大特点:用例和风险驱动;以架构为中心;迭代并且增量。
开发的四个阶段:起始(确认需求和风险评估);精化(完成架构设计);构建(开发剩余构件,组装构件);移交(进行测试,交付系统)。
UP的每一次迭代都是一次完整的软件开发过程,包括整个软件开发生命周期,有五个核心工作流(需求、分析、设计、实现、测试)。
MVC 模型
MVC,即模型一视图一控制器。
模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。例如它可能用像EJBs和Cold Fusion Components这样的构件对象来处理数据库。被模型返回的数据是中立的,即模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Adobe Flash和XHTML、XML/XSL、WML等一些标识语言和Webservices。如何处理应用程序的界面变得越来越有挑战性。MVC的好处是它能为应用程序处理很多不同的视图。
控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后确定用哪个视图来显示模型处理返回的数据。
完整的流程模型如下图所示。
软件开发方法
结构化方法
结构化方法流程固定,针对需求明确的项目,自顶向下,逐层分解,面向数据流。将数据流映射为软件系统的模块结构,数据流类型包括变换流型和事务流型,不同类型的数据流有不同的映射方法。以瀑布模型为代表,一旦开发完成,将难以修改,不利于复用及后续版本的开发,现在已被面向对象法代替。
原型方法
原型方法适合于需求不明确的开发,以原型模型为代表。
面向对象方法
面向对象方法强调复用性,构建全面合理的模型,供不同项目使用,方便修改,节省开发时间和效率,增强复用性,以构件组装模型为代表。
Jackson方法
Jackson方法面向数据结构的开发方法,适合于小规模的项目。
敏捷开发方法
敏捷开发方法针对中小型项目,主要是为了给程序员减负,去掉一些不必要的会议和文档。指代一组模型(极限编程、自适应开发、水晶方法、……),这些模型都具有相同的原则和价值观,具体如下图所示
开发宣言:个体和交互胜过过程和工具、可以工作的软件胜过面面俱到的文档、客户合作胜过合同谈判、响应变化胜过遵循计划。
结对编程:一个程序员开发代码,另一个程序员在一旁观察审查代码,在开发的同时对代码进行初步审查,共同对代码负责,能够有效地提高代码质量。
自适应开发:强调开发方法的适应性(Adaptive)。不像其他方法那样有很多具体的实践做法,它更侧重为软件的重要性提供最根本的基础,并从更高的组织和管理层次来阐述开发方法为什么要具备适应性。
水晶方法:每一个不同的项目都需要一套不同的策略、约定和方法论。
特性驱动开发:是一套针对中小型软件开发项目的开发模式,是一个模型驱动的快速迭代开发过程,它强调的是简化、实用、易于被开发团队接受,适用于需求经常变动的项目。
极限编程(Extreme Programming,XP):核心是沟通、简明、反馈和勇气。因为知道计划永远赶不上变化,XP无需开发人员在软件开始初期做出很多的文档。XP提倡测试先行,为了将以后出现bug的几率降到最低。
并列争球法Scrum:是一种迭代的增量化过程,把每段时间(30天)一次的迭代称为一个“冲刺”,并按需求的优先级别来实现产品,多个自组织和自治的小组并行地递增实现产品。