软件工程导论
软件工程
软件危机
软件危机指的是在计算机软件的开发和维护过程中所遇到的一系列严重问题
即:效率下降和质量下降的问题
软件危机的具体表现:
- 软件成本高,开发进度估计不准
- 用户对“已完成的”软件系统不满意的现象常常发生
- 软件质量差,可靠性不能保证
- 软件产品可维护性差
- 软件没有合适的文档资料
- 软件成本逐年上升
- 软件开发生产率滞后于硬件和计算机应用普及
产生软件危机的原因
- 软件本身的特性:
- 缺乏可见性、无制造过程、规模庞大
- 对软件开发的错误认识和做法:
- 软件就是程序,开发软件就是编程序;轻视文档、不懂测试、不想维护、开发与维护的方法不正确。
消除软件危机的途径:
- 使用好的软件开发技术和方法
- 使用好的软件开发工具
- 良好的组织、严密的管理、各类人员相互配合
软件工程
软件工程就是用科学的知识和技术原理来定义、开发、维护软件的一门学科
软件工程内容包括了:开发技术和开发管理两个方面
目标
付出较低开发成本、达到要求的功能、取得较好的性能、开发的软件易于移植、只需较低的维护费用、按时完成开发任务、及时交付使用、开发的软件可靠性高
软件生命周期
软件生命周期由软件定义、软件开发和运行维护三个时期组成,每个时期又可进一步划分成若干阶段
软件生命周期的基本任务:问题定义、可行性研究、需求分析、概要设计、详细设计、编码和单元测试、综合测试、软件维护
软件生命周期划分阶段:
三个周期八个阶段
- 软件定义:
- 问题定义、可行性研究
- 软件开发:
- 需求分析、概要设计、详细设计、编码和测试
- 软件运行:软件维护
数据字典用途
作为分析阶段的工具、估计由变更产生的影响、作为数据库开发的基础
软件测试
目的:以较小的代价发现尽可能多的错误
常见模型
生存周期模型
描述软件开发过程中各种活动如何执行的模型。对软件开发提供强有力的支持,为开发过程中的活动提供统一的政策保证,为参与开发的人员提供帮助和指导,是软件生存周期模型化技术的基础,也是建立软件开发环境的核心。
主要有:瀑布模型、原型模型、螺旋模型、喷泉模型、基于知识的模型,变换模型等
其中喷泉模型、统一软件过程适用于面向对象的开发
软件维护
- 校正性维护。在软件交付使用后,一些隐含的错误在某些特定的使用环境下会暴露出来。为了识别和纠正错误,修正软件性能上的缺陷,应进行正确和修改错误的过程,这个过程就称为校正性维护。
- 适应性维护。为了使应用软件适应计算机硬件、软件环境以及数据环境的不断发生的变化而修改软件的过程称为适应性维护。
- 完善性维护。为增加软件功能、增加软件性能、提高软件运行效率而进行的维护活动称为完善性维护。
- 预防性维护。为了提高软件的可维护性和可靠性而对软件进行的修改称为预防性维护。
需求分析
开发人员准确地理解用户的要求,进行细致地调查分析,将用户非形式地需求陈述转化为完整的需求定义,再由需求定义转换到相应的需求规格说明的过程
基本任务:
- 问题是别
- 分析与综合,到处软件的逻辑模型
- 编写文档
软件设计的基本原理
- 模块化:模块是软件的组成部分,是具有独立功能且可命名的一段程序,所有模块组成整体,可以满足问题的要求
- 抽象:认识复杂现象过程所使用的工具,只考虑事物本质的公共特性,忽略细节和其他因素,通过抽象确定组成软件的过程实体
- 信息隐蔽:将模块实现自身功能的细节与数据“隐藏”起来。模块间仅交换为完成系统功能必须的信息
- 模块独立性:每个模块只完成系统要求的独立的子功能
高内聚低耦合
高内聚低耦合不是软件工程中的概念,是面向对象编程的一种设计
内聚:它是指内部间聚集、关联地程度。高内聚则是要高度地聚集,最好就是做到功能内聚,模块内的各组成部分都是为了完成同一个功能而存在。比如JDK中的Math类,他就是为了完成数据运算而设计的类。内聚性高它的可靠性、可重用性、可读性都会提高
耦合:是指模块间的关联程度,我们设计要减量降低个模块间的耦合程度,因为一旦各模块耦合程度高,那么对程序地维护就会非常困难,牵一发而动全身。
软件测试
黑盒测试
把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程。
它只检查程序功能是否按照规格说明书的规定正常使用,程序是否能适当地接收输入数据并产生正确的输出信息,程序运行过程中能否保持外部信息的完整性。
又称功能测试,包含等价划分法、边界值法、错误推测法、因果图法等
白盒测试
把程序看成装在一个透明地白盒子里,测试者完全知道程序的结构和处理算法
这种方法按照程序内部地逻辑测试程序,检测程序中的主要执行通路是否都能按照预定要求正确工作
又称为结构测试,包含逻辑覆盖法和基本路径测试法。




