软件工程
软件工程定义
1968年NATO(北大西洋公约组织)会议上首次提出
? Fritz Bauer:软件工程是建立和使用一套合理的工程原则,以便获得经济的软件,这种软件是可靠的,可以在实际机器上高效地运行
? IEEE:软件工程是:①将系统化的、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件;②在①中所述方法的研究
? 计算机科学技术百科全书:软件工程是应用计算机科学理论和技术以及工程管理原则和方法,按预算和进度实现满足用户要求的软件产品的工程,或以此为研究对象的学科
软件工程的框架
软件工程的框架可概括为目标、活动和原则
目标
生产具有正确性、可用性和开销合宜的产品
正确性是指软件产品达到预期功能的程度
可用性是指软件基本结构、实现以及文档为用户可用的程度
开销合宜是指软件开发、运行的整个开销满足用户要求的程度
活动
软件开发活动指生产一个最终满足需求且达到工程目标的软件产品所需要的活动。软件开发的基本活动包括需求分析、设计、实现、验证与确认和维护。
原则
选取适宜的开发风范
采用合适的设计方法
提供高质量的工程支持
有效的软件工程管理
软件生存周期( software life cycle)
? 软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为计算机软件的生存周期
? 软件生存周期大体可分为如下几个活动:计算机系统工程、需求分析、设计、编码、测试、运行和维护
计算机系统工程
? 计算机系统包括计算机硬件、软件、使用计算机系统的人、数据库、文档、规程等系统元素
? 计算机系统工程的任务
v 确定待开发软件的总体要求和范围,以及它与其它计算机系统元素之间的关系
v 进行成本估算,做出进度安排
v 进行可行性分析,即从经济、技术、法律等方面分析待开发的软件是否有可行的解决方案,并在若干个可行的解决方案中作出选择
软件需求分析
? 主要解决待开发软件要“做什么”的问题
? 确定软件的功能、性能、数据、界面等要求,生成软件需求规约
软件设计
? 主要解决待开发软件“怎么做”的问题
? 软件设计通常可分为系统设计(也称概要设计或总体设计)和详细设计
? 系统设计的任务是设计软件系统的体系结构,包括软件系统的组成成分、各成分的功能和接口、成分间的连接和通信,同时设计全局数据结构
? 详细设计的任务是设计各个组成成分的实现细节,包括局部数据结构和算法等
编码
用某种程序设计语言,将设计的结果转换为可执行的程序代码
测试
发现并纠正软件中的错误和缺陷。测试主要包括单元测试、集成测试、确认测试和系统测试
运行和维护
在软件运行期间,当发现了软件中潜藏的错误或需要增加新的功能或使软件适应外界环境的变化等情况出现时对软件进行修改