软件危机复习
没有银弹的含义
软件危机:由于软件规模越来越大,软件复杂性越来越高,可靠性问题也越来越突出,传统的个人设计,个人实现的方式不再满足要求,迫切需要改变软件生产方式,提高软件开发效率,软件危机随之爆发。
“在10年内无法找到解决软件危机的杀手锏(银弹)。
在大型软件中打造抽象的软件概念模型,最难的点是缺乏有效的管理。由于软件概念结构的复杂性,无法达成软件概念的一致性和完整性从,自然无法解决软件危机带来的困境。
为什么要有软件过程模型
- 让整个项目团队对软件开发过程有一致的理解(项目团队)
- 让我们审视软件过程中是否有活动上的冲突,是否有重复劳动和遗漏。(活动本身)
- 在规划软件过程时,方便我们为特定的目标评估合适的软件过程。(规划)
软件的生命周期有哪几个阶段
- 分析——需求分析和定义,如敏捷统一过程中的用例建模和业务领域建模。
- 设计——软件架构设计和软件详细设计,前者和分析阶段联系紧密,后者和实现阶段联系紧密
- 实现——分为编码和测试
- 交付——主要是部署,交付测试
- 维护——时间最长,而且维护阶段可能会形成单独项目最后再次合并进维护阶段。
描述性过程和说明性过程
描述性过程是客观陈述在软件开发过程中实际发生什么。
说明性过程主观陈述在开发过程中应该会发生什么,有利于整个团队对软件过程形成一致的理解。
五种典型的软件过程模型
瀑布模型
顺序结构的软件过程模型,没有任何迭代,适用于能够完全彻底理解的需求和需求不会发生改变的情况。只有在生命周期的后期才能看到结果。
计划--需求分析--概要设计--详细设计--编码和实现--单元测试--系统测试--验收测试--维护
带原型的瀑布模型
由于瀑布模型在软件过程的后期才能看到结果,会将各种风险积攒到后期,为了尽早暴露风险进行风险控制,在瀑布模型的基础上增加一个原型化阶段,可以将风险前移。
原型是软件开发人员和用户或客户交互得到的,如用户接口原型,其可以在需求分析阶段提供直观的反馈;在设计阶段,原型可能是系统架构的一部分,有利于验证技术方案的可行性。
V模型
V模型是在瀑布模型的基础上发展出来的,单元测试,集成测试和系统测试都是为了验证设计阶段,交付测试是为了确认需求阶段。也就是说,瀑布模型前后两端具有内在的紧密联系。将前后两端整合起来可以提高活动的内聚度。
提供一种工作思路,在进行一项工作前,先思考验证该工作的方法。
分阶段增量和迭代
分阶段的开发分为两种策略,一种是增量开发,一种是迭代开发。
- 增量开发是从一个子系统开始交付,每次交付会增加一些新功能,最终实现整个系统的开发。
- 迭代开发是在一个完整的系统框架上,每次升级或者更新其中的一些子系统,反复迭代逐步细化完成系统开发。
螺旋模型
- 尤其重视系统风险,特别适用于庞大且复杂,风险高的项目
- 通常分为四个阶段:制定计划、确定目标和备选方案、风险评估、开发测试。
- 在每个迭代阶段,构建原型是螺旋模型减小风险的基本策略。
团队的基本要素
规模、凝聚力、团队协作的基本条件
TSP的基本工作方法
- 如何开始一个团队项目
- 团队项目的基本策略
- 开发计划
- 定义需求
- 与团队一起设计
- 产品实现
- 集成与系统测试
- 结项总结
团队强度和项目特点的关系
评价团队的方法
软件团队的成熟度越高,软件开发的能力越强。CMMI分为了五个等级:
一级,初始级,软件团队对目标与要做的努力很清晰,项目能否成功取决于实施人员。
二级,管理级,可以做到职责到人,并对项目流程进行监测,保证好了软件项目的成功率。
三级,已定义级,对标准流程制度化(定义了什么,肯定是定义了制度),不仅能做到同类软件项目的成功,也能在其他项目上成功,科学管理已经成为组织文化。
四级,量化管理级,管理达到数字化,实现了管理的精度,降低项目实施在质量上的波动。
五级,持续优化级,已经可以做到对项目实施中可能出现的问题予以预防。能使用新技术优化流程。
CMMI有两种方来评价组织软件过程的成熟度,软件过程评估和软件能力评估计。主要用于能力评估和过程改进。
敏捷宣言的核心思想
个体和互动 高于 流程和工具
工作的软件 高于 详尽的文档
客户合作 高于 合同谈判
响应变化 高于 遵循计划
敏捷方法遵循的原则就是尽可能实现左项。激发个体斗志,以他们为核心来搭建项目,提供所需的环境,进而达成目标
DevOps和精益原则
DevOps是一组过程、方法与系统的统称,用于促进软件开发、技术运营和质量保障(QA)部门之间的沟通、协作与整合,可以看做三者的交际。
精益原则包括精益生产、精益创业和最小可行产品。
精益生产追求零库存与快速反应,强调人力资源的重要性。
精益创业的核心思想是先投入一个极简原型产品,并根据用户反馈来不断迭代,以适应市场。做到全过程、全员化、标准化、责任化。
MVP是把最核心的功能用最小的成本实现,并快速征求用户意见。