软件工程的定义
软件工程是一门应用计算机科学、经济学、管理学以及其他工程学科理论的系统性学科,它专注于研究和应用规范化的、可度量的方法,以高效且经济地开发、运行和维护高质量软件。
软件工程包括以下特点:
- 系统性:强调软件开发是一个有序、有组织的复杂系统工程,需要遵循既定的生命周期模型,涵盖需求分析、设计、编码、测试、部署、维护等多个阶段。
- 规范化:提倡使用标准化的开发方法、工具、文档模板和流程,确保软件产品的质量和一致性,并方便团队协作与知识传承。
- 可定量:强调通过度量和数据分析来控制软件开发过程,如成本估算、进度跟踪、质量评估等,以实现对项目的有效管理和决策。
- 结合管理技术和最佳实践:将经过实践验证的项目管理技术和业界最佳实践融入软件开发生命周期中,如风险管理、配置管理、变更控制、敏捷方法等。
- 持续改进:鼓励采用迭代和增量开发,适应变化,不断学习并从经验中吸取教训,持续优化软件产品和开发过程。
软件工程的起源和发展
20世纪60年代末至70年代初,随着软件规模和复杂度的增长,开发效率低下、质量问题频发、项目超期和预算超支现象普遍,被称为“软件危机”。
为应对这一危机,1968年在北约软件工程会议上,首次正式提出了“软件工程”这一术语,倡导将工程化原则应用于软件开发,以提高软件质量和生产率。
1970年,Winston W. Royce提出了瀑布模型,成为早期广泛应用的软件开发模型。随后出现了螺旋模型(Boehm, 1988)、快速应用开发(RAD)、增量模型等其他生命周期框架。
20世纪90年代,为响应快速变化的需求和市场环境,敏捷宣言(2001)和敏捷联盟成立,推动了Scrum、极限编程(XP)、看板方法等敏捷开发框架的广泛应用。
软件工程的内涵
软件生命周期(软件过程)
- P(Plan): 软件描述(软件规格说明书)-需求工程、系统分析
- D(Do): 软件实现(软件设计、软件开发、软件测试)
- C(Check): 软件确认(软件有效性验证)
- A(Action): 软件演化
软件生命周期模型(软件过程模型)
1. 瀑布模型(Waterfall Model)
- 线性顺序:各阶段(需求分析、设计、编码、测试、部署、维护)按严格的线性顺序进行,每个阶段结束后才进入下一个阶段,如同瀑布自上而下流动。
- 文档驱动:强调每个阶段结束时产生正式文档,作为下一阶段工作的输入。
- 不可逆性:一旦进入后续阶段,前一阶段的成果不易更改,对前期需求的准确性和稳定性要求较高。
2. 原型化模型(Prototype Model)
水平原型(界面)、垂直原型(算法)
抛弃式原型、演化式原型
3. 螺旋模型(Spiral Model)
- 迭代与风险评估:结合瀑布模型的线性特点与迭代开发的思想,每个迭代(螺旋圈)包含四个主要活动:确定目标、风险分析、开发与验证、评审。
- 风险管理:特别关注风险识别与管理,每个阶段开始时进行风险评估,制定应对措施。
- 适合大型复杂项目:尤其适用于风险高、需求不明确、技术挑战大的项目。
5. 敏捷开发模型(Agile Models)
- 以人为本,而非以过程为本:强调个体和互动、客户合作、响应变化,而非详尽的文档和固定的计划。
- 迭代与增量:通过短周期(如两周或一个月)的迭代(Sprint)来开发软件,每个迭代结束时交付可用的软件增量。
- 适应性,而非预测性:鼓励在开发过程中根据实际情况调整需求、计划和设计,适应变化。
- Scrum:角色包括产品负责人、开发团队、Scrum Master,采用产品待办列表、Sprint计划会议、每日站会、评审会议、回顾会议等实践。
- Kanban:可视化工作流程,限制在制品数量,通过拉动系统促进持续流动,强调持续改进。
- XP(极限编程):强调持续集成、结对编程、测试驱动开发、重构、简单设计、客户合作等实践。
- 水晶系列方法
- 特征驱动开发方法FDD,Feature Driven Development
6. 统一过程模型RUP(Rational Unified Process)
RUP的核心概念:
- 角色
- 活动
- 制品
- 工作流
RUP采用二维结构来组织开发过程:
- 时间维度(横轴):将软件开发生命周期划分为四个主要阶段:初始(Inception)、细化(Elaboration)、构造(Construction)、交付(Transition)。每个阶段都有明确的目标和出口准则,只有达到相应标准后才能进入下一阶段。
- 初始阶段:确定项目愿景,评估初步风险,制定初步商业论证,创建初步架构和用例模型。
- 细化阶段:进一步细化需求,设计系统架构,规划主要风险的应对策略,开发原型或核心模块以验证关键技术。
- 构造阶段:完成大部分编码和测试工作,按照迭代周期开发剩余功能,持续集成和测试,确保产品质量。
- 交付阶段:进行系统集成测试、用户验收测试,准备部署环境,培训用户,完成产品发布和移交。
- 内容维度(纵轴):RUP的核心工作流(Core Workflow),涵盖了开发过程中需要完成的各项工作活动:
- 业务建模(Business Modeling):理解业务背景,定义业务用例,描述业务规则和流程。
- 需求(Requirements):细化和验证业务需求,生成软件需求规格,管理需求变更。
- 分析与设计(Analysis & Design):设计系统架构和模块,创建设计模型,如类图、序列图等。
- 实现(Implementation):编写代码,遵循编程规范,实现设计模型。
- 测试(Testing):制定测试策略,编写测试用例,执行单元测试、集成测试、系统测试等。
- 部署(Deployment):准备部署环境,制定部署计划,进行系统安装、配置和迁移。
- 项目管理(Project Management):跟踪进度,管理资源,控制风险,协调团队。
- 配置与变更管理(Configuration & Change Management):管理软件工件版本,控制变更流程,确保产品完整性。
- 环境:提供软件开发环境
RUP的特点:
- 用例驱动
- 以体系结构为中心:4+1视图模型
- 迭代与增量