软件是计算机中与硬件相互依存的部分,其是程序、数据、相关文档的集合。
软件的开发以人工开发为主,不仅成本高、风险高,还受到社会因素的影响,在生产过程中,软件开发与硬件流水线式开发不同。
随着应用软件的规模越来越大,越来越复杂,动辄数百万行代码已是常见现象,不可避免地就出现了软件危机。
软件危机是指在开发和维护软件过程中遇到的一系列的问题,常见的表现有:开发过程中无法按时完成、产品质量无法保证、开发经费严重超支、开发完成后软件表现强差人意,软件无法维护等等。
(1)忽视软件开发前期的调研和需求分析工作。 (2)缺乏软件开发的经验和有关软件开发数据的积累,使得开发计划很难制定。 (3)开发过程缺乏统一的、规范化的方法论指导。 (4)忽视与用户、开发组成员间的及时有效的沟通。 (5)文档资料不规范或不准确。导致开发者失去工作的基础,管理者失去管理的依据。 (6)没有完善的质量保证体系。 (7)忽略测试的重要性和不重视维护。
IEEE 对软件工程定义为:将系统化、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件。
软件工程研究的内容分为两部分:
软件工程的发展经历了四个重要的阶段:
软件工程是层次化的技术,具体可分为以下四个层次:
工具层:在软件开发过程中,工具提供了自动或半自动化的支持,例如:建模工具 Rational Rose 方法层:方法提供了开发软件在技术上需要的一系列的任务,包括需求分析、编程、测试等 过程层:过程提供了开发的框架,使得软件能够合理、及时的被开发 质量保证层:
软件开发方法是一种使用定义好的技术集与符号来表示组织软件生产的过程,其目标是在规定时间与成本内,开发出符合用户需求的高质量软件。
常见的方法有:
- 结构化方法: 采用 “自顶向下,逐步求精” 的思维,将软件开发分为若干阶段,每个阶段相对独立且复杂性不高,可便于不同的开发人员进行开发 - 面向数据结构方法: 从输入输出的数据入手,导出程序框架结构,再补充程序细节,即可得到一个完整的程序结构图 - 面向对象方法: 以对象建模为基础,将数据和对数据的操作结合起来,是一种可以反复迭代的开发方法 - 形式化方法: 是基于形式化数学变换的软件开发方法,偏向于严密的理论
【软件工程工具】 软件工程工具为软件工程中的过程与方法提供自动或半自动的支持,可以帮助软件开发人员进行软件分析、设计、开发、测试、维护、管理等工作。
其具有以下三种分类标准:
按功能:可视化建模工具、程序开发工具、自动测试工具、文档编辑工具、配置管理工具、项目管理工具 按支持过程:设计工程、编程工具、维护工具 按支持范围:窄支持工具、宽支持工作台、一般支持环境**加粗