目录
本文总结于《软件工程——原理、方法与应用》第三版
第二章 软件生存周期与软件过程
1. 软件生存周期
一个软件项目从开始立项起,到废弃不用止,统称为软件的生存周期。
软件生存周期被划分为计划、开发、运行三个时期。
由于软件生存周期被划分为较小的阶段,使得因为软件规模增长而大大增加的软件复杂性变得较易控制和管理。
2. 典型的软件生存周期
计划->需求分析->软件分析->软件设计->编码(测试)->软件测试->运行维护
需求分析:(准确回答,系统必须做什么)
提交:软件需求说明书/系统功能说明书/初步的系统用户手册
软件设计:(回答怎么做的问题)概要设计、详细设计
提交:设计说明书(软件结构图)
程序编写:(具体实现)
提交:源程序清单
软件测试:(挑错)单元测试、组装测试 有效性测试
提交:测试报告文档(测试计划、测试用例、测试结果)
运行维护:改正性维护、适应性维护、完善性维护
3. 软件过程
围绕软件开发所进行的一系列活动
软件生存周期中的阶段和软件过程中的活动是基本一致的。
(1) 传统的软件过程:瀑布模型、快速原型模型
-
瀑布模型:基于软件生存周期的线性开发模型
强调软件文档:每一个阶段必须完成规定的文档,每一个阶段都要复审完成的文档。 特点:阶段间的顺序性和依赖性、推迟实现的观点、质量保证的观点 顺序性:前一阶段的工作完成后才能执行下一阶段的任务 依赖性:前一阶段的输出文档是下一阶段的输入文档 存在问题:不适合需求模糊的系统,开发初始阶段很难彻底弄清软件需求 需求定义与分析->总体设计->详细设计->编码->测试->使用维护
-
快速原型模型
特点: ·“逼真”的原型可以使用户迅速作出反馈 ·循环回溯和迭代:非线性模型 ·使用快速开发工具 种类: ·渐进型:对原型补充和修改获得最终系统 ·抛弃型:原型废弃不用 应防止的倾向:舍不得抛弃,从而影响软件质量
(2) 软件演化模型(采用渐增式或迭代式的开发方法):增量模型、螺旋模型、构件集成模型
-
增量模型
定义:把软件看作一系列相互联系的增量,每次迭代完成一个增量。 增量: ·小而可用的软件 ·第一个增量通常是软件的核心 特点: ·在前面增量的基础上开发后面的增量 ·每个增量的开发可用瀑布或快速原型模型 ·每个增量开发的顺序性和总体的迭代性相结合 ·有利于控制技术风险
-
螺旋模型
特点: ·瀑布模型(顺序性、边开发边复审)+快速原型(迭代性) ·风险分析->发现、控制风险 一个螺旋式周期 ·计划:确定目标,选择方案,选定完成目标的策略 ·风险分析:从风险角度分析该策略 ·开发:启动一个开发活动 ·评审:评价前一步的结果,计划下一轮的工作
- 迭代和瀑布的区别
迭代和瀑布的最大的差别就在于风险的暴露时间上。
瀑布模型的特点文档是主体,很多问题再最后才会暴露出来。
迭代特点,根据风险列表选择要在迭代中开发新的增量内容,每次迭代完成时都会生成一个经过测试的可执行文件,可核实是否降低了目标风险。
-
构件集成模型
构件 ·在某个领域中具有通用性,可以复用的软件部件 ·将可以复用的构件存储起来,形成构件库 特点 ·面向对象 ·基于构件库 ·融合螺旋模型特征 ·支持软件开发的迭代方法 ·软件复用
(3) 形式化方法模型
-
·转换模型
开发过程: ·确定形式化需求规格说明书 ·进行自动的程序变换 ·针对形式化开发记录进行测试 特点 ·形式化软件开发方法 ·形式化需求规格说明 ·变换技术 ·程序自动生成技术 ·确保正确
-
·净室模型
净室思想 ·在分析和设计阶段消除错误 ·在“洁净”状态下实现软件制作 形式化 ·盒结构表示分析和设计 ·正确性验证 增量模型 ·把软件看成一系列的增量
(4) 软件过程模型的特点汇总
瀑布模型:
线性模型,每一阶段必须完成规定的文档,适合需求明确的中小型软件开发
快速原型:
用户介入早,通过迭代完善用户需求,原型废弃不用,适合需求模糊的小型软件开发
增量模型:
每次迭代完成一个增量,可用于OO开发。适合容易分块的大型软件开发
螺旋模型:
典型迭代模型,重视风险分析,可用于OO开发。适合具有不确定性大型软件开发
构件集成模型:
软件开发与构件开发平行进行,适用于领域工程、行业的中型软件开发
转换模型:
形式化的规格说明,自动的程序变换系统。属于理想化模型,尚无成熟工具支持
净室模型:
形式化的增量模型,在洁净状态下实现软件制作。适合开发团队熟悉形式化方法,中小型软件开发。
(5) 统一过程和敏捷过程
- 统一过程(RUP)
描述了软件开发中各个环节应该做什么、怎么做、什么时候做以及为什么要做,描述了一组以某种顺序完成的活动
RUP将软件开发分为四个阶段:
·初始阶段:定义整个项目的范围
·细化阶段:制定项目计划、描述功能、建立体系架构框架
·构造阶段:构造软件产品
·迁移阶段:将软件产品移交到最终用户手中
每个阶段又分为若干次迭代,每次迭代有一个核心工作流,都会经历需求、分析、设计、实现和测试等活动。
9个核心工作流,分为6个核心过程工作流和3个核心支持流。
核心过程工作流:商业建模、需求、分析和设计、实现、测试、部署
核心支持流:配置和变更管理、项目管理、环境
统一过程(RUP)的基本特征是“用例驱动、以架构为中心的和受控的迭代式增量开发”,一个RUP可分为若干个周期,每个周期的开发过程被分为4个阶段,每个阶段可进行若干次迭代。
RUP将一个周期的开发过程划分为如下的4个阶段:
(1)初始阶段:该阶段的主要任务包括确定项目范围和边界,识别系统的关键用例,展示系统的候选架构,估计项目费用和时间,评估项目风险。其意图是建立项目的范围和版本,确定业务实现的可能性和项目目标的稳定性。提交结果包括原始的项目需求和业务用例。
制品:构想文档、有关用例模型的调查、初始的业务用例、早期风险评估、显示阶段和迭代的项目计划等制品;
(2)精华阶段:该阶段的主要任务包括分析系统问题领域,建立软件架构基础,淘汰最高风险元素。其意图是对问题域进行分析,建立系统的需求和架构,确定技术实现的可行性和系统架构的稳定性。提交结果包括系统架构及其相关文档、领域模型、修改后的业务用例和整个项目的开发计划。
制品:补充需求分析、软件架构描述、可执行的架构原型
(3)构建阶段:该阶段相对简单一些,其主要任务包括资源管理、控制和流程优化,开发剩余的构件,然后进行构件组装和测试等。其主要意图是增量式开发一个可以交付用户的软件产品。
制品:准备交到最终用户手中的产品,包括具有最初运作能力的在适当的平台上集成的软件产品、用户手册和对当前版本的描述。
(4)提交阶段:该阶段的主要任务包括进行β测试,制作发布版本,用户文档定稿,确认新系统,获取用户反馈,培训、调整产品使最终用户可以使用产品。其主要意图是将软件产品提交用户。
- ·敏捷过程
是一种以人为核心、迭代、循序渐进的开发方法,其软件开发过程称为“敏捷过程”
敏捷过程价值观:
·个人和交互胜过过程和工具
·可以运行的软件胜过面面俱到的文档
·客户合作胜过合同谈判
·响应变化胜过遵循计划
- ·极限过程
是一种轻量级的、敏捷的软件开发方法
4个价值观:交流、简单、反馈、勇气
4个方面改善:加强交流、从简单做起、寻求反馈、用于实事求是
12个核心实践:完整团队、计划对策、测试、简单设计、结对编程、小软件版本、设计改进、持续集成、代码共有、编码标准、系统比喻、可持续的速度
(6) 软件可行性研究
目的
·研究项目是否可能实现和值得进行
·回答Why to do
研究的内容
·经济可行性
·运行可行性
·技术可行性
·法律可行性
可行性研究的步骤
·对当前系统进行调查和研究
·弄清当前系统
·导出新系统逻辑模型
·导出新系统的解决方案
·设计不同的解决方案
·提出推荐的方案
·本项目的开发价值
·推荐这个方案的理由
·编写可行性认证报告
·系统概述
·可行性分析
· 结论意见
(7) 软件风险分析
风险识别
·项目风险
·技术风险
·商业风险
风险预测
·风险发生的可能性
·风险发生后的后果
风险的驾驭和监控