- 通用过程模型
每个框架活动由一系列软件工程动作构成;每个软件工程动作由任务集来定义,这个任务集明确了:①将要完成的工作任务,②将要产生的工作产品,③所需要的质量保证点,④用于表明过程状态的里程碑。
- 识别明确任务集(灵活运用)
任务集:任务集定义了为了完成软件工程活动的目标而需要完成的实际工作。
- 完成一系列任务
- 发布一系列工作产品
- 应用一系列质量保证的过滤器
- 项目里程碑。
- 电话交流这个动作所包括的任务集:
Class:
打电话之前:①发短信确定沟通时间(预约)②沟通计划,确定步骤(准备)
打电话中:沟通技巧,电话记录(粗记)
电话打完:①录音/草记(打电话)②整理电话内容(整理)③回头沟通(确认)-整理文档给用户确认(可以邮件的形式发送)
Book/PPT:
- 通过电话和利益相关者取得联系;
- 讨论需求并做记录;
- 将笔记整理成一份简单的书面需求;
- 通过邮件请利益相关者审阅并认可。
- 惯用过程模型(“传统”过程模型)
可以为特定案例挑选合理的过程模型
惯用过程模型对软件工程提倡了一种有序的方法。活动和任务都是按照过程的特定指引顺序进行的。
- the code-and-fix model
软件开发是一个人的任务;
这是一个科学或工程应用;
开发人员也是软件的用户;
需求是完全知道的;
软件产品的开发主要涉及编写代码并修复bug(如果有的话)。
- 瀑布模型(经典生命周期)
优点:适合工程量小、人力资源少并且开发过程中改动不大的项目
缺点:错误发现时间迟,产生的风险代价高
特点:①需求必须准确且相对稳定②要求高(严谨)③开始和结尾都有用户参与
- V模型 和瀑布模型并没有本质的区别,将验证和确认动作应用于早期软件工程工作中的直观方法
和瀑布模型几乎一样,本质是添加一系列测试,任务相对细化
遇到的问题:
实际的项目很少遵守瀑布模型提出的顺序。
客户难以清除出的描述所有需求。
客户必须要有耐心,只有在项目接近尾声的时候,他们才能得到可执行程序。
- 增量模型(多次迭代交互)
- 以增量的方式应用瀑布模型的元素;
- 第一个增量通常是核心产品;
- 后续元素提供了扩展的功能;
- 随后的特性(一些已知的,一些未知的)被创建,而核心产品可能要进行评估;
- 如果客户要求的截止日期是不可能满足的,那么一系列的发布可能会解决这个问题;
- 允许一个团队的人员配置波动。(人员之间可以并行工作)
优点:
1. 能在较短的时间内向用户提交可完成部分工作的产品。2. 逐步增加产品功能可以使用户有充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。3. 规避技术风险4. 可并行开发构件,加快开发的进度5. 对于在业务截止日期之前完全实施的人员配置非常有用。
缺点:
1. 并行开发构件有可能遇到不能集成的风险,软件必须具备开放式的体系结构;2. 增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。
适用范围:
- 进行已有产品升级或新版本开发,增量模型是非常适合的;
- 对完成期限严格要求的产品,可以使用增量模型;
- 对所开发的领域比较熟悉而且已有原型系统,增量模型也是非常适合的。
- 项目在既定的商业要求期限之前不可能找到足够的开发人员
- 并行模型(The RAD Model)
- 强调短的开发周期;
- 如果需求被很好地理解,(需求不好改)那么项目范围会受到限制;
- 对于大型项目可能需要大量的人力资源;
- 对于不高度模块化的系统,并行方法可能不起作用;(拆分要求高-耦合度要低)
- 如果系统需要相互调优各种组件,并行方法可能不起作用;
- 平行可能不适用于技术风险高(新技术要先预演)
- 演化模型(原型模型)
- 当客户有合法的需求,但对细节一无所知时有用;
- 最初的原型可能没什么用:太慢,太大,太不友好,等等。
危险:
- 顾客可能会“喜欢”用“口香糖”粘在一起的原型(整个软件是随意搭成的)。当被告知这只是一个需要重新构建的原型时,他可能只需要“少量修复”,稍加修改让软件成为一个可运行产品。
- 开发者可能会试图将原始原型作为最终产品,牺牲质量以换取快速收益
- 演化模型(抛弃原型模型)
- 演化模型(螺旋模型)
优点:
- 它结合了原型的迭代性质和瀑布模型的系统性和可控性特点。
- 强调风险
- 强调阶段质量
- 提供纠错的机会
- 使用原型作为风险降低机制,进一步使开发人员能够在产品演变的任何阶段应用原型方法。
缺点:
- 每个阶段都要提出被选方案,进行风险分析,研发周期长,效率低
- 必须要转业的风险分析人员的参与
如果没有发现和管理重大风险,问题无疑将会发生。
适用范围:大型项目-复杂、规模大
- 统一过程(UP)
统一过程:“用例驱动、以体系结构为中心、迭代和增量的”软件过程,与统一建模语言(UML)紧密结合。