软件工程概述_第1页
软件工程概述_第2页
软件工程概述_第3页
软件工程概述_第4页
软件工程概述_第5页
已阅读5页,还剩318页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件工程基础计算机系统工程概念系统分析和定义硬件软件系统(总体)设计硬件工程软件工程软件危机...计算机硬件性能/价格比和质量稳步提高软件成本逐年上升,质量没有可靠的保证软件已成为限制计算机系统发展的关健因素将软件开发和维护过程中遇到的一系列严重问题统称为“软件危机”在60年代后期开始认真研究解决软件危机的方法,逐步形成了新兴的计算机软件工程学...软件危机什么是软件危机?软件危机是指在计算机软件的开发和维护中所遇到的一系列严重问题。几乎所有软件都不同程度地存在这些问题概括地说软件危机包含两方面问题:如何开发软件,怎样满足对软件的日益增长的需求如何维护数量不断膨胀的已有软件软件危机主要表现1.对软件开发成本和进度的估计很不准确2.用户对“已完成的”软件不满意的现象经常发生3.软件产品的质量靠不住4.软件不可维护5.软件没有适当的文档资料6.软件成本占计算机系统总成本的比例逐年上升7.软件开发生产率提高的速度远远跟不上计算机应用迅速普及深入的趋势产生软件危机的原因一方面与软件本身的特点有关在软件运行前,软件开发过程的进展难衡量,质量难评价,因此管理和控制软件开发过程相当困难;在软件运行中,软件维护意味着改正或修改原来的设计,较难维护;软件的显著特点是规模庞大,复杂度超线性增长。要保证高质量大型软件的开发,极端复杂困难,不仅涉及技术问题(如分析方法、设计方法、版本控制),更重要的是必须有严格而科学的管理。另一方面与软件开发和维护方法不正确有关,这是主要原因。特别是忽视软件需求分析的重要性忽视软件需求分析的重要性对用户要求没有完整准确的认识就匆忙着手编写程序软件开发与编程等同忽略文档软件定义不明轻视维护计算机软件软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合程序是按事先设计的功能和性能要求执行的指令序列数据是使程序能正常操纵信息的数据结构文档是与程序开发,维护和使用有关的图文材料软件的特点软件是一种逻辑实体,而不是具体的物理实体。因而它具有抽象性软件的生产与硬件不同,在它的开发过程中没有明显的制造过程在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题对软件开发的错误认识(1)已经有了关于建造软件的标准和规程使用了吗?开发者知道吗?适用吗?完整吗?已经有了很好的软件开发工具还需要计算机辅助软件工程(CASE)工具对软件开发的错误认识(2)如果计划落后,可以增加人员赶回来给一个已经延迟的软件项目增加人手只会使其更加延迟原有人员需要抽实践训练新手有了目标的一般描述就可以开始写程序不完善的系统定义是项目失败的主要原因对软件开发的错误认识(3)项目需求不断变化,但软件很灵活,变化能够很容易地得到满足软件需求的变化确实是经常的,但其产生的影响随着引入的时间不同而不同写出程序并使其正常运行,工作就结束了越早开始写程序,就要花越长时间才能够完成对软件开发的错误认识(4)在程序真正开始运行前,无法评估其质量正式的技术评审质量过滤器成功项目唯一应该提交的就是运行程序软件=程序+文档+数据文档是成功开发的基础文档为维护提供指导解决办法...全面解决软件危机需要一系列综合措施:在软件研制的各个阶段采用好的工具;对软件的实现提供有效的构件块;为保证软件质量提供自动设计技术;以及为协调、控制、管理提供基本理论和技术——软件工程。...解决办法软件工程这一要素将驾驭前面的工具、构件决和技术软件工程把管理、控制、评审等方法与分析、设计、编码、测试、维护等技术结合起来没有坚实的软件开发方法学,即使最先进的工具和技术也不能使软件危机有所减轻软件工程—工程化方法用于解决任何产品开发的一种工程化方法是:要求在定义、开发和维护阶段的每一步中都采用经过验证的方法要求一系列的复查,以便在产品开发中保证质量规定在每一步中要产生的特定的文档鼓励能够加速开发的各种工具和方法的使用与研制提供从原始产品概念到最后产品制造的一个可追溯的途径软件工程是使计算机软件走向工程科学的途径软件工程—软件工程定义软件工程是为了经济地获得可靠的和能在实际机器上高效运行的软件而建立和使用的好的工程原则。(FritzBauer1969)软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。(GB)软件工程:(1)将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中。(2)(1)中所述方法的研究。(IEEE93)软件工程是模仿在硬件研制中行之有效的一套计划、管理、技术、方法,基于软件的生存期概念而建立起来的。...软件工程质量焦点:任何工程方法必须以有组织的质量保证为基础。质量的理念刺激不断过程改进,导致出现更加成熟的软件工程方法。它是软件工程的根基。过程:软件工程的基础是过程。软件工程过程是将技术层结合在一起的凝聚力,使得软件能够合理地和及时地开发出来。方法:软件工程方法层提供了建造软件在技术上需要“怎么做”。工具:在工具层对过程和方法提供了自动和半自动的支持。软件工程—生存期概念计算机软件生存期中有三个阶段:定义阶段、开发阶段、维护阶段。定义阶段:为软件项目做出计划、预算资金和进度,分析并规定详细的需求——做什么开发阶段:用经过验证的各种设计、编码和测试方法把软件需求转变为一个可执行的程序——怎么做维护阶段:纠正所遇到的各种问题,修正软件使之适合于不同的工作环境,增强功能要求——改变每一个阶段都有一系列的工程步骤,每一步都以能加以复查并可移交才作为结束软件生存期lifecycle软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为计算机软件的生存期软件生存期的六个步骤,即制定计划、需求分析、设计、程序编码、测试及运行维护瀑布模型

制定计划确定要开发软件系统的总目标给出功能、性能、可靠性以及接口等方面的要求完成该软件任务的可行性研究估计可利用的资源(计算机硬件,软件,人力等)、成本、效益、开发进度制定出完成开发任务的实施计划,连同可行性研究报告,提交管理部门审查需求分析和定义对待开发软件提出的需求进行分析并给出详细的定义编写软件需求说明书或系统功能说明书及初步的系统用户手册提交管理机构评审软件设计概要设计

—把各项需求转换成软件的体系结构。结构中每一组成部分都是意义明确的模块,每个模块都和某些需求相对应详细设计

—对每个模块要完成的工作进行具体的描述,为源程序编写打下基础编写设计说明书,提交评审。程序编写把软件设计转换成计算机可以接受的程序代码,即写成以某一种特定程序设计语言表示的“源程序清单”写出的程序应当是结构良好、清晰易读的,且与设计相一致的软件测试单元测试,查找各模块在功能和结构上存在的问题并加以纠正组装测试,将已测试过的模块按一定顺序组装起来按规定的各项需求,逐项进行有效性测试,决定已开发的软件是否合格,能否交付用户使用运行/维护改正性维护运行中发现了软件中的错误需要修正适应性维护为了适应变化了的软件工作环境,需做适当变更完善性维护为了增强软件的功能需做变更软件生存期模型软件生存期模型是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架瀑布模型演化模型螺旋模型喷泉模型智能模型面向对象模型软件工程学的基本目标一种定义良好的方法学,该方法学是面向包括计划、开发和维护等阶段的软件生存周期的一组确定的软件成分,它对软件生存周期的每一部记录软件文件资料,并且具有按步显示轨迹的能力一组可以预测的里程碑,在整个软件生存周期中,每隔一定时间可以对他们进行复审软件工程学的基本原则分解将一个复杂的问题分成若干个较小的、相对独立的、较易解决的子问题。抽象和信息隐蔽在将复杂问题逐层分解时,将“怎么做”等大量细节隐蔽在下一层,从而使上一层突出“做什么”而得到简化,即上一层为下一层的抽象。一致性软件开发过程的标准化、统一化,包括软件文件格式的一致、工作流程的一致等。确定性软件开发过程中用确定的形式将一些较含糊的概念表达出来。软件重用软件重用利用已有的软件来构成新的软件软件重用的两个级别: 软件在源程序级上的重用重用程序以源语言形式存取软件在目标程序级上的重用重用程序是已经编译过的目标程序软件需求分析软件危机...计算机硬件性能/价格比和质量稳步提高软件成本逐年上升,质量没有可靠的保证软件已成为限制计算机系统发展的关健因素将软件开发和维护过程中遇到的一系列严重问题统称为“软件危机”在60年代后期开始认真研究解决软件危机的方法,逐步形成了新兴的计算机软件工程学软件需求分析的任务深入描述软件的功能和性能确定软件设计的约束和软件同其它系统元素的接口细节定义软件的其它有效性需求需求分析研究的对象是软件项目的用户要求准确地表达被接受的用户要求确定被开发软件系统的系统元素将功能和信息结构分配到这些系统元素中软件需求分析的任务需求分析的任务就是借助于当前系统的逻辑模型导出目标系统的逻辑模型,解决目标系统的“做什么”的问题。通常软件开发项目是要实现目标系统的物理模型目标系统的具体物理模型是由它的逻辑模型经实例化,即具体到某个业务领域而得到的软件需求分析的任务软件的需求包括:功能需求性能需求环境需求可靠性需求安全保密要求用户界面需求资源使用需求成本消耗需求开发进度需求预先估计以后系统可能达到的目标常用的分析方法面向数据流的结构化分析方法(SA)面向数据结构的Jackson方法(JSD)结构化数据系统开发方法(DSSD)面向对象的分析方法(OOA)等•软件需求说明书•数据要求说明书•初步的用户手册•修改、完善与确定软件开发实施计划编制需求分析阶段的文档需求分析评审系统定义的目标是否与用户的要求一致;系统需求分析阶段提供的文档资料是否齐全;文档中的所有描述是否完整、清晰、准确反映用户要求;与所有其它系统成分的重要接口是否都已经描述;被开发项目的数据流与数据结构是否足够,确定;所有图表是否清楚,在不补充说明时能否理解;主要功能是否已包括在规定的软件范围之内,是否都已充分说明;设计的约束条件或限制条件是否符合实际;开发的技术风险是什么;需求分析评审是否考虑过软件需求的其它方案;是否考虑过将来可能会提出的软件需求;是否详细制定了检验标准,它们能否对系统定义是否成功进行确认;需求分析评审需求分析流程软件需求分析的原则需要能够表达和理解问题的信息域和功能域要能以层次化的方式对问题进行分解和不断细化要给出系统的逻辑视图和物理视图软件需求规格说明的原则从现实中分离功能,即描述要“做什么”而不是“怎样实现”要求使用面向处理的规格说明语言(或称系统定义语言)如果被开发软件只是一个大系统中的一个元素,那么整个大系统也包括在规格说明的描述之中规格说明必须包括系统运行环境规格说明必须是一个认识模型规格说明必须是可操作的规格说明必须容许不完备性并允许扩充规格说明必须局部化和松散耦合软件需求规格说明的原则软件需求方法需求分析方法由对软件问题的信息域和功能域的系统分析过程及其表示方法组成大多数的需求分析方法是由信息驱动的信息域具有三种属性:信息流、信息内容和信息结构。结构化分析方法

面向数据流进行需求分析的方法结构化分析方法适合于数据处理类型软件的需求分析具体来说,结构化分析方法就是用抽象模型的概念,按照软件内部数据传递、变换的关系,自顶向下逐层分解,直到找到满足功能要求的所有可实现的软件为止结构化分析方法使用工具:数据流图,数据词典,结构化英语,判定表与判定树结构化分析方法

数据流图数据流图中的主要图形元素描述银行取款过程的数据流图数据流与数据加工之间的关系数据流图的层次结构为了表达数据处理过程的数据加工情况,需要采用层次结构的数据流图。按照系统的层次结构进行逐步分解,并以分层的数据流图反映这种结构关系,能清楚地表达和容易理解整个系统分层数据流图在多层数据流图中,顶层流图仅包含一个加工,它代表被开发系统。它的输入流是该系统的输入数据,输出流是系统所输出数据底层流图是指其加工不需再做分解的数据流图,它处在最底层中间层流图则表示对其上层父图的细化。它的每一加工可能继续细化,形成子图。数据流图的层次结构

结构化分析方法步骤示例

商店业务处理系统这个数据流图只是一个高层的系统逻辑模型,它反映了目标系统要实现的功能数据流图绘制步骤首先确定系统的输入和输出根据商店业务,画出顶层数据流图,以反映最主要业务处理流程数据流图的层次结构经过分析,商店业务处理的主要功能应当有销售、采购、会计三大项。主要数据流输入的源点和输出终点是顾客和供应商。然后从输入端开始,根据商店业务工作流程,画出数据流流经的各加工框,逐步画到输出端,得到第一层数据流图数据流图的层次结构第一层数据流图加细每一个加工框

销售细化采购细化检查和修改数据流图的原则数据流图上所有图形符号只限于前述四种基本图形元素数据流图的主图必须包括前述四种基本元素,缺一不可数据流图的主图上的数据流必须封闭在外部实体之间每个加工至少有一个输入数据流和一个输出数据流在数据流图中,需按层给加工框编号。编号表明该加工所处层次及上下层的亲子关系规定任何一个数据流子图必须与它上一层的一个加工对应,两者的输入数据流和输出数据流必须一致。此即父图与子图的平衡可以在数据流图中加入物质流,帮助用户理解数据流图检查和修改数据流图的原则图上每个元素都必须有名字数据流图中不可夹带控制流初画时可以忽略琐碎的细节,以集中精力于主要数据流检查和修改数据流图的原则数据词典数据词典与数据流图配合,能清楚地表达数据处理的要求词条描述——对于在数据流图中每一个被命名的图形元素,均加以定义,其内容有:名字,别名或编号,分类,描述,定义,位置,其它,等(1)数据流词条描述数据流名:说明:简要介绍作用即它产生的原因和结果数据流来源:来自何方数据流去向:去向何处数据流组成:数据结构数据量流通量:数据量,流通量(2)数据元素词条描述数据元素名:类型:数字(离散值,连续值),文字(编码类型)长度:取值范围:相关的数据元素及数据结构:(3)数据文件词条描述数据文件名:简述:存放的是什么数据输入数据:输出数据:数据文件组成:数据结构存储方式:顺序,直接,关键码存取频率:(4)加工逻辑词条描述加工名:加工编号:反映该加工的层次简要描述:加工逻辑及功能简述输入数据流:输出数据流:加工逻辑:简述加工程序,加工顺序(5)源点及汇(终)点词条描述名称:外部实体名简要描述:什么外部实体有关数据流:数目:数据结构的描述

符号

含义

举例=被定义为+与

x=a+b[...,...]或[...|...]或

x=[a,b],x=[a|b]{...}或m{...}n重复

x={a},x=3{a}8(...)可选

x=(a)“...”基本数据元素

x=“a”.. 连结符

x=1..9存折格式存折=户名+所号+帐号+开户日+性质+(印密)+1{存取行}50户名=2{字母}24所号=“001”..“999”帐号=“00000001”..“99999999”开户日=年+月+日性质=“1”..“6”注:“1”表示普通户,“5”表示工资户等印密=“0”注:印密在存折上不显示存取行=日期+(摘要)+支出+存入+余额+操作+复核存折格式

对数据流图的每一个基本加工,必须有一个基本加工逻辑说明基本加工逻辑说明必须描述基本加工如何把输入数据流变换为输出数据流的加工规则基本加工逻辑说明加工逻辑说明必须描述实现加工的策略而不是实现加工的细节加工逻辑说明中包含的信息应是充足的,完备的,有用的,没有重复的多余信息基本加工逻辑说明用于写加工逻辑说明的工具•结构化英语•判定表•判定树(1)结构化英语结构化英语的词汇表由英语命令动词数据词典中定义的名字有限的自定义词逻辑关系词

IF_THEN_ELSE、

CASE_OF、

WHILE_DO、

REPEAT_UNTIL等组成。是一种介于自然语言和形式化语言之间的语言语言的正文用基本控制结构进行分割,加工中的操作用自然语言短语来表示其基本控制结构有三种:简单陈述句结构:避免复合语句;重复结构:WHILE_DO

REPEAT_UNTIL结构。判定结构:IF_THEN_ELSE

CASE_OF结构;(1)结构化英语商店业务处理系统中“检查发货单”IF发货单金额超过$500THENIF欠款超过了60天THEN

在偿还欠款前不予批准

ELSE(欠款未超期)发批准书,发货单

ENDIFELSE(发货单金额未超过$500)

IF欠款超过60天THEN

发批准书,发货单及赊欠报告ELSE(欠款未超期)发批准书,发货单

ENDIFENDIF(2)判定表如果数据流图的加工需要依赖于多个逻辑条件的取值,使用判定表来描述比较合适以“检查发货单”为例(3)判定树判定树也是用来表达加工逻辑的一种工具。有时侯它比判定表更直观。概要设计软件设计任务从工程管理的角度来看,软件设计分两步完成。

概要设计,将软件需求转化为数据结构和软件的系统结构。

详细设计,即过程设计。通过对结构表示进行细化,得到软件的详细的数据结构和算法。软件系统结构的总体设计基于功能层次结构建立系统。采用某种设计方法,将系统按功能划分成模块的层次结构确定每个模块的功能建立与已确定的软件需求的对应关系确定模块间的调用关系确定模块间的接口评估模块划分的质量

模块化软件系统的模块化是指整个软件被划分成若干单独命名和可编址的部分,称之为模块。这些模块可以被组装起来以满足整个问题的需求。把问题/子问题的分解与软件开发中的系统/子系统或系统/模块对应起来,就能够把一个大而复杂的软件系统划分成易于理解的比较单纯的模块结构。软件结构软件结构包括两部分。程序的模块结构和数据的结构软件的体系结构通过一个划分过程来完成。该划分过程从需求分析确立的目标系统的模型出发,对整个问题进行分割,使其每个部分用一个或几个软件成份加以解决,整个问题就解决了模块独立性,是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其它的模块的接口是简单的例如,若一个模块只具有单一的功能且与其它模块没有太多的联系,则称此模块具有模块独立性一般采用两个准则度量模块独立性。即模块间耦合和模块内聚模块独立性

耦合是模块之间的互相连接的紧密程度的度量。

内聚是模块功能强度(一个模块内部各个元素彼此结合的紧密程度)的度量。模块独立性比较强的模块应是高内聚低耦合的模块。模块间的耦合

非直接耦合(NondirectCoupling)

如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。这种耦合的模块独立性最强。数据耦合(DataCoupling)

如果一个模块访问另一个模块时,彼此之间是通过简单数据参数

(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的,则称这种耦合为数据耦合。标记耦合(StampCoupling)

如果一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。控制耦合(ControlCoupling)

如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。外部耦合(ExternalCoupling)

一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。公共耦合(CommonCoupling)

若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间有公共数据环境,则公共耦合有两种情况。松散公共耦合和紧密公共耦合。内容耦合(ContentCoupling)

如果发生下列情形,两个模块之间就发生了内容耦合

(1)一个模块直接访问另一个模块的内部数据;

(2)一个模块不通过正常入口转到另一模块内部;

(3)两个模块有一部分程序代码重迭(只可能出现在汇编语言中);

(4)一个模块有多个入口。

c

模块内聚功能内聚(FunctionalCohesion)

一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为功能内聚模块。信息内聚(InformationalCohesion)

这种模块完成多个功能,各个功能都在同一数据结构上操作,每一项功能有一个唯一的入口点。这个模块将根据不同的要求,确定该执行哪一个功能。由于这个模块的所有功能都是基于同一个数据结构(符号表),因此,它是一个信息内聚的模块。信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的隐蔽。即把某个数据结构、资源或设备隐蔽在一个模块内,不为别的模块所知晓。通信内聚(CommunicationCohesion)

如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。过程内聚(ProceduralCohesion)

使用流程图做为工具设计程序时,把流程图中的某一部分划出组成模块,就得到过程内聚模块。例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。时间内聚(ClassicalCohesion)

时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。例如初始化模块和终止模块。逻辑内聚(LogicalCohesion)

这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。巧合内聚(CoincidentalCohesion)

巧合内聚又称为偶然内聚。当模块内各部分之间没有联系,或者即使有联系,这种联系也很松散,则称这种模块为巧合内聚模块,它是内聚程度最低的模块。结构化设计方法首先研究、分析和审查数据流图。从软件的需求规格说明中弄清数据流加工的过程,对于发现的问题及时解决。然后根据数据流图决定问题的类型。数据处理问题典型的类型有两种:变换型和事务型。针对两种不同的类型分别进行分析处理。

在系统结构图中的模块传入模块─从下属模块取得数据,经过某些处理,再将其传送给上级模块。它传送的数据流叫做逻辑输入数据流。传出模块─从上级模块获得数据,进行某些处理,再将其传送给下属模块。它传送的数据流叫做逻辑输出数据流。变换模块─它从上级模块取得数据,进行特定的处理,转换成其它形式,再传送回上级模块。它加工的数据流叫做变换数据流。协调模块─对所有下属模块进行协调和管理的模块。变换型系统结构图变换型数据处理问题的工作过程大致分为三步,即取得数据,变换数据和给出数据。相应于取得数据、变换数据、给出数据,变换型系统结构图由输入、中心变换和输出等三部分组成。事务型系统结构图它接受一项事务,根据事务处理的特点和性质,选择分派一个适当的处理单元,然后给出结果。在事务型系统结构图中,事务中心模块按所接受的事务的类型,选择某一事务处理模块执行。各事务处理模块并列。每个事务处理模块可能要调用若干个操作模块,而操作模块又可能调用若干个细节模块。结构化设计方法设计步骤1)建立初始结构图;2)改进初始结构图。SC--结构图(StructureChart)描述软件系统的层次和分块结构关系。在结构图中可以看到模块与模块之间的联系与通讯。基本符号:结构图的图示符号以用矩形表示的模块用模块间带箭头的连线表示的调用关系在调用关系边上用短箭头表示的模块间信息传递关系。SC使用说明a.为每一个成分(模块或数据)适当地命名使人们能直观理解。b.一个模块在结构图中只能出现一次以避免修改时出错成错误。c.尽可能将整个画在一张纸上以便于整体理解。d.一般习惯是:输入模块在左,输出模块在右,计算模块居中。e.结构图和习惯使用的程序流程图是完全不同的。程序有层次性和过程性两方面的特点,通常应该先考虑层次特性,再考虑过程特性。结构图描述的是程序的层次特性,即某个模块负责管理哪些模块,这些模块又依次管理什么模块等。结构图结构图反映程序中模块之间的层次调用关系和联系:它以特定的符号表示模块、模块间的调用关系和模块间信息的传递结构图示例报表加工计算合法性检验印出报表信息编辑检验读入编辑印出表头印出表尾计算(8)(1)(2)(3)(3)(2)(5)(5)(2)(5)(6)(2)(6)(7)(8)(9)(8)①

模块:模块用矩形框表示,并用模块的名字标记它。②

模块的调用关系和接口:模块之间用单向箭头联结,箭头从调用模块指向被调用模块,表示调用模块调用了被调用模块。③

模块间的信息传递:当一个模块调用另一个模块时,调用模块把数据或控制信息传送给被调用模块,以使被调用模块能够运行。而被调用模块在执行过程中又把它产生的数据或控制信息回送给调用模块④

在模块A的箭头尾部标以一个菱形符号,表示模块A有条件地调用另一个模块B。当一个在调用箭头尾部标以一个弧形符号,表示模块A反复调用模块C和模块D。编写概要设计阶段的文档概要设计阶段完成时应编写以下文档:概要设计说明书数据库设计说明书用户手册制定初步的测试计划概要设计评审可追溯性:确认该设计是否复盖了所有已确定的软件需求,软件每一成份是否可追溯到某一项需求接口:确认该软件的内部接口与外部接口是否已经明确定义。模块是否满足高内聚和低耦合的要求。模块作用范围是否在其控制范围之内风险:确认该设计在现有技术条件下和预算范围内是否能按时实现

实用性:确认该设计对于需求的解决方案是否实用技术清晰度:确认该设计是否以一种易于翻译成代码的形式表达可维护性:确认该设计是否考虑了方便未来的维护质量:确认该设计是否表现出良好的质量特征各种选择方案:看是否考虑过其它方案,比较各种选择方案的标准是什么限制:评估对该软件的限制是否现实,是否与需求一致其它具体问题:对于文档、可测试性、设计过程..等进行评估详细设计在详细设计过程中,需要完成的工作是:

1.确定软件各个组成部分内的算法以及各部分的内部数据组织

2.选定某种过程的表达形式来描述各种算法。

3.进行详细设计的评审详细设计过程设计从软件开发的工程化观点来看,在使用程序设计语言编制程序以前,需要对所采用算法的逻辑关系进行分析,设计出全部必要的过程细节,并给予清晰的表达。这就是过程设计的任务。在过程设计阶段,要决定各个模块的实现算法,并精确地表达这些算法。表达过程规格说明的工具叫做详细设计工具,它可以分为以下三类:

图形工具表格工具语言工具过程设计程序流程图程序流程图也称为程序框图,程序流程图使用五种基本控制结构是:

示例

程序流程图的标准符号循环的标准符号注解的使用多出口判断N-S图N-S图也叫做盒图。五种基本控制结构由五种图形构件表示。示例N-S图的嵌套定义形式PDL(ProgramDesignLanguage)

PDL是一种用于描述功能模块的算法设计和加工细节的语言。称为设计程序用语言。它是一种伪码。伪码的语法规则分为“外语法”和“内语法”。PDL具有严格的关键字外语法,用于定义控制结构和数据结构,同时它的表示实际操作和条件的内语法又是灵活自由的,可使用自然语言的词汇。示例:拼词检查程序PROCEDURE

spellcheck

IS

BEGIN

splitdocumentintosinglewords

loodupwordsindictionary

displaywordswhicharenotindictionary

createanewdictionary

END

spellcheck

PDL的特点提供全部结构化控制结构、数据说明和模块特征。能对PDL正文进行结构分割,使之变得易于理解。为了区别关键字,规定关键字一律大写,其它单词一律小写。或者规定关键字加下划线,或者规定它们为黑体字。内语法使用自然语言来描述处理特性。内语法比较灵活,只要写清楚就可以,不必考虑语法错,以利于人们可把主要精力放在描述算法的逻辑上。有数据说明机制,包括简单的(如标量和数组)与复杂的(如链表和层次结构)的数据结构。有子程序定义与调用机制,用以表达各种方式的接口说明。使用PDL语言,逐步求精:PROCEDUREspellcheckBEGIN

--*splitdocumentintosinglewords

LOOP

getnextword

addwordtowordlistinsortorder

EXITWHEN

allwordsprocessed

ENDLOOP--*lookupwordsindictionary

LOOP

getwordfromwordlist

IF

wordnotindictionary

THEN

--*displaywordsnotindictionary

displayword

promptonuserterminal

IF

userresponsesayswordOK

THEN

addwordtogoodwordlist

ELSE

addwordtobadwordlist

ENDIF

ENDIF

EXITWHEN

allwordsprocessed

ENDLOOP

--*createanewwordsdictionary

dictionary:=

mergedictionaryandgoodwordlistEND

spellcheck程序设计语言与编码设计结构化程序设计结构化程序设计主要包括两方面:(1)在编写程序时,强调使用几种基本控制结构,通过组合嵌套,形成程序的控制结构。尽可能避免使用GOTO语句。(2)在程序设计过程中,尽量采用自顶向下和逐步细化的原则,由粗到细,一步步展开。

结构化程序设计的主要原则使用语言中的顺序、选择、重复等有限的基本控制结构表示程序逻辑。选用的控制结构只准许有一个入口和一个出口。程序语句组成容易识别的块,每块只有一个入口和一个出口。复杂结构应该用基本控制结构进行组合嵌套来实现。语言中没有的控制结构,可用一段等价的程序段模拟,但要求该程序段在整个系统中应前后一致。严格控制GOTO语句,仅在下列情形才可使用:

①用一个非结构化的程序设计语言去实现一个结构化的构造。

②若不使用GOTO语句就会使程序功能模糊。

③在某种可以改善而不是损害程序可读性的情况下。结构化程序设计的主要原则例1打印A,B,C三数中最小者的程序

程序1

if(A<

B)

goto120;

if(

B<

C)goto110;

100write(C);

goto140;

110write(B);

goto

140;

120if(A

<

C)goto130;

goto100;

130write(A);

140end

程序2

if(A

<B)and(A<C)thenwrite(A)

else if(A

B)and(B

<C)then

write(B)

else

write(C)

endif

endif编程编程是设计的自然结果编程语言的特性和编程风格会深刻地影响软件的重量和可维护性软件实现是一个不断变换的过程:设计——源程序——目标代码——机器码编程语言的选择应用领域算法及运算的复杂性软件运行的环境性能数据结构的复杂性软件开发组成员对该语言的熟悉程度编程风格程序必须是可以理解的程序的风格应该强调简单和清晰影响程序风格的因素有:源程序内部文档化数据说明的方法语句的结构I/O的方法源程序文档化选择好标识符(变量和标号)的名字挑选有意义的标识符名字安排注解序言式注解(头文件)功能注解使程序的结构一目了然缩进数据说明数据说明的次序应该规范化多个变量说明时最好按字典数顺序排列对复杂结构用注解说明语句结构每个语句应该简单直接,不应该为提高效率而把语句复杂化使程序简单易懂避免采用复杂的条件语句不要用“否定”条件的条件语句避免多重的循环嵌套或条件嵌套用括号使逻辑表达式或算术表达式更为清晰用空格及有意义的符号使语句内容清晰明确反问自己“如果这程序不是我编的,我能看懂吗?”输入/输出对批处理I/O符合逻辑地组织输入I/O出错检查好的I/O出错恢复功能清晰的输出报告格式对交互式I/O简单而有提示的输入方式完备的出错处理及出错恢复人机对话输出I/O格式的一致性原则:检查所有输入数据的合法性检查输入项的各种重要组合是否合理输入格式要简单最好采用数据结尾指示符,而不应要求用户规定“输入项目的数量”交互式I/O要求用户输入时,标明交互输入可选择的种类和范围输出时保持格式的一致性设计和标明所有的输出程序设计语言与编码设计结构化程序设计结构化程序设计主要包括两方面:(1)在编写程序时,强调使用几种基本控制结构,通过组合嵌套,形成程序的控制结构。尽可能避免使用GOTO语句。(2)在程序设计过程中,尽量采用自顶向下和逐步细化的原则,由粗到细,一步步展开。

结构化程序设计的主要原则使用语言中的顺序、选择、重复等有限的基本控制结构表示程序逻辑。选用的控制结构只准许有一个入口和一个出口。程序语句组成容易识别的块,每块只有一个入口和一个出口。复杂结构应该用基本控制结构进行组合嵌套来实现。语言中没有的控制结构,可用一段等价的程序段模拟,但要求该程序段在整个系统中应前后一致。严格控制GOTO语句,仅在下列情形才可使用:

①用一个非结构化的程序设计语言去实现一个结构化的构造。

②若不使用GOTO语句就会使程序功能模糊。

③在某种可以改善而不是损害程序可读性的情况下。结构化程序设计的主要原则例1打印A,B,C三数中最小者的程序

程序1

if(A<

B)

goto120;

if(

B<

C)goto110;

100write(C);

goto140;

110write(B);

goto

140;

120if(A

<

C)goto130;

goto100;

130write(A);

140end

程序2

if(A

<B)and(A<C)thenwrite(A)

else if(A

B)and(B

<C)then

write(B)

else

write(C)

endif

endif编程编程是设计的自然结果编程语言的特性和编程风格会深刻地影响软件的重量和可维护性软件实现是一个不断变换的过程:设计——源程序——目标代码——机器码编程语言的选择应用领域算法及运算的复杂性软件运行的环境性能数据结构的复杂性软件开发组成员对该语言的熟悉程度编程风格程序必须是可以理解的程序的风格应该强调简单和清晰影响程序风格的因素有:源程序内部文档化数据说明的方法语句的结构I/O的方法源程序文档化选择好标识符(变量和标号)的名字挑选有意义的标识符名字安排注解序言式注解(头文件)功能注解使程序的结构一目了然缩进数据说明数据说明的次序应该规范化多个变量说明时最好按字典数顺序排列对复杂结构用注解说明语句结构每个语句应该简单直接,不应该为提高效率而把语句复杂化使程序简单易懂避免采用复杂的条件语句不要用“否定”条件的条件语句避免多重的循环嵌套或条件嵌套用括号使逻辑表达式或算术表达式更为清晰用空格及有意义的符号使语句内容清晰明确反问自己“如果这程序不是我编的,我能看懂吗?”输入/输出对批处理I/O符合逻辑地组织输入I/O出错检查好的I/O出错恢复功能清晰的输出报告格式对交互式I/O简单而有提示的输入方式完备的出错处理及出错恢复人机对话输出I/O格式的一致性原则:检查所有输入数据的合法性检查输入项的各种重要组合是否合理输入格式要简单最好采用数据结尾指示符,而不应要求用户规定“输入项目的数量”交互式I/O要求用户输入时,标明交互输入可选择的种类和范围输出时保持格式的一致性设计和标明所有的输出软件测试软件测试的目的基于不同的立场,存在着两种完全不同的测试目的。从用户的角度出发,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,以考虑是否可接受该产品。从软件开发者的角度出发,则希望测试成为表明软件产品中不存在错误的过程,验证该软件已正确地实现了用户的要求,确立人们对软件质量的信心。软件测试的原则程序员应避免测试自己编制的程序测试用例的设计必须包括预期的输出结果测试用例应包括有效的和期望的输入情况,也要包括无效的和不期望的输入情况彻底检查每个测试结果只检查程序是否做了它应该做的事仅仅完成了测试工作的一半,另一半则是要检查程序是否做了它不该做的事避免不可重复的即兴测试,保留全部测试用例一段程序中存在错误的概率与在这段程序中已发现的错误数成正比测试是一项非常复杂、创造性的和需要高度智慧的挑战性任务不要为了便于测试擅自修改程序测试工作必须有明确的目标测试策略途径测试开始于模块层,然后延伸到整个基于计算机的系统集合中不同的测试技术适用于不同的时间点测试是由软件的开发人员和(对大型系统来说)独立的测试组来管理的测试和调试是不同的活动,但是调试必须能够适应任何的测试策略测试完成准则资源耗尽采用的测试方法满足某种测试充分性要求满足覆盖率等可度量的测试要求一段时期没有发现问题且所有发现问题均已解决通过测试评估出软件达到要求的可靠度测试发现频率和趋势达到预先计划的限度之下(限度根据要求、经验和历史数据得到)在一段时期没有出现等级高的问题测试概图阶段活动单元集成合格性系统技术方法静态测试静态分析代码审查动态测试白盒测试白盒测试用例技术黑盒测试黑盒测试用例技术

软件测试的对象

软件测试并不等于程序测试。软件测试应贯穿于软件定义与开发的整个期间。需求分析、概要设计、详细设计以及程序编码等各阶段所得到的文档,包括需求规格说明、概要设计规格说明、详细设计规格说明以及源程序,都应成为软件测试的对象。为把握软件开发各个环节的正确性,需要进行各种确认和验证工作。确认(Validation),是一系列的活动和过程,目的是想证实在一个给定的外部环境中软件的逻辑正确性。需求规格说明的确认程序的确认(静态确认、动态确认)验证(Verification),试图证明在软件生存期各个阶段,以及阶段间的逻辑协调性、完备性和正确性。测试与软件开发各阶段的关系软件开发过程是一个自顶向下,逐步细化的过程软件计划阶段定义软件作用域软件需求分析建立软件信息域、功能和性能需求、约束等软件设计把设计用某种程序设计语言转换成程序代码

测试过程是依相反顺序安排的自底向上,逐步集成的过程。返测试活动单元测试(UNIT)集成测试(INTERGRATION)合格性测试(QUALIFICATION)系统测试(SYSTEM)单元测试对软件单元进行测试,确实保证它作为一个单元能正常地工作单元测试的目的是验证单元满足功能、性能和接口等的要求单元测试采用的技术:静态分析、代码审查、白盒动态测试测试的充分性由各种测试覆盖率来度量单元动态测试的内容主要针对下列模块的五个基本特性进行:模块接口局部数据结构重要的执行路径出错处理路径影响以上各点的边界条件单元测试用例的要求1)用指定值、异常值和极限值验证全部计算;2)验证全部输入数据的各种选择;3)验证全部输出数据的各种选择和格式;4)每个单元的全部可执行语句至少执行一次;5)在每个分支点进行选择的测试。单元测试用例的内容1)指明被验证的需求或功能;2)解释测试如何进行,说明验证代码与单元设计一致的准则和技术,以验证接口满足需求;3)指明测试使用的支持软件,如测试工具、驱动模块、桩模块、动态路径分析工具等;4)说明全部输入数据和(或)驱动程序等;5)说明预期的输出,包括数据值或其它可以验证的结果;6)通过准则。

集成测试依据软件设计确定的软件结构,按照软件集成“工序”,把各个软件单元逐步集成为完整的软件系统,并不断发现和排除错误,以保证联接、集成的正确性。

集成测试的内容1)软件单元的接口测试;2)软件部件的功能、性能测试;3)全面数据结构测试;4)必要的运行时间、存贮空间、计算精度测试;5)边界条件和非法输入的测试。

集成测试的要求1)必须对有调用关系的软件单元之间的所有调用进行测试,验证每个调用接口的完整性和一致性;2)应对软件进行正确处理的能力的经受错误影响的能力进行测试;3)应测试在各种外部输入下,从外部接口采集和(或)发送数据的能力,包括对正确数据及状态的处理,对接口错误、数据错误、协议错误的识别及处理。

集成测试的通过准则1)软件单元无错误地连接;2)满足各项功能、性能要求;3)对错误的输入有正确处理的能力;4)对测试中的异常有合理解释;5)人机界面、对外接口正确无误;软件集成策略1)非增量方式先测试好每一个软件单元,然后一次组装在一起再测试整个程序。2)增量方式逐步把下一个要被组装的软件单元或部件,同已测好的软件部件结合起来测试。增量方式主要包括自顶向下、自底向上、自顶向下与自底向上相结合等方法。集成方式非增量方式

BigBang增量方式自顶向下方法自底向上方法“三明治”方法增量和非增量方式的优缺点增量方式的优点:a.增量方式占用人工较少。b.增量方式可以较早地发现模块接口错误。c.增量方式容易排错。d.增量方式测试效果好,比较彻底。非增量方式的优点:a.非增量方式占用机器时间较少。b.非增量方式有利于并行开发。非增量方式有一种很直接、原始的组装方式,它把所有通过单元测试的模块一古脑儿地全部集成在一起,直接组装成软件系统,并对它进行测试。这种被贬义地称作大爆炸(BigBang)的组装方式,目前仍在许多场合使用。

人们期望它可以带来方便、快捷的组装效果。这种方法遭到广大测试专家的批评,普遍认为它会引起混乱,且难以确定错误源的位置。自顶向下方法自顶向下集成法是一个模块一个模块地组装软件的方法。按照控制的结构,从主控模块(主程序)开始,向下地逐个把模块连接起来。集成的方式有两种:深度优先组装法及宽度优先组装法。深度优先法是先把结构中的一条主要的控制路经上的全部模块逐步组装起来。然后再连接其它的控制路径。宽度优先法是从结构的顶层开始逐层往下组装。自顶向下集成的过程步骤1)主控模块用作为测试驱动器。直接附属于主控模块的各模块全都用桩模块代替。2)按照所选的组装法(即深度优先或宽度优先)每次用一个真模块取代一个附属的桩模块。3)当装入每个真模块时都要进行测试。4)作完每一组测试后又再用一个真模块代替另一个桩模块。5)可以进行回复测试(即重新再作过去作过的全部或部分测试),以便肯定没有新的错误发生。自底向上方法自底向上集成测试方法是从软件结构中最底层的、最基本的软件单元开始进行集成和测试。由于在逐步向上组装过程中下层模块总是存在的,也就是说不再需要桩模块了,但却需要调用这些模块开展工作的驱动模块。自底向上集成的过程步骤1)低层的模块组成簇,以执行某个特定的软件子功能。2)编写一个驱动模块作为测试的控制程序,和被测试的簇连在一起,负责安排测试用例的输入及输出。3)对簇进行测试。4)拆去各个小簇的驱动模块,把几个小簇合并成大簇,再重复做2、3及4步。

这样在软件结构上逐步向上组装。合格性测试根据软件需求规格说明中定义的全部功能、性能、可靠性等需求,测试整个软件是否达到要求。合格性测试内容功能测试性能测试资源和余量测试边界测试操作测试外部接口测试强度测试可靠性测试安全性测试恢复性测试安装性测试移植性测试保密性测试回归测试功能测试根据功能需求进行测试,以确认软件与软件功能需求的一致功能测试应达到以下要求:a.每一个软件功能都必须被测试用例或被认可的异常所覆盖(或由于异常情况的出现而未达到期望的覆盖,但该异常已被测试者认识到,并进行了处理);b.用一系列合理的数据类型和数据值运行,测试软件在正常、超负荷、饱和和其它“最坏”情况下的结果;c.用假想的数据类型和数据值运行,以测试软件排斥不规则(非法)输入的能力。性能测试对软件是否与所需定量的性能需求一致进行确认。包括:a.软件在获得定量结果时计算的精确性;b.有时间要求的软件,其实际的运行时间;c.软件完成功能所能处理的数据量;d.软件各部分的协调性;e.其它性能指标。

资源和余量测试测试是否符合软件需求规格说明中提出的处理时间、储存空间和内存、输入/输出通道等资源使用的要求,并在设计中为这些资源留出了余量。通常情况下,应保证在储存空间和内存,输入/输出通道,以及处理时间的占用上至少有20%的余量。边界测试测试软件在输入域和(或)输出域、数据结构、状态转换、过程参数、功能界限等边界点或端点情况下的运行状态。

操作测试操作测试包括对用户接口、人机接口和人机交互要求的所有测试。应以常规操作、非常规操作、误操作、快速操作等情况来检验界面的可靠性。操作测试工作还包括对照软件使用说明,逐条进行相应的操作,以检测软件使用说明的完整性、正确性、与软件程序的一致性。外部接口测试确认软件与其外部接口要求的一致性。测试内容:a.测试所有外部接口,检测接口信息的格式和内容。b.对每一个外部输入/输出接口应进行正常和异常情况测试。如果软件不能在运行环境中测试,则有必要使用模拟程序或其它测试工具。

强度测试强度测试是在预先规定的一段时间内,在软件设计的极限状态下,进而在超设计能力的状态下,运行软件以测试软件的所有功能。可以允许在饱和点上性能降级,但必须保证仍能顺利运行。可靠性测试软件可靠性测试是以能获得可用来评估软件可靠性的数据为目的的一种软件测试。例如,基于软件运行剖面设计软件测试用例,并用这些测试用例按出现概率进行随机输入以模拟软件真实运行状态,运行软件以获得失效数据,进而给出软件的可靠性度量,这就是一种软件可靠性测试。软件运行剖面是指:1)软件运行期间执行各个任务的事件和各事件相应概率的集合。2)系统使用条件的一种定义,系统输入值用其按时间或在可能输入范围中以概率分布来定义。

安全性测试针对程序中危险防止和危险处理设施进行的测试,以验证其是否有效。安全性测试应包括下面的工作:a.全面检验软件在软件需求规格说明中规定的防止危险状态措施的有效性和在每一个危险状态下的反应;b.对软件设计中用于提高安全性的结构、算法、容错、冗余、中断处理等方案,进行针对性测试;c.在异常条件下测试软件,以表明不会因可能的单个或多个输入错误而导致不安全状态。d.用错误的安全性关键操作进行测试,以验证系统对这些操作错误的反应;e.对安全性关键的软件单元和软件部件,要单独进行加强的测试,以确认其满足安全性需求。恢复性测试对有恢复或重置(RESET)功能的软件,应专门对每一类导致恢复或重置的情况进行测试,以确认恢复或重置功能。安装性测试按规程进行安装正确性测试,包括参数装订、程序加载等。移植性测试在所有要求的移植环境中运行软件以验证软件的移植性。保密性测试验证软件是否提供了软件需求规格说明中规定的保密机制,使软件的机密性、完整性和有效性不被破坏。回归测试回归测试是一种选择性重新测试,目的是检测系统或系统组成部分在修改期间产生的缺陷,用于验证已进行的修改并未引起不希望的有害效果,或确认修改后的系统或系统组成部分仍满足规定的要求。Alpha测试和Beta测试开发者想预见用户的使用过程是不可能的对于通用软件产品,让每个用户都进行接收(验收)测试是不切实际的采用Alpha测试和Beta测试来发现只有最终用户才能发现的问题Alpha测试:由一个用户在开发者的场所、在开发者指导下进行测试Beta测试:由最终用户在一个或多个用户场所单独地进行测试系统测试软件与与系统中其它的软、硬件对接并测试其接口的过程系统测试的目的,是在真实的系统工作环境下检验软件是否能与系统正确连接,,并确认软件是否与用户需求(系统需求)一致系统测试内容安装性测试功能测试性能测试操作测试外部接口测试安全性测试:注意进行硬件和软件在各种故障模式下的测试;最坏配置情况下的测试;错误操作情况下的测试;多机系统出现故障切换时,系统的功能、性能连续平稳性测试性能强度测试降级能力强度测试独立(第三方)测试第三方指的是与软件项目甲方、乙方相对独立的其它机构。进行独立测试的目的是进一步加强软件质量保证工作,提高软件的质量,并对软件产品进行客观评价。进行第三方独立测试通常有以下优点:1)发挥专业技术优势;2)发挥独立性优势;3)进一步促进承办方的工作。测试方法静态测试静态分析代码审查代码走查技术评审桌面检查动态测试白盒测试控制流覆盖数据流覆盖黑盒测试功能分解等价类划分边值分析因果图随机测试猜错法静态测试代码审查:小组集体阅读讨论检查代码代码走查:小组集体用“脑”执行并检查代码桌面检查:由程序员阅读自己编写的程序技术评审:会议形式讨论检查代码静态分析:对代码的机械性、程式化的特性分析方法,包括控制流分析、数据流分析、接口分析、表达式分析白盒测试与黑盒测试对比黑盒测试白盒测试优点适用于各测试阶段从产品功能角度测试容易入手生成测试数据可以构成测试数据使特定程序部分得到测试有一定的充分性度量手段可获得较多工具支持缺点某些代码段得不到测试如果规格说明有误则无法发现不易进行充分性度量不易生成测试数据无法对未实现规格说明得部分测试工作量大,通常只用于单元测试,有引用局限性质是一种确认技术,回答“我们在构造一个正确得系统吗?”是一种验证技术,回答“我们在正确地构造一个系统吗?”白盒测试控制流测试语句覆盖分支覆盖条件覆盖条件组合覆盖路径覆盖数据流测试全定义使用路径全使用路径全定义路径数据流异常状态图测试覆盖率采用白盒法进行测试时,考虑的是测试用例对程序内部逻辑的覆盖程度。最彻底的白盒法是覆盖程序中的每一条路径,但这往往大到无法实现。因此采用其它一些标准来量度覆盖的程度,并希望覆盖程度尽可能高些。例子func(intA,B,X){if((A>1)&&(B=0)){X:=X/A};if((A=2)||(X>1)){X:=X+1};}A>1andB=0A>1andB=0X=X/AX=X/AYESYESNONOabced流图符号语句覆盖语句覆盖:选择足够的测试用例,使得程序中每个语句至少都能被执行一次。语句覆盖率:已执行的可执行语句占程序中可执行语句总数的百分比。语句覆盖例取A=2,B=0,X=3A>1andB=0A>1andB=0X=X/AX=X/AYESYESNONOabced分支覆盖分支覆盖又称判定覆盖。分支覆盖:执行足够的测试用例,使得程序中每个判定都获得一次“真”值和“假”值,或者说使得程序中的每一个分支至少都通过一次。分支覆盖率:已取过“真”和“假”两个值的判定占程序中所有条件判定个数的百分比。分支覆盖例A=3,B=0,X=1沿路径acd执行A=2,B=1,X=3沿路径abe执行A>1andB=0A>1andB=0X=X/AX=X/AYESYESNONOabced条件覆盖条件覆盖:执行足够的测试用例,使得判定中的每个子条件都获得所有可能的结果。条件覆盖例共有四个条件:A>1,B=0,A=2,X>1A=2,B=0,X=4沿路径ace执行A=1,B=1,X=1沿路径abd执行A>1andB=0A>1andB=0X=X/AX=X/AYESYESNONOabced分支/条件覆盖分支/条件覆盖:执行足够的测试用例,

使得判定中每个子条件取到各种可能的值,并使每个判定取到各种可能的结果。分支/条件覆盖例做练习A>1andB=0A>1andB=0X=X/AX=X/AYESYESNONOabced条件组合覆盖条件组合覆盖:执行足够的测试用例,使得每个判定中各条件的所有可能的组合都出现一次。条件组合覆盖例共有8种条件:①A>1,B=0②A>1,B≠0③A≤1,B=0④A≤1,B≠0⑤A=2,X>1⑥A=2,X≤1⑦A≠2,X>1⑧A≠2,X≤1A=2,B=0,X=4(①⑤)A=2,B=1,X=1(②⑥)A=1,B=0,X=2(③⑦)A=1,B=1,X=1(④⑧)A>1andB=0A>1andB=0X=X/AX=X/AYESYESNONOabced路径覆盖路径覆盖:执行足够的测试用例,使程序所有可能的路径都获得通过。路径覆盖例四条路径:ace,abd,abe,acdA=2,B=0,X=3(ace)A=1,B=0,X=1(abd)A=2,B=1,X=1(abe)A=3,B=0,X=1(acd)A>1andB=0A>1andB=0X=X/AX=X/AYESYESNONOabced覆盖率要求对单元测试来说,语句覆盖和分支覆盖是最基本的要求。由于程序中错误(异常)处理工作的重要性以及其结构相对简单,要求错误处理要做到路径覆盖。对质量要求高的软件单元,可根据情况提出条件覆盖、分支/条件覆盖、条件组合覆盖以及其它更高的覆盖要求。控制流测试的测试用例生成经验测试法通过研究程序选择初始测试用例通过测试执行和覆盖率统计增加测试用例不断运行直至达到要求的测试覆盖率与黑盒测试结合纯粹白盒测试方法列出为实现覆盖所需的全部路径根据每个路径设计测试用例注意测试零次循环、一次循环和最大次数循环黑盒测试功能分解等价类划分边值分析因果图猜错法功能分解使用功能抽象的方法把程序分解为功能单元使用数据抽象的方法产生测试每个功能单元的数据注意测试功能序列组合和输入数据组合等价类划分将输入数据域划分各自具有典型代表意义的有限个等价类,从每个等价类中产生一些代表性测试用例输入范围的左、中、右各个离散类别不同的处理方式注意划分有效等价类和无效等价类设计一些仅覆盖一个等价类的测试用例边值分析经验表明,程序在边界处的处理常常是关键的,也是容易发生错误的使用正好等于、小于、大于边界值的数据进行测试,发现错误的概率较大,这就是边值分析技术使用原则:如果输入条件规定了取值范围或数据个数,则可选择正好等于边界值、刚刚在边界范围内和刚刚超越边界外的值进行测试针对规格说明的每个输入条件,使用上述原则对于有序数列,选择第一个和最后一个因果图通过画因果图,把用自然语言描述的功能说明转换为判断表,然后为判断表的每一列设计一个测试用例:分析规格说明,引出原因(输入条件)和结果(输出条件),并进行标识建立连接各个原因和各个结果的因果图标注不可能出现的原因和结果组合情况将因果图转换为决策表对每一列建立一个测试用例随机测试从所有可能的输入值中随机选取测试输入数据的方法使数据在规定的取值范围内并服从预期的概率分布基于运行剖面的测试方法是可靠性测试的主要方法预期结果可以由人工或定性的方法确定是强度测试的有效手段猜错法列出所有可能有的错误和易错情况表,基于该表设计测试用例有力的补充充分发挥敏锐、经验等能力直接切入可能的错误,直接定位需要丰富的经验和领域知识测试产品(文档)测试计划测试说明测试报告测试用例单测试记录问题报告单软件测试计划1范围1.1标识1.2系统概述1.3文档概述1.4与其它计划的关系2引用文档3软件测试环境3.1软件项3.2硬件和固件项3.3权限3.4安装、测试和控制4

正式合格性测试4.XCSCI名称和项目唯一标识号4.X.1

总体测试要求4.X.2

测试级4.X.3

测试类4.X.4

测试定义4.X.4.Y

测试名称和项目唯一标识号4.X.5

测试进度5

数据记录、整理和分析软件测试说明1范围1.1标识1.2系统概述1.3文档概述1.4与其它计划的关系2引用文档3正式合格性测试准备3.X测试名称和项目唯一标识号3.X.1计划3.X.2测试准备过程3.X.2.1硬件要求3.X.2.2软件准备3.X.2.3其它测试准备4正式合格性测试说明4.X测试名称和项目唯一标识号4.X.Y测试用例名称和项目唯一标识号4.X.Y.1需求可追踪性4.X.Y.2初始化4.X.Y.3测试输入4.X.Y.4预期测试结果4.X.Y.5评估测试结果的标准4.X.Y.6测试过程4.X.Y.7前提和约束软件测试报告1范围1.1标识1.2系统概述1.3文档概述1.4与其它计划的关系2引用文档3测试概述3.1正式合格性测试名称及项目的唯一标识号3.1.1小结3.1.2测试记录4测试结果4.X正式合格性测试名称及项目的唯一标识号测试结果4.X.Y测试用例名称和项目唯一标识号4.X.Y.1测试结果4.X.Y.2测试过程中的差异情况5CSCI评估和建议5.1CSCI评估5.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论