(3)软件危机的定义:软件危机是泛指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
2.软件工程定义与软件生命周期 (1)软件工程
定义:软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。软件工程的三个要素:方法、工具和过程。 (2)软件生命周期
定义:软件生命周期就是软件产品从提出、实现、使用维护到停止使用退役的全过程。 软件生命周期包括软件定义、软件开发及软件维护三个阶段。软件定义阶段的任务包括可行性研究与计划制定、需求分析;软件开发阶段的任务包括概要设计、详细设计、软件实现、软件测试;软件维护的任务包括软件的运行、维护和退役。 3.软件开发工具与软件开发环境
(1)软件开发工具:软件开发工具的发展是从单项工具的开发逐步向集成工具发展的,软件开发工具为软件工程方法提供了自动的或半自动的软件支撑环境。
(2)软件开发环境:软件开发环境或称软件工程环境是全面支持软件开发全过程的软件工具集合。这些软件工具按照一定的方法或模式组合起来,支持软件生命周期内的各个阶段和各项任务的完成。
3.2 结构化分析和设计方法 1.结构化分析方法 (1)关于结构化分析方法
结构化分析方法是结构化程序设计理论在软件需求分析阶段的运用。结构化分析的常用工具有数据流图(DFD)、数据字典(DD)、判定树和判定表。其中最重要的工具是数据流图。
(2)结构化分析的常用工具
①数据流图是描述数据处理过程的工具,是通过对需求的理解构造出逻辑模型的图形表示,它直接支持系统的功能建模。
②数据字典是结构化分析方法的核心。数据字典是对所有与系统相关的数据元素的一个有组织的列表,以及精确的、严格的定义,使得用户和系统分析员对于输入、输出、存储成分和中间计算结果有共同的理解。 (3)软件需求规格说明书
软件需求规格说明书(SRS)是需求分析阶段的最后结果,是软件开发中的重要文档之一。
①软件需求规格说明书有以下几个作用:1)便于用户、开发人员进行理解和交流;2)反映出用户问题的结构,可以作为软件开发工作的基础和依据;3)作为确认测试和验收的依据。
②软件需求规格说明书的内容:包括概述、数据描述、功能描述、性能描述、参考文献目录和附录。
③软件需求规格说明书的特点:软件需求规格说明书具有正确性、无歧义性、完整性、可验证性、一致性、可理解性、可修改性和可追踪性等特点。 2.结构化设计方法 (1)软件设计的基本概念 ①软件设计的基础
软件设计是软件工程的重要阶段,是一个把软件需求转换为软件表示的过程。软件设计的基础目标是用比较抽象概括的方式确定目标系统如何完成预定的任务,即软件设计是确定系统的物理模型。
软件设计的内容:从技术观点看,软件设计包括结构设计、数据设计、接口设计和过程设计。其中结构设计是定义软件系统各主要部件之间的关系。数据设计是将分析时创建的模型转化为数据结构的定义。接口设计是描述软件内部、软件和协作系统之间以及软件与人之间如何通信。过程设计是把系统结构部件转换成软件的过程性描述。
软件设计的一般过程是:软件设计是一个迭代的过程;先进行高层次的结构设计;后进行低层次的过程设计;穿插进行数据设计和接口设计。
②软件设计的基本原理
软件设计遵循软件工程的基本目标和原则。
③结构化设计方法的基本思想:将软件设计成由相对独立、单一功能的模块组成的结构。为了提高模块的独立性,应该尽量提高模块的内聚性,降低模块间的耦合性。 (2)概要设计 ①概要设计的任务
概要设计的基本任务:设计软件系统结构、确定数据结构及数据库设计、编写概要设计文档、进行概要设计文档评审。软件结构设计 工具——结构图(SC),也称为程序结构图。结构图是描述软件结构的图形工具。
软件设计的准则:a.提高模块独立性;b.模块规模适中;c.深度、宽度、扇出和扇入适当;d.使模块的作用域在该模块的控制域内;e.应减少模块的接口和界面的复杂性;f.设计成单入口、单出口的模块;g.设计功能可预测的模块。 ②详细设计
详细设计的任务:为软件结构图中的每一个模块确定实现算法和局部数据结构,用某种选定的表达工具表示算法和数据结构的细节。
过程设计的任务:对每个模块规定的功能以及算法的设计,给出适当的算法描述。 常见的过程设计工具有:
图形工具:程序流程图,N-S,PAD,HIPO。 表格工具:判定表。 语言工具:PDL(伪码)。
3.3 软件测试及程序的调试 1.软件测试
软件测试是保证软件质量的重要手段,其主要过程涵盖了整个软件生命期的过程,包括需求定义阶段的需求测试、编码阶段的单元测试、集成测试以及后期的确认测试、系统测试、验证软件是否合格、能否交付用户使用等。 (1)软件测试的目的
软件测试是为了发现错误而执行程序的过程:
一个好的测试用例是指很可能找到迄今为止尚未发现的错误的用例; 一个成功的测试是发现了至今尚未发现的错误的测试。 (2)软件测试的准则
软件测试过程中应遵循以下准则:①所有测试都应追溯到需求;②严格执行测试计划,排除测试的随意性;③充分注意测试中的群集现象;④程序员应避免检查自己的程序;⑤穷举测试不可能;⑥妥善保存测试计划、测试用例、出错统计和最终分析报告。 (3)软件测试技术与方法综述
①软件测试从是否要执行被测试软件的角度可以分为静态测试和动态测试。 ②软件测试按照功能划分可分为白盒测试和黑盒测试方法。
白盒测试:白盒测试又称结构测试或逻辑驱动测试,是根据软件产品的内部工作过程,检查内部成分,以确认每种内部操作符合设计规范要求。
白盒测试的基本原则:1)保证所测模块中每一独立路径至少执行一次;2)保证所测模块所有判断的每一分支至少执行一次;3)保证所测模块每一循环都在边界条件和一般条件下至少各执行一次;4)验证所有内部数据结构的有效性。
白盒测试的主要方法:1)逻辑覆盖测试方法:逻辑覆盖是泛指一系列以程序内部的逻辑结构为基础的测试用例设计技术。逻辑覆盖测试方法有语句覆盖、路径覆盖、判定覆盖、条件覆盖以及判断-条件覆盖。2)基本路径测试:基本路径测试的思想和步骤是,根据软件过程性描述中的控制流程确定程序的环路复杂性度量,用此度量定义基本路径集合,并由此导出一组测试用例对每一条独立执行路径进行测试。
黑盒测试:黑盒测试也称功能测试或数据驱动测试,是对软件已经实现的功能是否满足需求进行测试和验证。