前言
学习了半年的软件工程课程,总不能一无所获吧,故此写下文章总结一番。
软件工程是一门综合性交叉学科,它涉及计算机科学、工程科学、管理科学和数学等领域。学习目标是掌握需求分析、软件设计、编码风格、软件测试的工程化方法。
软件=程序+数据+文档
一、软件危机
1.定义
定义:在计算机软件的开发和维护过程中所遇到的一系列严重问题。
1968年 NATO 会议( Garmisch , Germany )提出"软件危机"
- 项目超出预算
- 项目超过计划完成时间
- 软件运行效率很低
- 软件质量差
- 软件通常不符合要求项目
- 难以管理并且代码难以维护
- 软件不能交付
2.案例
OS/360:1961-1964年,IBM公司的 OS /360,共约100万条指令,花费了5000个人年,开发总投资5亿美元,达到当时美国研究原子弹的曼哈顿计划投资20亿美元的1/4,而结果却令人沮丧,错误多达2000个以上,系统根本无法正常运行。
美国火箭爆炸:根据 NASA 的报告,是1962年的飞往金星的宇宙飞船天线发生故障,致使地面无法控制火箭,于是火箭上的计算机开始控制火箭,然而在导航系统软件中又存在一个 bug (打印错误,在平滑半径导数表达式"R-dot-bar sub n "中漏掉了代表平滑的" bar "),致使火箭迅速偏离航道。于是发射场的安全官员下令摧毁飞船。
美国银行信托软件系统:美国银行1982年进入信托商业领域,并规划发展信托软件系统。.项目原订预算2千万美元,开发时程9个月,预计于1984年12月31日以前完成,后来至1987年3月都未能完成该系统,期间已投入6千万美元。.美国银行最终因为此系统不稳定而不得不放弃,并将340亿美元的信托账户转移出去,并失去了6亿美元的信托生意商机。
二、软件工程
1.定义
定义:IEEE 计算机协会将软件工程定义为:(1)应用系统化的、学科化的、定量的方法,来开发、运行和维护软件,即,将工程应用到软件。(2)对(1)中各种方法的研究。
目标:定义软件工程的目标是在给定的时间和预算内,按照用户的需求,开发易修改、高效、可靠可维护、适应力强、可移动、可重用的软件。
2.三要素
方法、工具、过程
方法回答的是”怎样做“;
工具是运用方法支撑环境;
过程是任务的框架,它规定了完成各项任务的步骤。
- 方法:是完成软件工程项目的技术手段。支持项目计划和估算、系统和软件需求分析、设计、编程、测试和维护。软件工程方法依赖一组原则,贯穿软件工程的各个环节。软件工程方法分两类结构化方法和面向对象方法。
- 工具:为软件工程的过程和方法提供自动化或半自动化的工具支持。将若干工具集成起来。与软件工程数据库和计算机系统构成一个支持软件开发的系统称"计算机辅助软件工程( Computer Aided Software Engineering , CASE )",系统中某一工具的信息加工结果可以作为另一工具的输入。集成的软件工程工具再加上人的因素构成了软件工程环境。
- 过程:贯穿软件开发的各个环节,在各环节之间建立里程碑;管理者在软件工程过程中对软件开发的质量、进度、成本进行评估、管理和控制;技术人员采用相应的方法和工具生成软件工程产品(模型、文档、数据、报告、表格等)。
3.七个原则
- 使用阶段性生命周期计划的管理
- 进行连续的验证
- 保障·严格的产品控制
- 使用现代编程工具/工程实践
- 保持清晰的责任分配
- 用更好更少的人
- 保持过程改进
三、软件生命周期
软件产品或软件系统从设计、投入使用到淘汰的全过程。
1、问题定义(项目计划报告)
2、可行性研究(可行性研究报告)
3、需求分析(需求规格说明书)
4、总体设计(总体设计说明书)
5、详细设计(详细设计说明书)
6、编码(源程序)
7、测试(软件测试报告)
8、维护(软件维护说明)
四、软件过程模型
1.软件过程
软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
软件过程是在工作产品构建过程中,所需完成的工作活动、动作和任务的集合。
- 活动主要实现宽泛的目标,与应用领域、项目大小、结果复杂性或者实施软件工程的重要程度没有直接关系。
- 动作包含了主要工作产品生产过程中的一系列任务。
- 任务关注小而明确的目标,能够产生实际产品。
2.软件过程模型
1.定义
定义:软件过程模型是软件开发全部过程、活动和任务的结构框架。它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。
软件过程模型也常称为:
- 软件开发模型
- 软件生存周期模型
- 软件工程范型
2.能力成熟度模型CMM
5.优化级 持续的过程改进
4.量化管理级 量化管理
3.已定义级 过程标准化
2.可重复级 基本项目管理
1.初始级 有能力的人和个人英雄主义
参考资料
软件工程导论(第六版) 张海藩 牟永敏 著