1.软件工程的基本概念
1.1软件的定义
计算机软件是与计算机操作系统有关的程序、规规则及任何与之有关的文档和数据。
软件由两部分组成:一是机器可执行的程序及有关数据;二是机器不可执行的,与软件开发、运行、维护、使用和培训有关的文档。
1.2软件工程
软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。
软件工程三要素是:方法、工具和过程。
1.3软件的特点
- 软件是一种逻辑实体,具有抽象性;
- 软件的生产与硬件不同,它没有明显的制作过程;
- 软件在运行、使用期间不存在磨损、老化问题;
- 软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制,这导致了软件移植的问题;
- 软件复杂性高,成本昂贵;
- 软件开发涉及诸多的社会问题。
1.4软件危机
软件危机是指落后的软件生产方式无法满足瞬速增长的计算机软件需求,从而导致软件与维护过程中出现一系列严重问题的现象。其中软件危机主要表现为:
- 软件开发进度难以预测;
- 软件开发成本难以控制且不断提高;
- 软件需求的增长得不到满足;
- 软件产品质量难以保证
- 软件产品难以维护
- 软件开发生产率的提高赶不上硬件的发展和应用需求的增长
1.5软件生命周期
软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。所以软件生命周期是指软件产品从提出、实现、使用维护到停止使用退役的过程。
软件生命周期分为3个阶段:
- 软件定义阶段,通常包括可行性研究初步项目计划和需求分析;
- 软件开发阶段,通常包括总体设计、详细设计、编码和测试;
- 软件维护阶段,任务是使软件在运行中持久地满足用户的需要。
2.结构化分析方法
2.1需求分析
需求分析是软件生命周期中的一个重要环节,目的是了解用户对软件在功能、性能和设计等方面的期望。对这些需求进行整理和分析,确定软件需要实现的功能,以及性能和设计等其他方面。
软件的需求分析阶段的工作,可以概括为四个方面:需求获取、需求分析、编写需求规格说明书和需求评审。
2.2常用工具
常用工具包括数据流图(DFD图)、数据字典(DD)、判定树和判定表。
2.3需求规格说明书
需求规格说明书是程序设计的基础和依据,主要标准有:完整性、正确性、无歧义、可验证性、一致性、可理解性、可修改性和可追踪性。
3.结构化设计方法
3.1软件设计
软件设计是根据需求分析阶段确定的功能设计软件系统的整体结构、划分功能模块等,即确定系统的物理模型。
从工程角度看,软件设计主要分为概要设计和详细设计。
从技术角度看,软件设计主要分为结构设计、数据设计、接口设计和过程设计。
3.2软件设计的原理
软件设计的4个基本原理包括:抽象、模块化、信息隐藏和模块独立性。
3.3概要设计
概要设计的基本任务:设计软件系统结构、数据结构及数据库设计、编写概要设计文档和概要设计文档评审。
概要设计的常见术语:
- (1)深度:表示控制的层数。
- (2)宽度:整体控制跨度(最大模块数的层)的表示。
- (3)扇入:直接调用一个给定模块的模块个数。
- (4)扇出:由一个模块直接调用的其他模块数。
3.4详细设计
详细设计的基本任务:详细设计每个模块的实现算法和所需的局部数据结构。
详细设计的常用工具:程序流程图、盒图(N-S图)、PAD图、HIPO图、判定表和PDL(伪码)。
4.软件测试与程序调试
软件测试是一种实际输出和预期输出之间的比较过程,目的就是为了尽可能多的发现软件中的问题。
4.1软件测试的方法
根据被测软件是否需要被执行分为静态测试和动态测试。按照功能划分,可以分为黑盒测试和白盒测试。
(1)白盒测试
白盒测试是根据程序的内部逻辑来设计测试用例,主要方法包括逻辑覆盖测试和基本路径测试。
(2)黑盒测试
黑盒测试是根据规格说明书的功能来设计测试用例,检查程序的功能是否符合要求。黑盒测试不要考虑程序内部的逻辑结构,主要方法包括等价类划分法、边界值分析法和错误推测法等。
4.2软件测试的实施
软件测试的实施过程主要包含4个步骤:单元测试、集成测试、确认测试和系统测试。
4.3程序的调试
程序调试是在测试发现错误之后排除错误的过程,主要任务是诊断错误和排除错误。
程序调试的方法:主要分为静态调试和动态调试。