5.1 软件工程
20世纪60年代,为了解决软件危机,提出了软件工程的概念。
软件危机的具体表现:
- 软件开发进度难以预测;
- 软件开发成本难以控制;
- 软件功能难以满足用户期望;
- 软件质量无法保证;
- 软件难以维护;
- 软件缺少适当的文档资料。
5.1.1 软件工程定义
软件工程师应用计算机科学、数学、逻辑学及管理科学等原理,开发软件的工程。软件工程借鉴传统工程的原则和方法,以提高质量、降低成本和改进算法。其中,计算机科学、数学用于构建模型与算法;工程科学用于制定规范、设计范式、评估成本及确定权衡;管理科学用于计划、资源、质量、成本等管理。
软件工程过程是指获得软件产品,在软件工具的支持下由软件工程师完成的一系列软件工程活动,包括4个方面:
- Plan:软件规格说明
- Do:软件开发
- Check:软件确认
- Action:软件演进
5.1.2 软件过程模型
软件经历需求设计、软件设计、软件开发、运行维护,直至被淘汰的全过程称为软件的生命周期。
为了使软件生命周期种的各项任务能够有序地按照规程进行,对各项任务给予规程约束的工作模型称为软件过程模型(软件生命周期模型)。
1、瀑布模型
2、原型化模型
3、螺旋模型
5.1.3 敏捷模型
20世纪90年代,软件开发受到两个因素影响:面向对象编程开始取代面向过程编程;互联网泡沫刀纸快速投向市场以及公司的快速发展成为关键商业因素。
快速变化的需求需要短的产品交付周期,从而诞生了敏捷方法的概念。
1、敏捷方法的特点
- 敏捷型方法是“适应性(adaptive)”而非“预设性(predictive)”的;
- 敏捷型方法是“面向人的(People-oriented)”而非“面向过程的(Process-oriented)”。
2、敏捷方法的核心思想
- 敏捷方法是适应型,而非可预测性;
- 敏捷方法是以人为本,而非以过程为本;
- 迭代增量式的开发过程。
3、主要敏捷方法简介
- 极限编程(Extreme Programming,XP)
- 水晶系列方法
- Scrum,迭代式增量软件开发过程,侧重于项目管理
- 特征驱动开发方法(Feature Driven Development,FDD)
- 6种关键项目角色:项目经理、首席架构设计师、开发经理、主程序员、程序员和领域专家;
- 5个核心过程:开发整体对象模型、构造特征列表、计划特征开发、特征设计和特征构建。
5.1.4 统一过程模型(RUP)
统一过程模型(Rational Unified Process,RUP)描述了如何利用商业的、可靠的方法开发和部署软件,是一个重量