- 软件生存周期:
- 需求分析:准确地确定软件系统必须做什么。
- 概要设计:每个成分都是意义明确模块。
- 详细设计:对每个模块完成的功能进行具体的描述,对功能细化。
- 编码:转换成计算机可接收的程序代码。
- 维护:逆向工程中从源码提取设计信息。
- 软件过程:
- 软件质量依赖软件开发过程的质量。
- 其中个人因素占主导作用。
- 能力成熟度模型(CMM)
- 初始级:杂乱无章,有时甚至很混乱,几乎没有明确定义的步骤。
- 可重复级:有可以跟踪项目费用、进度和功能的特征。
- 已定义级:管理和工程上,已经文档化、标准化。(部署)
- 已管理级:重点关注产品的过程和质量。产品质量被开发成员理解和控制。
- 优化级:通过来自过程质量反馈和来自新观念、新技术的反馈,使过程能不断持续的改进。
- 能力成熟度模型集成(CMMI)
- 阶段式模型
(1). 初始的:过程不可预测且缺乏控制。
(2). 已管理的:过程为项目服务。
(3). 已定义的:过程为组织服务。
(4). 定量管理的:过程已度量和控制。
(5). 优化的:集中于过程改进。 - 连续式模型
(1). CL0(未完成的)
(2). CL1(已执行的)
(3). CL2(已管理的)
(4). CL3(已定义级的)
(5). CL4(定量管理的)
(6). CL5(优化的)
- 阶段式模型
- CMMI不能指导代码优化。
- 演化模型:
- 原型模型
- 螺旋模型
- 原型模型:
- 验证需求有效性
- 探索特殊解决方案
- 支持用户界面设计
- 有效的捕获系统的需求
- 根据使用原型的目的不同,原型可以分为3类。
- 探索型原型
- 实验型原型
- 演化型原型
- 瀑布模型:
- 高内聚,低耦合。
- 模块规模,越大越好。
- 瀑布模型的一个变体是V模型。
- 容易理解,管理成本低。
- 强调早期计划及需求调查和产品测试。
- 客户必须能够完整、正确、清晰地表达他们的需要。(缺点,因为这很难)
- 在有类似的开发经验时,推荐采用。(因为此时需求明确)
- 增量模型
- 快速构造可运行产品的好方法。
- 第一个可交付的版本所需要的成本和时间很少。
- 由于很快交付第一个版本,所以可以减少用户需求的变更。
- 在项目开始时,可以仅对一个或两个增量投资。
- 如果没有对用户的变更需求进行规划,初始的增量很可能对后续增量带去不稳定。(缺点,因为用户可能自己都不知道之后的变更情况,发生概率很高)
- 如果需求不像早期思考的那样稳定和完整,那么一些增量就要重新开发,重新发布。(缺点,同上条,这两条都是用户需求对增量的影响)
- 早期的增量作为原型,从而可以加强对系统后续的开发需求的理解。
- 具有最高优先级的功能首先交付,随着后续的增量不断加入,这就使得更重要的功能得到等多的测试。
- 注意:将用户需求划分为多个分量不是该模式的特点。
- 可能不得不修改原来已经构建好的系统部分。(缺点,边做边改)
- 可维护性大大提高。
- 每次只提交用户部分功能,用户有较充分的时间学习和适应新产品。
- 统一过程(UP)模型
- 起始阶段:项目的初创活动,构想文档。
--生命周期目标 - 精化阶段:需求分析和架构演进。
--生命周期架构 - 构建阶段:关注系统的构建,产生实现模型,产生在适当的平台上集成的软件产品。
--初始运作功能。 - 移交阶段:提交方面的工作。
--产品发布
- 起始阶段:项目的初创活动,构想文档。
- 敏捷方法
- 极限编程(XP)
- 水晶发(Crystal)
- 并列争求法(Scrum)
- 自适应软件开发(ASD)
- 敏捷统一过程(AUP)
- 极限编程(XP)
- 四大价值观:沟通、简单性、反馈、勇气。
- 5个原则:快速反馈、简单性假设、逐步修改、提倡更改、优质工作。
- 12个最佳实践:计划游戏、隐喻、简单设计、测试先行、重构、结队编程、小型发布、集体代码所有制、持续集成、每周工作40小时、现场客户、编码标准。
- 计划游戏:快速制定计划、随着细节的不断变化而完善。
- 小型发布:系统设计要能搞尽可能早的交付。
- 隐喻:找到合适的比喻传达消息。
- 简单设计:只处理当前需求,使设计保持简单。
- 测试先行:先写测试代码,然后编写程序。
- 重构:重新审视需求和设计,重新明确的描述它们以符合新的和现有的需求。
- 持续集成:可以按日甚至小时为客户提供可运行版本。
- 水晶法(Crystal):为每一个不同的项目都需要一套不同的策略、约定和方法论。
- 并列争求法(Scrum):每30天一次的迭代成为一个“冲刺”。
- 自适应软件开发(ASD)
- 有一个使命作为指导。
- 特征被视为客户价值的关键点。
- 过程中的等待是很重要的,“重做”和“做”一样关键。
- 变化不被视为改正,被视为对软件开发实际情况的调整。
- 确定的交付时间迫使开发人员认真考虑每一个生产版本的关键需求。风险也包括其中。
- 敏捷统一过程(AUP):建模,实现,测试,部署,配置及项目管理,环境管理。