1.3软件工程的概念与发展过程
软件工程的概念与发展过程
软件工程为何能解决软件危机?
其实简单来说,它就是一种问题解决思维,把一个复杂的大问题分解为更小的子问题,从而化繁为简、逐个击破。
当然,当软件工程被用于hello world这类简单程序的开发时,你是看不到软件工程的作用的,反而觉得增加麻烦。
只有当其被应用于大型、复杂、多人协同的软件开发时,它才会显示出巨大的作用。
软件工程的定义
IEEE计算机协会将软件工程定义为:
1)是应用系统化的、学科化的、定量的方法,来开发、运行和维护软件,即:将工程应用到软件。比如我们将搭房子的思想用来编写程序,设计图纸就对应于设计代码;
2)是对(1)中各种方法的研究,即是说,软件工程也是一门不断完善的研究领域,不少模型与方法是通过学术论文公之于众的。
目标
软件工程的目标是在给定的时间和预算内,按照用户的需求,开发易修改、高效、可靠、可维护、适应力强、可移动、可重用的软件。
软件工程三要素:方法、工具、过程
软件工程工具,为软件工程的过程和方法提供自动化或半自动化的工具支持。 将若干工具集成起来,与软件工程数据库和计算机系统构成一个支持软件开发的系统称“计算机辅助软件工程(CASE)”,系统中某一工具的信息加工结果可以作为另一工具的输入。集成的软件工程工具再加上人的因素构成了软件工程环境。比如建模工具Rational Rose、编程工具Visual Studio、测试工具LoadRunner等。
软件工程方法,是完成软件工程项目的技术手段。它支持项目计划和估算、系统和软件需求分析、设计、编程、测试和维护。软件工程方法依赖一组原则,它贯穿软件工程的各个环节。软件工程方法主要分两类:结构化方法和面向对象方法。
软件工程过程,贯穿软件开发的各个环节,在各环节之间建立里程碑。管理者在软件工程过程中对软件开发的质量、进度、成本进行评估、管理和控制;技术人员采用相应的方法和工具生成软件工程产品(模型、文档、数据、报告、表格等)。
软件工程的发展已经历了四个阶段:
传统的软件工程 — 对象工程 — 过程工程 — 构件工程
第一代软件工程 — 传统的软件工程
60年代末到70年代,1968年的NATO会议为了克服“软件危机” 也同时提出了“软件工程”的名词, 将软件开发纳入工程化的轨道,基本形成软件工程的概念、框架、技术和方法。称为传统的软件工程。
第二代软件工程 — 对象工程
80年代中到90年代,面向对象的方法与技术得到发展,研究的重点转移到面向对象的分析与设计,演化为一种完整的软件开发方法和系统的技术体系,称为对象工程。
第三代软件工程 — 过程工程
80年代中开始,人们在软件开发的实践过程中认识到:提高软件生产率,保证软件质量的关键是“软件过程”,是软件开发和维护中的管理和支持能力,逐步形成软件过程工程。
第四代软件工程 — 构件工程
90年代起,基于构件(Component)的开发方法取得重要进展,软件系统的开发可通过使用现成的可复用构件组装完成,而无需从头开始构造,以此达到提高效率和质量,降低成本的目的。称为构件工程。
软件工程的7个原则( B. W. Boehm,1983)
软件工程估算模型COCOMO模型之父、软件过程螺旋式模型之父:
- 使用阶段性生命周期计划的管理
- 进行连续的验证
- 保证严格的产品控制
- 使用现代编程工具/工程实践
- 保持清晰的责任分配
- 用更好更少的人
- 保持过程改进。