资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,二级公共基础知识,第3章 软件工程基础,内容提要,软件工程基本概念,软件生命周期概念,软件工具与软件开发环境。,结构化分析方法,数据流图,数据字典,软件需求规格说明书。,结构化设计方法,总体设计与详细设计。,软件测试的方法,白盒测试与黑盒测试,测试用例设计,软件测试的实施,单元测试、集成测试和系统测试。,程序的调试,3.1 软件工程基本概念,3.1.1 软件定义与软件特点,1软件的定义和组成,定义:,计算机软件(Software)是计算机系统中与硬件相互依赖的另一部分。,组成:,程序,数据,文档,国标(GB)定义,与计算机系统的操作有关的计算机程序、规程、规则,以及可能有的文件、文档及数据。,3.1.1 软件定义与软件特点(续),2软件的特点,软件是一种逻辑实体,而不是具体的物理实体,具有抽象性,软件没有明显的制造过程。对软件的质量控制,必须在软件开发方面下功夫,软件不存在老化问题,但存在退化问题,必须要修改和维护,对计算机系统有着依赖性软件移植的问题,软件复杂性高,开发和维护成本高,软件开发涉及诸多社会因素,3.1.1 软件定义与软件特点(续),3软件的分类,应用软件,系统软件,操作系统,数据库管理系统,设备驱动程序,支撑软件,3.1.2 软件危机与软件工程,1软件危机,软件工程源自于软件危机,主要表现:,软件需求的增长得不到满足,软件开发成本和进度无法控制,软件质量难以保证,软件不可维护或维护程度非常低,软件成本不断提高,软件开发生产效率的提高赶不上硬件的发展和应用需求的增长,归结为成本、质量和生产率等问题,3.1.2 软件危机与软件工程,2软件工程的产生与定义,软件工程学工程学的新兴领域,定义:,国标(GB):应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。,德国人Fritz Bauer:软件工程是建立并使用完善的工程化原则,以较经济的手段获取能在实际机器上有效运行的可靠软件的一系统方法。,IEEE:将系统的、规范的、可度量的方法应用于软件开发、运行和维护的过程,即将工程应用于软件中。,主要思想:在软件开发过程中需要应用工程化原则的重要性,3.1.2 软件危机与软件工程,2软件工程的产生与定义,软件工程3个要素:,方法,工具,过程,3.1.3 软件工程过程与软件生命周期,1软件工程过程,P(Plan)软件规格说明,D(Do)软件开发,C(Check)软件确认,A(Action)软件演进,3.1.3 软件工程过程与软件生命周期,软件产品从提出、实现、使用维护、停止使用到退役的过程,3个阶段,6个阶段工作,3.1.3 软件工程过程与软件生命周期,定义阶段,制定计划:”能做吗?“,需求分析:“做什么?”,开发阶段:,软件设计:“如何做?”,分为概要设计和详细设计两个阶段。,软件实现:“实现”,编码。,软件测试:”做的怎么样?“,运行维护阶段,使用,不断维护,3.1.4 软件工程的目标与原则,1软件工程的目标,成功的项目:,成本,功能,移植,维护费用,按时,及时交付,目标:,在给定成本、进度的前提下,开发出具有有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性且满足用户需求的产品,3.1.4 软件工程的目标与原则,2软件工程学的范畴,3.1.4 软件工程的目标与原则,3软件工程的原则,抽象,信息隐蔽,模块化,局部化,确定性,一致性,完备性,可验证性,3.1.5 软件开发工具与软件开发环境,1软件开发工具,协助开发人员进行软件开发活动所使用的软件或环境,需求分析工具、设计工具、编码工具、排错工具、测试工具等。,2软件开发环境,全面支持软件开发全过程的软件工具的集合,计算机辅助软件工程:CASE,3.2 结构化分析方法,3.2.1 需求分析与需求分析方法,1需求分析,定义:,任务:导出目标系统的逻辑模型,解决“做什么”的问题,全面理解用户的各项要求,准确地表达各项要求,主要工作:,需求获取,需求分析,编写需求规格说明书,需求审评,3.2.1 需求分析与需求分析方法,2需求分析方法,结构化分析方法,面向数据流的结构化分析方法(SA),面向数据结构的Jackson方法(JSD),面向数据结构的结构化数据系统开发方法(DSSD),面向对象分析方法(OOA),静态分析方法,动态分析方法,3.2.2 结构化分析方法,1关于结构化分析方法,结构化程序设计理论在需求分析阶段的运用,面向数据流进行需求分析的方法,自顶向下、逐层分解,主要工具:数据流图、数据字典,3.2.2 结构化分析方法,2结构化分析的常用工具,数据流图(DFD),数据字典,判定树,判定表,3.2.2 结构化分析方法,数据流图,3.2.2 结构化分析方法,数据流图:基本图形元素,3.2.2 结构化分析方法,数据流图:分层数据流图,3.2.2 结构化分析方法,2结构化分析的常用工具,数据字典,结构化分析方法的核心,对数据流图中出现的被命名的图形元素的确切解释判定树,判定树,判定表,3.2.3 软件需求规格说明书,需求分析阶段的最后成果,作用:,便于用户、开发人员进行理解和交流;,反映出用户问题的结构,可以作为软件开发工作的基础和依据;,作为确认测试和验收的依据。,主要内容,概述、数据描述、功能描述、性能描述、参考文献、附录,特点:,正确性;无歧义性;完整性;可验证性;一致性;可理解性;可修改性;可追踪性。,3.3 结构化设计方法,3.3.1 软件设计的基本概念,1软件设计的基础,开发阶段:设计、实现(编码)和测试,需求分析:主要解决“做什么”问题,软件设计:主要解决“怎么做”问题,3.3.1 软件设计的基本概念,1软件设计的基础,重要性:,主要内容:,结构设计、数据设计、接口设计、过程设计,步骤:,概要设计和详细设计,3.3.1 软件设计的基本概念,2软件设计的基本原理,抽象,一种思维工具,抽出事物本质的共同特点,不考虑细节,模块化,模块,模块化,信息隐蔽,每个模块的实现细节对于其它模块来说是隐蔽的,模块独立性,每个模块只涉及软件要求的具体的子功能和软件系统中其它的模块的接口是简单的,衡量指标:耦合性、内聚性,3.3.1 软件设计的基本概念,内聚性,度量一个模块功能强度的一个相对指标。,一个模块只做一件事,7种类型,3.3.1 软件设计的基本概念,耦合性,度量模块之间的相互联系程度,取决于接口的复杂程度、调用方式、哪些信息通过接口,模块连接方式有7种,构成耦合性的7种类型,3.3.2 概要设计,1概要设计的基本任务,系统结构设计,主要任务:划分为模块,数据结构和数据库的设计,实现需求定义和规格说明过程中提出的数据对象的逻辑表示,编写概要设计文档,概要设计说明书、数据库设计说明书、用户手册和集成测试计划。,概要设计的评审,对概要设计文档中给出的设计方案可行性、正确性、有效性、一致性等进行审核,3.3.2 概要设计(续),2软件结构图,用来表示软件结构,基本图符,3.3.2 概要设计(续),两个附加符号,3.3.2 概要设计(续),系统结构图(SC)中的模块,原子模块,4种类型的模块,3.3.2 概要设计(续),结构图的形态特征,深度、宽度、扇出、扇入,3.3.2 概要设计(续),3面向数据流的设计方法,数据流图(DFD):需求分析工具,系统结构图(SC):概要设计工作,主要任务:数据流图变换成结构图,数据流的类型,变换流,事务流,3.3.2 概要设计(续),变换流,数据流图:取得数据、变换数据、给出数据,3.3.2 概要设计(续),变换流,系统的结构图:输入、中心变换、输出,3.3.2 概要设计(续),事务流,数据流图,3.3.2 概要设计(续),事务流,系统的结构图:,3.3.2 概要设计(续),实施要点与设计过程,分析、确认数据流图的类型,区分是事务型还是变换型,说明数据流的边界,数据流图映射为程序结构,根据设计准则把数据流转换成程序结构图,3.3.2 概要设计(续),变换分析,确定数据流图是否具有变换特性,确定输入流和输出流的边界,划分出输入、变换和输出,独立出变换中心,第一级分解,按上述步骤如出现事务流的映射方式对各个子流进行逐级分解,直至分解到基本功能;,对每个模块写一个简要的说明,利用软件的设计原则对软件结构透一步转化,事务分析,与变换分析类似,主要差别:映射方法不同,3.3.2 概要设计(续),4.设计准则,提高模块独立性,深度、宽度、扇度和扇出适度,使模块的作用域在该模块的控制域内,应减少模块的接口和界面的复杂性,设计成单入口、单出口的模块,设计功能可预测的模块,3.3.3 详细设计,详细设计的任务:,确定实现算法和局部数据结构,不同于编码或编程,详细设计的常用工具:,图形工具:程序流程图、N-S、PAD和HIPO,表格工具:判定表;,语言工具:PDL(伪码),3.3.3 详细设计(续),程序流程图,图形元素:,方框:处理步骤,菱形:逻辑条件,箭头:控制流,5种控制结构,顺序型,选择型,先判断重复型,后判断重复型,多分支选择型。,3.3.3 详细设计(续),程序流程图,3.3.3 详细设计(续),N-S图,流程图:随意性与灵活性,N-S图:限制了随意的控制转移,保证了程序的良好结构,5种基本控制结构:,3.3.3 详细设计(续),N-S图,3.3.3 详细设计(续),N-S图,特点:,每个构件具有明确的功能域,控制转移必须遵守结构化设计要求;,易于确定局部数据和(或)全局数据的作用域,易于表达嵌套关系和模块的层次结构,3.3.3 详细设计(续),PAD图,PAD问题分析图,Problem Analysis Diagram,表现程序逻辑结构的图形工具,5种基本控制结构,3.3.3 详细设计(续),PAD图,3.3.3 详细设计(续),PAD图,特征,结构清晰,结构化程度高,易于阅读,程序的纵线数等于程序的层次数,程序执行从PAD图最左主干线上端结点开始,自上而下、自左向右依次执行,程序终止于最左主干线,3.3.3 详细设计(续),PDL(伪码),PDL过程设计语言,Program Design Language,混合语言,类似编程语言,常用词汇:,顺序:,条件:IFTHENELSEETIDIF,循环:DOWHILEENDDO,循环:REPEAT UNTILENDREPEAT,分支:CASE OFWHENSELECTWHENSELECTENDCASE,PDL特征:,有为结构化构成元素、数据说明和模块化特征提供的关键词语法;,处理部分的描述采用自然语言语法,可以说明简单和复杂的数据结构,支持各种接口描述的子程序定义和调用技术。,3.4 软件测试,3.4.1 软件测试的目的,检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别,Grenford J.Myers观点:,测试是程序的执行过程,目的在于发现错误,一个好的测试用例在于能发现至今未发现的错误,一个成功的测试是发现了至今未发现的错误的测试,3.4.2 软件测试的准则,所有测试都应追溯到需求,严格执行测试计划,排除测试的随意性,充分注意测试中的群集现象,程序员应避免检查自己的程序,穷举测试不可能,妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便,3.4.3 软件测试技术与方法综述,1静态测试与动态测试,静态测试,人工评审软件文档或程序,借以发现其中的错误,主要方法:代码检查、静态结构分析、代码质量度量,动态测试,上机测试,关键:设计高效、合理的测试用例,分两类:白盒测试方法和黑盒测试方法,3.4.3 软件测试技术与方法综述(续),2白盒测试方法与测试用例设计,也称结构测试或逻辑驱动测试,测试用例是根据程序的内部逻辑来设计,主要用于单元测试,基本原则,保证所测模块中每一个独立路径至少执行一次,保证所测模块所有判断的每一个分支至少执行一次,保证所测模块每一个循环都在边界条件和一般条件至少执行一次,验证所有内部数据结构的有效性,主要方法:逻辑覆盖、基本路径测试,3.4.3 软件测试技术与方法综述(续),逻辑覆盖测试,程序中的逻辑:判断、分支、条件,可分为:,语句覆盖:每一个语句都能执行一次,路径覆盖:所有的可能路径都至少经历一次,判定覆盖:每个判定至少都获得一次“真值”和“假值”的机会,条件覆盖:每个判定中每个条件都获得一次 “真”和“假”的机会,判断-条件覆盖:判定中的每个条件都能取得各种可能的“真”和“假”值,并且使每个判定都能取到“真”和“假”两种结果,强度顺序,语句覆盖路径覆盖判定覆盖条件覆盖判定-条件覆盖,3.4.3 软件测试技术与方法综述(续),基本路径测试,把覆盖的路径数压缩到一定限度内,思想和步骤:,根据软件过程性描述中的控制流程确定程序的环路复杂性度量,用此度量定义基本路径集合,并由此导出一组测试用例对每一条独立执行路径进行测试,3.4.3 软件测试技术与方法综述(续),3黑盒测试方法与测试用例设计,也称功能测试或数据驱动测试,对软件已经实现的功能是否满足需求进行测试和验证,根据程序的功能说明来设计测试用例,主要用于确认测试,主要方法,等价类划分法,边界值分析法,错误推测法,3.4.3 软件测试技术与方法综述(续),等价类划分法,有效等价类,无效等价类,边界值分析法,大量的错误是发生在输入或输出范围的边界上,错误推测法,根据经验或直觉推测程序易出错的地方,3.4.4 软件测试的实施,3.4.4 软件测试的实施(续),1单元测试,对象:针对程序模块,进行正确性检验的测试,目的:发现各模块内部可能存在的各种差错,依据:从程序的内部结构出发设计测试用例,其依据是详细的设计说明书和源程序,方法:以白盒测试为主,辅以黑盒测试,3.4.4 软件测试的实施(续),1单元测试,内容:,模块接口测试,局部数据结构测试,路径测试,错误处理测试,边界测试,步骤:,在编码阶段进行,源程序代码编制完成,经过评审和验证,确认没有语法错误之后,利用设计文档,设计可以验证程序功能、找出程序错误的多个测试用例,对于每一组输入,应有预期的正确结果,3.4.4 软件测试的实施(续),1单元测试,驱动模块、桩模块,3.4.4 软件测试的实施(续),2集成测试,任务:把模块在按照设计要求组装起来的同时进行测试,目的:发现与接口有关的错误,依据:集成测试的依据是概要设计说明书,内容:软件单元的接口测试、全局数据结构测试、边界条件和非法输入的测试,方式:非增量方式组装与增量方式组装。,3.4.4 软件测试的实施(续),2集成测试,非增量方式组装,也称为一次性组装方式,增量方式组装,也称渐增式集成方式,3种方式:,自顶向下,自底向上,自顶向与自底向上相结合,3.4.4 软件测试的实施(续),自顶向下,3.4.4 软件测试的实施(续),自底向上,3.4.4 软件测试的实施(续),3确认测试,又称有效性测试,目的:验证软件的功能和性能及其它特性是否与用户的要求一致,依据:软件需求规格说明书,方法:黑盒测试法,4系统测试,任务:在实际运行(使用)环境下,对计算机系统进行一系列的组装测试和确认测试,目的:在于通过与系统的需求定义作比较,发现软件与系统定义不符合或与之矛盾的地方,依据: 需求分析规格说明来设计,内容:功能测试、性能测试、操作测试、配置测试、外部接口测试、安全性测试,3.5 程序的调试,3.5.1 基本概念,任务:诊断和改正程序中的错误,时机:调试主要在开发阶段进行,3.5.1 基本概念(续),1.基本步骤,错误定位、纠正错误、回归测试,3.5.1 基本概念(续),2程序调试原则,确定错误的性质和位置的原则,用头脑去分析思考与错误征兆有关的信息,避开死胡同。,只把调试工具当作辅助手段来使用,避免用试探法,最多只能把它当作最后手段,修改错误的原则,在出现错误的地方,很可能还有别的错误,只修改了这个错误的征兆或这个错误的表现,而没有修改错误的本身。,当心修正一个错误的同时有可能会引入新的错误,修改错误的过程将迫使人们暂时回到程序设计阶段,修改源代码程序,不要改变目标代码,3.5.2 软件调试方法,1强行排错法,通过内存全部打印来排错(Memory Dump),在程序特定部位设置打印语句,自动调试工具,2回溯法,3原因排除法,演绎法,归纳法,二分法,典型考题分析,【例3-1】下列描述中正确的是_。,A)程序就是软件,B)软件开发不受计算机系统的限制,C)软件既是逻辑实体,又是物理实体,D)软件是程序、数据与相关文档的集合,【例3-2】下列描述中正确的是_。,A)软件工程只是解决软件项目的管理问题,B)软件工程主要解决软件产品的生产率问题,C)软件工程的主要思想是强调在软件开发过程中需要应用工程化原则,D)软件工程只是解决软件开发中的技术问题,【例3-3】下面不属于软件工程的3个要素的是_。,A)工具B)过程,C)方法D)环境,【例3-4】下列叙述中正确的是_。,A)软件交付使用后还需要进行维护,B)软件一旦交付使用就不需要再进行维护,C)软件交付使用后其生命周期就结束,D)软件维护是指修复程序中被破坏的指令,【例3-5】下列选项中不属于软件生命周期开发阶段任务的是_。,A)软件测试B)概要设计,C)软件维护D)详细设计,【例3-6】软件工程学一般包括软件开发技术和软件工程管理两方面的内容。软件工程经济学是软件工程管理的技术内容之一,它专门研究_。,A)软件开发的方法学,B)软件开发技术和工具,C)软件成本效益分析,D)计划、进度和预算,【例3-7】下面不属于软件工程原则的是_。,A)抽象B)模块化,C)自底向上D)信息隐蔽,【例3-8】计算机辅助软件工程,简称为_。,A)SAB)SD,C)SCD)CASE,【例3-9】需求分析阶段的任务是确定_。,A)软件开发方法,B)软件开发工具,C)软件开发费用,D)软件系统功能,【例3-10】软件需求分析阶段的工作,可以分为四个方面:需求获取,需求分析,编写需求规格说明书,以及_。,A)阶段性报告,B)需求评审,C)总结,D)都不正确,【例3-11】结构化分析方法是面向_的自顶向下逐步求精进行需求分析的方法。,A)对象,B)数据结构,C)数据流,D)目标,【例3-12】下列工具中为需求分析常用工具的是_。,A)PAD,B)PFD,C)N-S,D)DFD,【例3-13】数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下面图符号不属于数据流图的是_。,A)控制流,B)加工,C)数据存储,D)源和潭,【例3-14】下列叙述中,不属于软件需求规格说明书的作用的是_。,A)便于用户、开发人员进行理解和交流,B)反映出用户问题的结构,可以作为软件开发工作的基础和依据,C)作为确认测试和验收的依据,D)便于开发人员进行需求分析,【例3-15】Jackson方法是一种面向_的结构化方法。,【例3-16】从工程管理角度,软件设计一般分为两步完成,它们是_。,A)概要设计与详细设计,B)数据设计与接口设计,C)软件结构设计与数据设计,D)过程设计与数据设计,【例3-17】两个或两个以上模块之间关联的紧密程度称为_。,A)耦合度,B)内聚度,C)复杂度,D)数据传输特性,【例3-18】为了提高模块的独立性,模块之间最好是_。,A)控制耦合,B)公共耦合,C)内容耦合,D)数据耦合,【例3-19】为了使模块尽可能独立,要_。,A)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强,B)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱,C)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱,D)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强,【例3-20】软件的结构化开发过程各阶段都应产生规范的文档,以下_不是在概要设计阶段应产生的文档。,A)集成测试计划,B)软件需求规格说明书,C)概要设计说明书,D)数据库设计说明书,【例3-21】软件结构设计的图形工具是_。,A)DFD图B)程序图,C)PAD图D)N-S图,【例3-22】下列软件系统结构图的宽度为_。,【例3-23】数据流图的类型有_和事务型。,【例3-24】在软件设计中,不属于过程设计工具的是_。,A)PDL(过程设计语言),B)PAD图,C)N-S图,D)DFD图,【例3-25】程序流程图(PFD)中的箭头代表的是_。,A)数据流,B)控制流,C)调用关系,D)组成关系,【例3-26】为了避免流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的程序流程图,通常也把这种图称为_。,A)PAD图,B)N-S图,C)结构图,D)数据流图,【例3-27】下列对于软件测试的描述中正确的是_。,A)软件测试的目的是证明程序是否正确,B)软件测试的目的是使程序运行结果正确,C)软件测试的目的是尽可能地多发现程序中的错误,D)软件测试的目的是使程序符合结构化原则,【例3-28】为了提高测试的效率,应该_。,A)随机地选取测试数据,B)取一切可能的输入数据作为测试数据,C)在完成编码以后制定软件的测试计划,D)选择发现错误可能性大的数据作为测试数据,【例3-29】程序测试分为静态分析和动态测试,其中_是指不执行程序,而只是对程序文本进行检查,通过阅读和讨论,分析和发现程序中的错误。,【例3-30】使用白盒测试方法时,确定测试数据应根据_和指定的覆盖标准。,A)程序的内部逻辑,B)程序的复杂结构,C)使用说明书,D)程序的功能,【例3-31】等价类型划分法是_测试常用的方法。,【例3-32】在进行模块测试时,要为每个被测试的模块另外设计两类模块:驱动模块和承接模块(桩模块)。其中_的作用是将测试数据传送给被测试的模块,并显示被测试模块所产生的结果。,【例3-33】检查软件产品是否符合需求定义的过程称为_。,A)系统测试,B)集成测试,C)确认测试,D)单元测试,【例3-34】_的任务是诊断和改正程序中的错误。,【例3-35】下列叙述中正确的是_。,A)程序设计就是编制程序,B)程序的测试必须由程序员自己去完成,C)程序经调试改错后还应进行再测试,D)程序经调试改错后不必进行再测试,【例3-36】以下所述中,_是软件调试技术。,A)错误推断,B)集成测试,C)回溯法,D)边界值分析,
展开阅读全文