资源描述
软件工程基础,1.1 软件的概念 软件是计算机系统中与硬件相互依存的另一部分,它包括程序、相关数据及其说明文档。其中,程序是按照事先设计的功能和性能要求执行的指令序列;数据是使程序能正常操纵信息的数据结构;文档是与程序开发维护和使用相关的各种图文资料。,1 软件的基本概念,软件的特点: 1)软件是一种逻辑实体,具有抽象性; 2)软件没有明显的制造过程; 3)软件在使用过程中,没有磨损、老化的问题; 4)软件对硬件和环境有着不同程度的依赖性; 5)软件是复杂的,而且以后会更复杂; 6)软件的成本相当昂贵; 7)软件工作牵涉到很多社会因素。,1.2 软件危机 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。包含两方面的问题: 一是如何开发软件,以满足不断增长,日趋复杂的需求;二是如何维护数量不断膨胀的软件产品。,软件危机的主要表现: 1)对软件开发成本和进度的估计不准确; 2)用户对“已完成”系统不满意的现象经常发生; 3)软件产品的质量往往不可靠; 4)软件的可维护程度非常低; 5)软件的成本不断提高; 6)软件开发生产率的提高赶不上硬件的发展和人们需求的增长。,1.3 软件工程 软件工程包括软件开发技术和软件工程管理。软件开发技术包括软件开发方法学、开发过程、软件工具和软件工程环境。软件工程管理包括软件管理学、软件工程经济学、软件心理学等。软件工程的目标是:在给定成本、进度的前提下,开发出具有有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性且满足用户需求的产品。,1.4 软件生命周期 通常,将软件产品从提出、实现、使用维护到停止使用的过程称为软件生命周期。一般包括可行性研究与需求分析、设计、实现、测试、交付使用以及维护等几个阶段。,1.5 软件开发工具与软件环境 软件开发工具对过程和方法提供了自动的或半自动的支持。当这些工具被集成起来使一个工具产生的信息可以被另一个工具使用时,一个支持软件开发的系统就建立起来了,称为计算机辅助软件工程(CASE)。CASE集成了软件、硬件和一个软件工程数据库,从而创建了一个软件工程开发环境。,2.1 结构化分析方法 结构化分析方法(SA)是面向数据流进行需求分析的方法。采用“抽象”和“分解”两个基本手段,用抽象模型的概念,按照软件内部数据传递、变换的关系,由顶向下逐层分解,直到找到满足功能需要的所有可实现的软件元素为止。,2 结构化分析方法,2.2 数据流图(DFD) 数据流图是从数据传递和加工的角度,来描述数据流从输入到输出的移动变换过程的图形化技术,是一种图形化的系统模型,表示信息系统的主要需求,即输入、输出、过程和数据存储。典型的数据流图有两种:变换型和事务型。数据流图中的基本元素有:外部实体(方框)、数据流(单项箭头)、加工(椭圆)和数据存储(双横线)。,百货商店业务管理系统数据流程图,顾客,商店业务处理,供货厂,税务局,贷款收据,贷款,订单,发货票,订货单,税款,供货单,税单,2.3 数据字典(DD) 数据字典是对数据的信息的集合,是结构化分析的核心。他对数据流图中的各个元素做完整的定义和说明,是数据流图的补充工具,它通常包括几个方面的信息:名称、别名、何处使用/如何使用、内容描述和补充信息数据流图和数据字典共同构成系统的逻辑模型。,2.4 软件需求规格说明书 软件需求规格说明书是需求分析阶段的最后结果。软件需求包括:功能需求、性能需求、环境需求、可靠性需求、安全保密需求、用户界面需求、资源使用需求、成本消耗需求和开发进度需求。软件需求规格说明书包含内容如下: 概述(任务概述) 数据描述 功能要求 性能需求 参考文献目录 附录,举例,计算机中的软件包括_。程序、数据和文档 软件工程的方法得以实施的主要保证是_。 A.软件用户的参与 B.开发人员的素质 C.硬件环境 D.软件开发工具和环境 软件工程研究的主要内容是软件开发技术和_两个方面。软件工程管理 结构化分析的基本思想是采用_的方法,能有效的控制系统开发的复杂性。自顶向下逐层分解 数据字典是软件需求分析阶段的重要工具之一,其基本功能是_。 A.数据通信 B.数据库设计 C.数据维护 D.数据定义 在下列文档中,属于结构化分析阶段的文档有_。 A.软件设计说明书 B.可行性分析报告 C.项目计划 D.需求规格说明,3.1 结构化设计方法 结构化设计方法(SD)就是采用最佳的可能方法设计系统的各个组成部分以及各成分内部联系的技术。软件设计分两步完成:总体设计和详细设计。结构化设计是一种面向数据流的设计方法,可以与SA方法衔接。 总体设计 详细设计,3 结构化设计方法,3.2 总体设计 总体设计的基本任务: 基于功能层次结构建立系统; 采用某种设计方法,将系统按功能划分成模块的层次结构; 确定每个模块的功能; 建立与已确定的软件需求的对应关系; 确定模块间的调用关系; 确定模块间的接口,即模块之间传递的信息; 评估模块划分的质量。,软件设计的基本原理 1)模块化 2)抽象 3)信息隐蔽 4)模块独立性,软件的结构 软件的结构是一种层次化的表示,它指出了各个模块之间的关系。 深度: 表示从根模块到最低层模块的层数。 宽度:表示控制的总分布。 扇出数:由一个模块直接控制的其它模块数。 扇入数:有多少模块直接控制一个给定的模块。 上级模块:控制其它模块的模块。 从属模块:被另一模块控制的模块。,总体设计的优化准则: 1)改进软件结构,提高模块独立性; 2)模块的规模要适中; 3)模块的作用范围应该保持在模块的控制范围内; 4)软件结构的深度、宽度、扇入、扇出要适当; 5)降低模块接口的复杂度; 6)设计单入口单出口的模块; 7)模块的功能可预测。,3.3 详细设计 从软件开发的工程化观点来看,在使用程序设计语言编制程序以前,需要对所采用算法的逻辑关系进行分析,设计出全部必要的过程细节,并给予清晰的表达。在过程设计阶段,要决定各个模块的实现算法并精确地表达这些算法。,详细设计的任务 1)为每个模块确定采用的算法,选择某种适当的工具表达算法的过程,写出模块详细过程性描述; 2)对模块内的数据结构进行设计; 3)确定模块的接口细节。 详细设计的工具 表达过程规格说明的工具叫做详细设计工具,常用的有:程序流程图(PFD)、N-S流程图、问题分析图(PAD图)和语言工具(PDL)。,4.1 软件测试的目的和准则 1)测试是为了发现程序中的错误而去执行的过程; 2)一个好的测试用例(test case)在于能发现至今未发现的错误; 3)一次成功的测试是发现了至今未发现错误的测试。 测试绝不能证明程序是正确的,测试用于查找程序中的错误,但不能证明程序中没有错误。,4 软件的测试,4.2 软件测试方法 软件测试方法和技术可从不同角度分类。 按照是否需要执行被测试软件的角度,可分为静态测试和动态测试.,静态测试一般是指人工评审软件文档或程序,借以发现其中的错误,由于被评审的文档或程序不必运行,所以称为静态测试。包括代码检查、静态结构分析、代码质量度量等。 动态测试就是通过运行软件来检验软件中的动态行为和运行结果的正确性,也就是通常所说的上机测试。,按照功能,测试可分为白盒测试和黑盒测试。 白盒测试:也称结构测试或逻辑驱动测试,它与程序内部结构有关,要利用程序结构的实现细节设计测试用例。此方法把测试对象看作一个透明的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。 白盒测试的主要方法有逻辑覆盖、基本路径测试等。逻辑覆盖泛指一系列以程序内部的逻辑结构为基础的测试用例设计技术。基本路径测试是指根据软件过程性描述中的控制流程确定程序的环路复杂性度量,用此度量定义基本路径集合,并由此导出一组测试用例对每一条独立路径进行测试。,黑盒测试:也称功能测试或数据驱动测试,测试时不考虑程序内部结构和实现方式,仅检验程序结果与说明书的一致性。黑盒测试不关心程序内部的逻辑, 而只是根据程序的功能来说明测试用例。 黑盒测试的主要方法有等价类划分法、边界值分析法和错误推测法。 逻辑覆盖泛指一系列以程序内部的逻辑结构为基础的测试用例设计技术。基本路径测试是指根据软件过程性描述中的控制流程确定程序的环路复杂性度量,用此度量定义基本路径集合,并由此导出一组测试用例对每一条独立路径进行测试。,4.3 软件测试的实施 测试过程按4个步骤进行,即单元测试、集成测试、确认测试和系统测试。 单元测试:集中对用源代码实现的每个程序单元进行测试,检查各个程序模块是否正确地实现了规定的功能。 集成测试:把已测试过的模块组装起来,主要对与设计相关的软件体系结构的构造进行测试。增量测试(自底向上,自顶向下,两者结合),非增量测试, 确认测试:是要检查已实现的软件是否满足了需求规格说明中确定了的各处需求,以及软件配置是否完全、正确。 系统测试:是把通过确认测试的软件作为整个基于计算机系统的一个元素,与计算机硬件、外设、某此支持软件、数据和人员等其他系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的集成测试和确认测试。,举例,软件设计遵循软件工程的基本目标,即模块化、模块独立性、信息隐蔽和_。抽象 面向数据流的设计方法中,一般将信息流分为_。 A.数据流和控制流 B.交换流和控制流 C.交换流和事物流 D.数据流和事物流 软件测试可分为单元测试、集成测试、确认测试和_。 系统测试 对软件是否达到用户所期望的要求测试是_。 A.集成测试 B.系统测试 C.验收测试 D.有效性测视 模块划分的指导思想是信息隐蔽和_。模块独立性 软件测试的目的是_。 A.证明软件的正确性 B.发现软件中的所有错误 C.尽可能多的发现软件系统中的错误 D.证明软件中存在错误,5.1 调试的概念 在对程序进行成功测试之后将进行程序调试(通常称为Debug,即排错)。程序调试的任务是诊断和改正程序中的错误。程序调试与软件测试不同,软件测试是尽可能多的发现软件中的错误,发现错误后,程序调试借助于一定的调试工具去找出软件错误的具体位置,并改正错误。,5 程序的调试,程序调试的基本步骤 1)错误定位; 2)修改设计和代码,以排除错误; 3)进行回归测试,防止引入新的错误。 调试原则 1)确定错误的性质和位置的原则; 2)修改错误的原则;,5.2 软件调试的方法 1)强行排错法; 2)回溯法排错; 3)归纳法排错; 4)演绎法排错。,举例,软件调试在软件生命周期的_阶段进行。开发 软件调试的目的在于_。 A.发现错误 B.更改错误 C.提高软件的性能 D.测试软件的功能 软件调试的方法有强行排除法、回溯法、演绎法和_。归纳法 软件调试应该由_来完成。 A.与源程序无关的程序员 B.不了解软件计划的机构 C.源程序的编制人员 C.设计该软件的机构 集成测试分为两个具体方法,它们是_。 A.非增量方式与增量方式 B.白盒法和黑盒法 C.确认测试和系统测试 D.归纳法和演绎法,
展开阅读全文