7.1、《软件工程》-软件生命周期-CMM-开发模型
软件生命周期
软件生命周期
什么是软件工程?以工程化的原则和方法来开发软件,其目的是提高软件生产率、提高软件质量、降低软件成本。
软件工程3大组成部分:方法、工具、过程。
什么是软件生命周期:经过开发、使用和维护,直到最后退役的全过程。
软件生命周期的过程:
- 基本过程:主要参与方是发起或完成软件产品开发、运行或维护的组织。基本过程分为获取过程、供应过程、开发过程、运作过程和维护过程。
开发过程包括:需求分析、设计、编码、集成、测试以及软件产品相关的安装和验收等活动;维护过程包括软件产品的迁移和退役。(软件生存周期的过程) - 支持过程:是一个有机组成部分支持其他过程,目的是软件项目成功和提高质量。
支持过程包括:文档预编译过程、配置管理过程、质量保证过程、验收过程、确认过程、联合评审过程、审核过程、问题解决过程和易用性过程。(用于支持其他过程) - 组织过程:组织过程可被某个组织用来建立和实现由相关的生产周期过程和人员组成的基础结构,并不断优化这种结构和过程。组织过程包括:管理过程、基础设施过程、改进过程、人力资源过程、资产管理过程、重用大纲管理过程、领域工程过程。(和人、公司有关)
软件生命周期各个阶段的任务
都属于基本过程,需求分析属于开发过程。
- 获取、供应过程:可行性研究(能不能做)
- 开发过程:需求分析(做什么)、【概要设计(模块结构的设计)、详细设计(模块内部的设计、算法、数据结构等)】(怎么做?)、实现(做,编码)、组装测试(集成测试,不同模块组装成整体后开始测试)、确认测试(与用户需求确认)。
- 运作过程:使用
- 维护过程:维护、退役。
各阶段的产物:
- 系统规划阶段:
- 系统设计任务书、系统设计规格说明
- 系统分析阶段:
- 系统方案建议书、需求规格说明(SRS)、确认测试计划、系统测试计划、初步的用户手册 6
- 系统设计阶段:
- 程序规格说明、架构文档、概要设计文档、详细设计文档、概要测试计划、详细测试计划
- 系统实施阶段:
软件编码、单元测试报告、集成测试报告、系统测试报告、操作手册(测试完成)
习题
1、系统方案建议书是系统分析(需求分析)阶段结束的产物
2、操作手册是系统测试阶段完成的产物
软件过程管理
能力成熟度模型
CMM
能力成熟度模型CMM。衡量组织做软件的能力。有4个等级
- 初始级:软件过程杂乱无章,完全依赖个人努力和核心人物
- 可重复级:建立基本的项目管理过程和实践,有必要的过程准则来重复,(重点在重复)
- 已定义级:软件过程已经文档化、标准化、并综合成整个软件开发组织的标准软件过程。(重点在文档化、标准化)
- 已管理级:指定了软件过程和产品质量的详细度量标准。(重点是详细的度量标准)
- 优化级:可以不断的持续改进。
CMMI
能力成熟度模型集成CMMI
是若干过程模型的综合和改进,不仅仅是软件,而是支持多个工程学科和领域的、系统的、一直的过程改进框架。,能适应现代工程的特点和需要,能提高过程质量和工作效率。
CMMI 的两种表示方式:
- 阶段式模型:类似CMM,他关注组织的成熟度,5个成熟度模型如下:
初始级:
已管理级
已定义级
定量管理
优先级 - 连续式模型:关注每个过程域的能力,过程域分类:
过程管理
项目管理
工程
支持
软件过程评估
软件过程评估是根据过程模型或其他模型对组织的软件过程进行规范的评估。
评估模型有:
- CMM模型:帮助软件组织通过基于模型的过程改进
- Trililum模型:主要用于嵌入式软件开发
- bootstrap
- iso
习题
B,第1级最差
软件过程模型
也叫:软件生命周期的典型模型。使用需求明确的开发。
瀑布模型
瀑布模型的特点:需要上一项完成才开始下一项,不能回去,逐渐被淘汰了。
- 上一项活动的产物作为该项活动的输入
- 对该项活动的实施工作成功进行评审
原型模型
也叫“快速原型方法”
原型化模型的第一步是创建一个快速模型,满足原型交互,通过分析,最终确认系统的需求,在原型的基础上开发用户满意的产品。
原型化方法很难一下全面确认需求,所以他具备以下特点:
- 实际可行
- 具有最终系统的基本特征
- 构造方便、快速、造价低。
- 对用户的需求是动态响应的,逐步纳入的。
螺旋模型
螺旋模型是一个演化软件过程模型,将原型实现的迭代特征和线性顺序(瀑布)模型中控制的和系统化的方面结合起来,在螺旋模型中,软件开发是一系列的增量发布
他的开发过程具有周期性重复的螺旋线状。四个象限分别标志每个开发周期所划分的4阶段:制定计划、风险分析、实施过程和用户评估。
螺旋模型强调风险分析,特别适合庞大而复杂、高风险的系统。
V模型
V模型左边代表开发过程:编码、详细设计、概要设计、需求分析
右边代表测试过程:单元测试、集成测试、系统测试、验收测试
V 模型的特点:生命周期和测试的对应
- 单编:单元测试的测试是在详细设计完成
- 集详
- 系概
- 验需
V模型适合:需求明确且需求变更不频繁。重测试。
增量模型
增量模型:首先开发核心模块,与用户确认后再开发次要模块。优先级最高的服务最先交付。
特点:由于不是从系统整体角度划分各个模块,因此不利于模块划分。难点在于如何将客户需求划分为多个增量。与原型不同的是,增量模型每一次增量版本都可以作为独立可操作的产品。而原型的构造一般是为了演示。
后面的模型不太重要了
其他模型
喷泉模型:面向对象,以用户需求为动力,以对象为驱动的模型
基于构件的开发模型CBSD:基于构件、逐渐,特点是增强了复用性。
习题
1、视频
1、瀑布模型适合需求明确,且时间有严格要求。
原型模型适合需求不明确的快速开发
V模型适合需求明确且变更不频繁的
螺旋模型适合复杂大型项目 强调风险分析。
2、螺旋模型适合大型复杂的软件项目。
信息系统开发与方法
结构化方法
结构是指系统内各个组成要素(指模块)之间的相互联系、相互作用的框架。
结构化方法(生命周期法),是一种传统的信息系统开发方法,组成部分:
- 结构化分析:系统分析阶段
- 结构化设计:系统设计阶段
- 结构化程序设计:系统实施阶段
精髓是自顶向下,逐步求精的模块化设计,面相数据流、面向过程。
结构化方法的主要特点:
- 开发目标清晰化:遵循“用户第一”的原则
- 开发工作阶段化:根据阶段工作目标和要求进行审查,使各个阶段有条不紊的进行,便于项目管理与控制。
- 开发文档规范化:每个阶段完整都需要有相应的文档。
- 设计方法结构化:在系统分析和设计时,全局考虑,自顶向下的分解;在系统实现时,自底向上的逐步实现整个系统。
结构化方法的不足:
- 开发周期长
- 难以使用需求变化
- 很少考虑数据结构
结构化方法常用工具:一般采用图形表达用户需求,比如数据流图、数据字典、结构化语言、判定表以及判定树。
面相对象方法
面向对象方法:认为客观世界由对象组成,任何事物都可以是对象,每个对象都有自己的运动规律和内部状态,都属于某个对象类,
面向对象方法特点:
- 使用OO方法构造的系统具有更好的复用性,建立全面合理、统一的模型(用例模型和分析模型)
- OO也划分阶段,系统分析、系统设计和系统实现3个阶段没有缝隙,也就是界限变得不明确。不是一定要一项一项完成。
- 普遍使用各类信息系统的开发。
面向对象方法的不足:
1、必须依靠一定的面相对象技术支持,对大型项目有局限性,不能涉足系统分析之前的开发环节
2、大型信息系统的开发,通常是将结构化方法和OO方法结合,自底向上的时候采用OO。因此结构化方法和OO是相互依存、不可替代的。
原型化方法
原型化方法也称为:快速原型化、原型化。
根据用户初步需求,快速建立一个系统模型展示给用户,不断改进。
原型化方法分类:
- 按是否实现功能分类:水平原型(行为原型,功能的导航)、垂直原型(结构化原型,实现了部分功能)
- 按最终结果分类:抛弃式原型、演示化原型。
原型化的特点:
使系统开发周期缩短、成本和风险降低、速度加快、获得较高的综合开发收益。
原型化是以用户为中心来开发系统,对系统的功能和结构容易理解和接受,有利于系统移交。
原型化不足:
开发环境和管理水平要求较高。
原型化优点:
- 有效的确认用户需求,适用需求不明确的系统开发;适用分析层面难度大,技术层面难度不大的系统。
- 目前原型化方法不是一种独立的系统开发方法,而只是一种开发思想,不是完整意义上的方法论体系,必须与西塔的信息系统开发方法结合使用
面相服务的开发-SO
面向服务:基本单位是服务,
OO形成了构件的概念,跨构件的功能调用会采用接口的形式暴露,进一步将接口的定义和实现进行解耦,则出现了面向服务SO。面向对象、基于构件、面向服务是3个递进的抽象层次。
SO3个主要抽象级别:操作、服务、业务流程。
SO介绍:
- 最底层的操作代表单个逻辑单元的事务。服务的操作类似于对象的方法
- 位于第二层的服务代表操作的逻辑分组
- 最高层的业务流程则是为了实现特定业务目标而执行的一组长期运行的动作或活动。
快速应用开发-RAD
采用基于构件的开发方法快速开发。复用性强。是瀑布模型的一个高速变种。
RAD的4个基本思想:
- 让用户更主动参与系统分析、设计和构造中来。
- 将项目开发组织成一系列重点突出的研讨会。
- 通过一种迭代的构造方法,加速需求分析和设计阶段。
- 让用户提前看到一个可工作的系统
RAD的开发阶段:
- 业务建模
- 数据建模
- 过程建模
- 应用生成
- 测试和交付
RAD的局限性:
- 并非所有应用都适合RAD
- 开发者和客户必须在很短时间完成一系列的需求分析。
- RAD只能用于管理信息系统的开发,不适合技术风险很高的项目。
敏捷开发模型
介绍
开发宣言:个体和交互胜过 过程和工具,可以工作的软件 胜过 面面俱到的文档、客户合作 胜过 合同谈判、响应变化 胜过 遵循计划。
特点:
- 适应性,而非预设性的
- 面向人的,而非面向过程的
核心思想:
- 适应性
- 以人为本
- 迭代增量式。
主要的敏捷方法
1、极限编程-XP
XP 的基础和价值观是交流、朴素、反馈和勇气。即任何一个软件项目都可以从4个方面入手:加强交流、从简单做起、寻求反馈、实事求是。
XP是一个近螺旋的开发方法,将复杂开发分解为简单的小周期,提倡测试先行。
XP最大的不同:
- 在更短的周期内,更早的提出具体且持续的反馈信息。
- 迭代的进行计划编制
- 依赖自动测试程序来监控开发进度,尽早捕获缺陷
- 依赖口头交流、测试和源程序进行沟通
- 提倡持续的演化式的设计
- 依赖开发团队内部的紧密协作。
- 尽可能程序员短期利益和项目长期利益的平衡。
2、动态系统开发方法-DSDM
动态系统开发方法倡导以业务为核心,快速进行系统开发,DSDM认为事情不可能一次圆满完成,应该用20%的时间完成80%的有用功能,以适合商业目的为准。
3、并列争球法-Scrum
Scrum的整个开发过程有若干个短的迭代周期组成,一个短的迭代周期称为Sprint,每个Sprint的建议长度为2-4周,按需求优先级实现产品,多个自组织和自治的小组并行的递增实现产品。
统一过程模型
敏捷是轻量级,统一过程模型是重量级的。
RUP 描述了如何有效利用商业的,可靠的方法开发和部署软件,是重量级的过程。
RUP 是一个二维的软件开发模型,有9个核心工作流:
- 业务建模:理解待开发系统所在机构及其商业运作,确保所有参与人员对待开发系统所在机构有共同的认识,评估待开发系统对所在机构的影响。
- 需求:定义系统功能以及用户界面,使客户、开发人员理解系统需求功能,为项目预算和计划提供基础。
- 分析与设计:把需求分析的结果转化为分析和设计模型。
- 实现:把设计模型转为实现结果,对开发的代码进行单元测试,将不同模块集成为可执行的系统。
- 测试:测试验证,对缺陷进行归档,对软件质量提出改进意见。
- 部署:打包、分发、培训用户以及销售人员、技术支持。
- 配置与变更管理:跟踪并维护系统开发过程中产生的所有产品的完整性和一致性。
- 项目管理:为软件开发提供计划、人员分配、执行、监控等方面的知道,进行风险管理。
- 环境:提供软件环境,即提供过程管理和工具的支持。
rup生命周期的4个阶段:每个循环生成产品的一个新版本,每个循环一次由4个连续阶段组成。
- 初始,与需求有关。任务是为系统建立业务模型并确定项目的边界。关注的事整个项目的业务和需求方面的主要风险,实现过程为:明确项目规模、评估项目风险、制定项目计划、阶段技术评审。
- 细化,与设计有关。任务是分析问题领域、建立完善的架构、淘汰项目中最高风险的元素。实现过程是:确定架构、制定构建阶段计划、建立支持环境、选择构建、阶段技术评审。
- 构建,与实现有关。开发所有剩余的构建和应用程序功能,把这些构建集成为产品,并进行详细测试。完成所需功能的分析、开发、测试等。
- 移交,与实施交付有关。进行β测试测试,制作产品发布版本;对最终用户支持文档定稿;按用户的需求确认新系统;培训用户和维护人员。
β测试是在用户在实际使用下进行的测试,是完全真实的测试,软件要交付必须进行这个测试
RUP的特点:
- 用例驱动:用例指功能
- 体系结构为中心
4+1视图模型:
分析人员和测试人员:关心系统行为。看用例视图
最终用户关系系统的功能。看逻辑视图
程序员关心系统的配置、装配。看实体视图
系统集成人员(项目经理)关心系统的性能、可扩展性。看进程视图
系统工程师(运维)关心系统的发布、安装等问题。看部署视图 - 迭代与增量