2020/5/211第六章MIS系统的实现及维护2020/5/2126.1系统实施的任务软硬件设备购置硬件购置:计算机、网络设备、辅助设备以及网络建设等等。软件购置:网络系统软件、数据库系统软件及软件开发工具等等。程序编制根据系统设计书,实现数据库的设计,编制模块程序,实现系统的软件设计。人员培训针对新系统的运行和操作,对相关人员进行培训,使其逐步适应和熟悉新的操作方法。数据准备在确定数据库物理模型后,应进行基础数据的整理和录入;以便分散工作量,为系统调试提供真实数据。系统实施阶段的任务包括:2020/5/213表6.1实施阶段的任务之间的关系程序编制设备购置人员培训数据准备程序编制—提供调试设备培训有关人员试用软件提供试验数据调试程序设备购置提供对设备的要求—培训有关人员接收设备提供存储量和内存要求人员培训提供程序以培训人员提供培训设备—提供培训的实验数据数据准备规定数据准备的内容和格式提供录入设备提供录入人员—2020/5/2146.2自顶而下的实现方法构建系统框架结构化方法主张自顶而下实现系统,即尽量先实现上层模块,逐步向下,最后实现下层最基本的模块。添加新功能实现系统全部功能调试系统的结构和模块间的接口下层模块只保留名字和参数传递最后实现最基本的模块2020/5/215处理领料业务收集领料单录入领料单复核领料单登记领料查库存数发料缺料输入控制修改库存量打印发料单打印缺货单打印订购单部门文件复核部门编码复核材料编码材料文件领料3458库存发料单采购通知缺货通知6712注明已发料13141617处理控制1011159122020/5/2166.3程序设计1.程序的注解1)序言注解2)功能注解3)语句注解2.标识符命名风格匈牙利命名规则一、程序设计风格2020/5/217二、程序设计语言1、传统的程序设计语言–低级语言–高级语言2、SQL语言3、面向对象的程序设计语言–基于Smalltalk–基于C–基于Pascal–基于LISP2020/5/218三、常用开发工具VisualStudio系列开发工具Delphi,C++BuilderPowerBuilder数据库系统:SQLServer,Oracle,SyBASE,Informix,InterBase,FoxPro各种版本。四、好程序的标准能工作;调试代价低;易于维护;易于修改;设计不复杂;效率高。2020/5/219对于什么是“结构化程序设计”,至今还没有被普遍接受的定义。通常认为结构化程序设计包括以下四个方面的内容。1、限制使用GOTO语句2、逐步求精的设计方法在一个程序模块内,先从该模块的功能描述出发,一层层地逐步细化,直到最后将它分解、细化成语句为止。3、自顶向下的设计、编码和调试这是把逐步求精的方法由程序模块内的设计推广到一个系统的设计与实现。4、主程序员制的组织形式这是程序人员的组织形式。一个主程序员组的固定成员是主程序员一人,辅助程序员一人,程序资料员(或秘书)一人。其他技术人员按需要随时加入组内。五、结构化程序设计2020/5/2110程序员必须严格遵守:a)不使用可能干扰其他模块的命令或函数;b)按总体设计的要求传递参数,不随意修改其内容与含义;c)按统一规定的格式操作公用文件或数据库;d)按统一的原则使用标识符;e)保持程序风格的一致。2020/5/2111程序设计举例2020/5/21122020/5/21136.4系统的测试1983年IEEE提出的软件工程标准术语中对软件测试的定义为“使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。”一、测试的基本概念1、软件测试的认识的发展人们对软件测试认识的五个阶段:阶段1—测试=调试阶段2—测试是证明软件正确阶段3—测试是发现软件中错误阶段4—测试是减小软件不工作的风险(是度量软件质量要素的过程)阶段5—测试可产生低风险的软件的一种认识上的训练2020/5/2114测试(test)调试(debug)以已知条件开始,使用预先定义的程序,有预知的结果以不可知内部条件开始,结果一般不可预见有计划被动的由独立的测试组,在不了解软件设计的条件下完成由程序作者进行发现错误找出错误位置,排除2、测试与调试(排错)2020/5/2115二、测试的目的与地位1.测试是为了寻找错误而运行程序的过程。2.一个好的测试用例是指很可能找到迄今为止尚未发现的错误的测试。3.一个成功的测试是揭示了迄今为止尚未发现的错误的测试。E.W.Dijkstra指出:“程序测试能证明错误的存在,但不能证明错误不存在.”测试的目的是发现程序中的错误,是为了证明程序有错,而不是证明程序无错.2020/5/2116三、测试的基本原则1.测试队伍:测试队伍与研发队伍应分别建立。2.测试用例:设计测试用例时,应包括对有效的输入条件和无效的输入条件的测试。3.期望结果:设计测试用例时要给出测试的期望结果。4.回归测试:程序修改之后,要进行回归测试。四、测试方法1、静态测试方法–不在计算机上运行被测程序,而是采用其它手段达到对程序进行检测目的测试方法。静态测试的类型–人工测试–计算机辅助静态分析。2020/5/21172、动态测试方法–在计算机上运行被测试程序,并用所设计的测试用例对程序进行检测的方法。动态测试的类型–黑盒测试–白盒测试静态和动态测试举例汽车的检查过程:•踩油门•看车漆•打开前盖检查•发动汽车•听听发动机声音•上路行使静态测试动态测试2020/5/21183、静态测试的内容对软件进行分析、检查和审阅,不实际运行被测试的软件。静态测试约可找出30~70%的逻辑设计错误.对需求规格说明书、软件设计说明书、源程序做检查和审阅,包括:•是否符合标准和规范;•通过结构分析、流图分析、符号执行指出软件缺陷;4、动态黑盒测试和动态白盒测试输入不深入代码细节的测试方法称为动态黑盒测试。软件测试员充当客户来使用它,即不关心程序内部的具体实现,而只是根据程序的功能说明来设计测试用例。因此又称功能测试,输出软件1)动态黑盒测试—闭着眼睛测试软件2020/5/21192)动态白盒测试—带上X光眼镜测试软件??????????????3581322.293419985680302829734315250*(1+0.015)*((1+0.015)^360-1)/0.015250*(1+0.015)*((1+0.015)^360-1)/0.015假如知道一个盒子包含一台计算机,而另一个盒子是人用纸笔计算,就会选择不同的测试用例了解软件的运作方式会影响测试手段又称结构测试,它以程序的内部逻辑为依据,设计测试用例。2020/5/21203)黑盒测试与白盒测试优缺点比较黑盒测试白盒测试优点缺点性质①适用于各阶段测试②从产品功能角度测试③容易入手生成测试数据①可构成测试数据使特定程序部分得到测试②有一定的充分性度量手段③可或较多工具支持①某些代码得不到测试②如果规格说明有误,则无法发现③不易进行充分性测试①不易生成测试数据(通常)②无法对未实现规格说明的部分进行测试③工作量大,通常只用于单元测试,有应用局限是一种确认技术,回答“我们在构造一个正确的系统吗?”是一种验证技术,回答“我们在正确地构造一个系统吗?”2020/5/21214)白盒、黑盒测试的适应阶段规划阶段需求分析设计阶段实现阶段运行和维护白盒测试黑盒测试5)小结1.无论白盒测试还是黑盒测试,都不可能做到穷尽测试;2.用有限的测试案例去尽可能地发现程序的错误;3.将白盒测试、黑盒测试等各种测试方法结合起来测试可以达到更为明显的效果;4.白盒测试与黑盒测试的适应情况。2020/5/2122五、测试案例设计一个测试用例由两部分组成:–对程序进行测试的一组输入数据的描述。–由这组输入数据所产生的程序的预期输出结果的描述。Module--------------------------------------------------------------测试用例2020/5/2123六、常用的覆盖标准语句覆盖判定覆盖条件覆盖条件组合覆盖路径覆盖边界值测试2020/5/21241.语句覆盖法在测试中执行程序中的每一个语句,使得程序中的每个语句至少能执行一次。A>1ANDB=0X=X/AaYNbcA=2ORX>1X=X+1NYde测试用例:A=2,B=0,X=32020/5/2125其原程序是:PROCEDUREM(VARA,B,X:REAL);BEGINIF(A1)AND(B=0)THENX:=X/A;IF(A=2)OR(X1)THENX:=X+1END;2020/5/21262.判断覆盖判断覆盖是设计测试用例使程序中的每个判断的取“真”值和取“假”值的每一个分支至少通过一次。在上面例子中,若取测试用例为:A=3,B=0,X=1和A=2,B=1,X=3则可以分别执行路径acd和abeA>1ANDB=0X=X/AaYNbcA=2ORX>1X=X+1NYde2020/5/21273.条件覆盖条件覆盖是指执行足够的测试用例,使得判断中的每个条件获得各种可能的结果。上图的程序有四个条件:A1、B=0、A=2、X1为满足条件覆盖的要求,需要执行足够多的例子,使得第一个判断条件有A1、A≤1、B=0、B≠0等各种结果出现,而在第二个判断条件有A=2、A≠2、X1、X≤1等各种结果出现。以下的两个测试用例可以满足要求:①A=2,B=0,X=4②A=1,B=1,X=12020/5/21284.条件组合覆盖设计测试用例时,要使得判断中每个条件的所有可能取值至少出现一次,并且每个判断本身的判定结果也至少出现一次。上述例子中,两个判断分别包含两个条件,可以形成八种组合:(1)A1,B=0;(2)A1,B≠0;(3)A≤1,B=0;(4)A≤1,B≠0;(5)A=2,X1;(6)A=2,X≤1;(7)A≠2,X1;(8)A≠2,X≤1。下面的四个测试用例可以满足条件组合覆盖的要求:①A=2,B=0,X=4(使(1)、(5)两种情况出现);②A=2,B=1,X=1(使(2)、(6)两种情况出现);③A=1,B=0,X=2(使(3)、(7)两种情况出现);④A=1,B=1,X=1(使(4)、(8)两种情况出现)。2020/5/21295.路径覆盖路径覆盖是指设计测试用例,覆盖程序中所有可能的路径。在我们的例子中,有四条可能的路径:abd、ace,abe,acd。下面的测试用例可以满足路径覆盖的要求:①A=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)。以上这五种测试技术均属于“白箱测试”,下面是“黑箱测试”的例子。我们介绍设计测试用例的另一种技术:边界值测试。2020/5/21306.边界值测试经验证明,程序往往在处理边缘情况时犯错误,因此检查边缘情况的测试用例效率是比较高的。下面是一些例子:1)对新记录(1)在文件第一个记录之前加一个记录;(2)在文件最后一个记录之后加一个记录;(3)插入的新记录对应实体是实际不可能存在的;(4)记录的域不全。2020/5/21312)处理业务(1)处理文件的第一个记录;(2)处理文件的最后一个记录;(3)处理中间的一个记录;(4)处理同一程序刚建立的记录;(5)连续处理相邻记录;(6)试图处理一个不存在的记录;(7)处理业务使某个数值超过常规(如库存数为负或域值上溢);(8)对某些关键数据输入有错误的数据;(9)同一业务处理过程中造成多重例外和出错。2020/5/21323)记录删除(1)删去文件的第一个记录;(2)删去文件的最后一个记录;(3)试图删去不存在的记录;(4)连续删去多个记录;(5)删去一个记录,并试图处理这个记录。4)试验逻辑(1)检查所有能产生最大值、最小值、平均值的计算;(2)除式中除数为0;(3)数据域填入最小数或最大数;(4)数据域填入允许值之外的