目录
一、软件工程基本概念
1.1 软件的定义与软件的特点
软件定义:计算机系统中与硬件相互依存的另一部分,包括程序、数据及相关文档的完整集合。
软件按功能划分为:系统软件、应用软件、支撑软件。
- ①系统软件:操作系统、编译程序、汇编程序、网络软件、数据库管理系统。
- ②应用软件:事务处理软件、工程与科学计算软件、实时处理软件等。
- ③支撑软件(工具软件):需求分析工具软件、编译工具软件、测试工具软件、维护工具软件。
软件特点:
- ①软件是逻辑实体,是人类治理成果的表现形式。
- ②软件的开发和制造是一个统一的过程。
- ③软件开发是一项经济活动。
- ④软件不会磨损,但可能存在错误,需要进行维护。
1.2 软件危机与软件工程
软件危机:需求增长、开发难控、质量难保、难以维护、成本提高、生产率低。
软件工程的概念:应用于计算机软件的定义、开发和维护的一阵套方法、工具、文档、实践标准和工序。
软件工程的目的:提高软件生产率、提高软件质量、降低软件成本。
软件工程的核心思想:把软件当作一个工程产品来处理。
软件工程包括三个要素:方法、工具、过程。
1.3 软件工程过程
软件生命周期:将软件产品从提出、实现、使用维护到停止使用退役的过程。
软件工程的3个时期(8个阶段):软件定义、软件开发、软件维护。
软件定义:问题定义和可行性研究、需求分析;
需求分析:确定系统的逻辑模型。参加人员有用户、项目负责人和系统分析员。其目的是需求获取、需求分析、编写需求规格说明书、续修评审,最终产生需求规格说明书。需求规格说明书的3个作用如下:
- ①便于用户、开发人员进行理解交流。
- ②反应用户问题的结构,可以作为软件开发工作的基础和依据。
- ③作为确认测试和验收的依据。
软件开发:概要设计、详细设计、实现、测试
软件维护:使用、维护
二、结构化分析方法(重点)
需求分析的内容:深入描述软件的功能和性能,确定软件设计的限制和软件同其他系统元素的接口细节。
需求分析方法:结构化需求分析方法、面向对象的分析方法。
2.1 结构化需求分析方法
结构化需求分析方法:使用数据流图(DFD)、数据字典(DD)、判定表和判定树等工具,来建立系统的逻辑模型。
需求分析工具:数据流图(DFD)、数据字典(DD)、判定表、判定树
数据流图(DFD)的图形元素
举例:银行取款业务数据流图
2.2 面向对象的分析方法(略)
三、结构化设计方法(重点)
结构化设计方法的概念:给出一组帮助设计人员在模块层次上区分设计质量的原理和技术。
3.1 软件设计的划分
软件设计按工程管理角度划分:概要设计、详细设计
软件设计按技术观点划分:结构设计、数据设计、接口设计、过程设计。
3.2 软件设计基本内容
抽象:在软件设计中,可以定出多个抽象级别,抽象层次从概要设计到详细设计逐步降低。
模块化:把一个待开发的软件分解成若干小的简单的部分,自顶向下逐层把软件划分成若干模块。
信息屏蔽:一个模块内的信息,对于不需要这些信息的其他模块来说不能访问。
模块独立性:每个模块只能完成独立的子功能,并且与其他模块的联系少且接口简单。模块的独立程度是评价设计好坏的重要度量标准。内聚性和耦合性为两个定性的度量标准。
- ①高内聚性:指一个模块内部各个元素间彼此结合的紧密程度。
- ②低耦合性:指模块间互相连接的紧密程度。
3.3 概要设计
概要设计的任务:软件系统结构设计、数据结构及数据库设计、编写概要设计文档、概要设计文档评审。
概要设计的工具:结构图(SC)【或称系统结构图】
结构图(SC)的基本图符:
结构图(SC)的基本形式:
3.4 详细设计
详细设计的任务:确立每个模块的实现算法和局部数据结构,用适当方法表示算法和数据结构的细节。
详细设计的常用工具:
- ①图形工具:程序流程图、N-S图、PAD、HIPO
- ②表格工具:判定表
- ③语言工具:PDL(伪码)
程序流程图的基本图符
四、软件测试
4.1 软件测试的概念
利用测试工具按照测试方案和流程对产品进行功能和功能测试,甚至根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能出现的问题进行分析和评估。
4.2 软件测试的分类
从软件内部结构和具体实现的角度划分:白盒测试和黑盒测试
从执行程序的角度划分:静态测试和动态测试
从软件开发的过程按阶段划分:单元测试、集成测试、确认测试、系统测试。
4.3 软件测试技术
静态测试:不实际运行软件,通过人发挥思维优势发现程序的错误。有代码检查、静态结构分析、代码质量度量。
动态测试:基于计算机的测试,是为了发现错误而执行程序的过程。
白盒测试:把测试对象看作一个打开的盒子,利用程序内部的逻辑结构,对程序所有逻辑路径进行测试。有逻辑覆盖测试、基本路径测试。
黑盒测试:完全不考虑程序内部的逻辑结构,只检查程序是否能接收输入数据而产生正确的输出信息。有等价类划分法、边界值分析法、错误推测法。
4.4 软件测试步骤
单元测试:对软件设计的最小单位——模块进行测试,目的是发现各模块内部的错误。
集成测试:把模块设计要求组装起来的同时进行测试,目的是发现与接口有关的错误。
确认测试:验证软件的功能和性能是否满足各种需求,以及软件配置是否完全正确。
系统测试:将软件作为一个元素,与计算机系统其他元素组合在一起,进行集成测试。
五、程序的调试
5.1 程序调试的概念
将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程称为程序调试。
5.2 程序调试的步骤
步骤:
- ①错误定位
- ②修改设计和代码以排除错误
- ③进行回归测试,防止引进新的错误
软件调试方法:强行排除法、回溯法、原因排除法