《一章软件测试》由会员分享,可在线阅读,更多相关《一章软件测试(161页珍藏版)》请在金锄头文库上搜索。
1、钞答辩惧驮郡致榜笨堂触嫌着司瑶冠茹际滓撇端的道倔疼矽说鹰咀衍播渔一章软件测试一章软件测试软件工程软件工程软件工程软件工程第11章 软件测试奸拦仓油我皋郧肋察榷菇郧泄称贴氮魄猜冤循突矾胺碟恫聘赁谩尧岭梦戊一章软件测试一章软件测试内容摘要内容摘要软件测试基础软件测试基础白盒测试白盒测试黑盒测试黑盒测试测试策略测试策略面向对象测试面向对象测试测试完成标准测试完成标准调试调试阔诚渐嘻资名撮雷喘挂倔树驭孽嗓使哪昔遁痊临稽兑莹润柿悍烈掳呛篷靳一章软件测试一章软件测试2复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程内容摘要内容摘要软件测试基础软件测试基础白盒测试白盒测试黑盒测
2、试黑盒测试测试策略测试策略面向对象测试面向对象测试测试完成标准测试完成标准调试调试隐历饱吵牧稽锤畜艺领类倾虽砍袭基毁叹秤相肚啸道琢朋棉贪床楞嚎术滥一章软件测试一章软件测试3复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程软件测试基础软件测试基础软件测试的目的软件测试的基本原则白盒测试和黑盒测试卸洛把劳墨抽柔湍度婚窘昂斩窿怖谱焕儿舶博麓挟颠蚤来船普茄共想成啦一章软件测试一章软件测试4复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程有关软件测试的错误观点有关软件测试的错误观点“软件测试是为了证明程序是正确的,即测试能发现程序中所有的错误”
3、。事实上这是不可能的。要通过测试发现程序中的所有错误,就要穷举所有可能的输入数据。 对于一个输入三个16位字长的整型数据的程序,输入数据的所有组合情况有248 3*1014,如果测试一个数据需1ms,则即使一年365天一天24小时不停地测试,也需要约1万年。叛霉澎件境集抿导监岂故颁屋挑亢埃宪芹哆冠垣蚊谷泵毕闷艺蜘年敏城醛一章软件测试一章软件测试5复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程对一个具有多重选择和循环嵌套的程序,对一个具有多重选择和循环嵌套的程序,不同的路径数目可能是天文数字。例如一个不同的路径数目可能是天文数字。例如一个小程序的流程图,它包括了一
4、个执行小程序的流程图,它包括了一个执行20次的次的循环,其循环体有五个分支。这个循环的不循环,其循环体有五个分支。这个循环的不同执行路径数达同执行路径数达520条,如果对每一条路径进条,如果对每一条路径进行测试需要行测试需要1毫秒,那么即使一年工作毫秒,那么即使一年工作365 24小时,要想把所有路径测试完,大约需小时,要想把所有路径测试完,大约需3170年。年。坊撅盒摧聋脂宿铝攘氧馅贩诵磁堵奈绵符渤秤撅拄蕊鲤集荤沏徽船惰垮猫一章软件测试一章软件测试6复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程撂取滦黄航批杉绅澈病查躁扣银崩盾爵廉盖宽音煤妨皂镁诗饰班棚蕊陕诀一
5、章软件测试一章软件测试7复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程“程序测试是证明程序正确地执行了预期的功能”。实际上,一个程序不仅要完成它所需完成的功能,而且不应完成它不该做的事。如不能把边长为0、0、0的三条边判断为等边三角形。掉氰严舍庸挡惠趣踏铃圣最诣敲显缎淖导委筑数钙斤丽关蒂攒供藻冤庸永一章软件测试一章软件测试8复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程软件测试的目的软件测试的目的Glen Myers给出的软件测试目的:测试是一个为了发现错误而执行程序的过程测试是一个为了发现错误而执行程序的过程一个好的测试用例是指
6、很可能找到迄今为至尚未一个好的测试用例是指很可能找到迄今为至尚未发现的错误的测试用例发现的错误的测试用例一个成功的测试是指揭示了迄今为至尚未发现的一个成功的测试是指揭示了迄今为至尚未发现的错误的测试错误的测试 根据这个测试目的,我们应该排除对测试的错误观点,设计合适的测试用例,用尽可能少的测试用例,来发现尽可能多的软件错误。齿殊木徽菜册炎牛踞党乐囚饯荆贵城丑尖枫厉贾盘普豪敷痛碘匝遍咎展汲一章软件测试一章软件测试9复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程软件测试的原则软件测试的原则Davis提出了一组指导软件测试的基本原则:1.所有的测试都应可追溯到客户需求
7、2.应该在测试工作真正开始前的较长时间就进行测试计划3. Pareto原则:测试中发现的80%的错误可能来自于20%的程序代码4.测试应从“小规模”开始,逐步转向“大规模”5.穷举测试是不可能的6.为了达到最有效的测试,应由独立的第三方来承担测试巨蛆猴艳欢羽杯奸悉涯掉黄株是靳芝豪戴挚擦暴怎熄闽沦琐砾蔡境滋飞悸一章软件测试一章软件测试10复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程其他的测试原则:1.在设计测试用例时,应包括合理的输入条件和不合理的输入条件2.严格执行测试计划,排除测试的随意性3.应当对每一个测试结果做全面检查4.妥善保存测试计划、测试用例、出错
8、统计和最终分析报告,为维护提供方便5.检查程序是否做了应做的事仅是成功的一半,另一半是检查程序是否做了不该做的事6.在规划测试时不要设想程序中不会查出错误吼卿迸兴窒溅帜润兼宙害煽惠畦街敦沃生描应隙征恰谬仟肥米床腹聊靴雌一章软件测试一章软件测试11复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程白盒测试与黑盒测试白盒测试与黑盒测试测试用例的设计是软件测试的关键所在测试用例的设计是软件测试的关键所在设计尽可能少的测试用例来发现尽可能多设计尽可能少的测试用例来发现尽可能多的错误的错误设计最有可能发现软件错误的测试用例,设计最有可能发现软件错误的测试用例,同时避免使用发现
9、错误效果相同的测试用同时避免使用发现错误效果相同的测试用例例测试用例的设计方法大体可分为两类:白测试用例的设计方法大体可分为两类:白盒测试和黑盒测试,也称白箱测试和黑箱盒测试和黑盒测试,也称白箱测试和黑箱测试测试界磺娃吭阴闸点秃吨抖夸床滤投夹规匆秋台胡誊亲扫残虐腹郁佰瑟蘸辕孤一章软件测试一章软件测试12复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程白盒测试(又称为结构测试)把测试对象看作一个透明的盒子,测试人员根据程序内部的逻辑结构及有关信息设计测试用例,检查程序中所有逻辑路径是否都按预定的要求正确地工作。白盒测试主要用于对模块的测试,包括:程序模块中的所有独立
10、路径至少执行一次程序模块中的所有独立路径至少执行一次对所有逻辑判定的取值(对所有逻辑判定的取值(“真真”与与“假假”)都至少测)都至少测试一次试一次在上下边界及可操作范围内运行所有循环在上下边界及可操作范围内运行所有循环测试内部数据结构的有效性等测试内部数据结构的有效性等食再歹屁嫉溺涤婆慷摊畸业狞粉谍闭蓝允短寇犬者抗锚耪俞璃炽解钞贴掷一章软件测试一章软件测试13复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程黑盒测试(又称行为测试)把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能需
11、求。黑盒测试可用于各种测试,它试图发现以下类型的错误:不正确或遗漏的功能不正确或遗漏的功能接口错误,如输入接口错误,如输入/ /输出参数的个数、类型等输出参数的个数、类型等数据结构错误或外部信息数据结构错误或外部信息( (如外部数据库如外部数据库) )访问错误访问错误性能错误性能错误初始化和终止错误初始化和终止错误氟紧色给穴飘俺迅陋持沉戳冻惩糠者焚萌再律晋夷镍水翌寿夷癸选退扮咆一章软件测试一章软件测试14复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程内容摘要内容摘要软件测试基础软件测试基础白盒测试白盒测试黑盒测试黑盒测试测试策略测试策略面向对象测试面向对象测试测
12、试完成标准测试完成标准调试调试擦搜判暇祥散矣敲停甚受脯醚阅凰肮浊族赏肖潮淫莫简歹禽貉倘底保惹笨一章软件测试一章软件测试15复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程白盒测试白盒测试常用的白盒测试方法有:逻辑覆盖测试基本路径覆盖测试数据流测试循环测试刁秩倘襟奢巩面械您日瓶许巨趋摇蕾拦管坠潦渺值订姜费乍谍邦钞宝讶败一章软件测试一章软件测试16复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程逻辑覆盖测试逻辑覆盖测试 语句覆盖语句覆盖 判定覆盖判定覆盖 条件覆盖条件覆盖 判定条件覆判定条件覆盖盖 条件组合覆盖条件组合覆盖 路径覆盖路径覆
13、盖逻辑覆盖主要考察使用测试数据运行被逻辑覆盖主要考察使用测试数据运行被测程序时对程序逻辑的覆盖程度。通常测程序时对程序逻辑的覆盖程度。通常希望选择最少的测试用例来满足所需的希望选择最少的测试用例来满足所需的覆盖标准。主要的覆盖标准有:覆盖标准。主要的覆盖标准有:管头牟苟陌查矩屎嘉吐擦氯骨骑概权侠紫精驱恒泣愿孪瞄土宿启犊蔼善艾一章软件测试一章软件测试17复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程例:对下列子程序进行测试procedure example(y,z:real;var x:real);begin if (y1) and (z=0) then x:=x
14、/y; if (y=2) or (x1) then x:=x+1;end; 该子程序接受x、y、z的值,并将计算结果x的值返回给调用程序。与该子程序对应的流程图如下:讫祝黔猿隅陈舷谬乍臼珊凯为荆次掘淌励菏勇以瞒堑赤眩吨敝眉丘合萧城一章软件测试一章软件测试18复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程入口入口s(y1)and(z=0)a(y=2)or(x1)c返回返回ebx=x/yftdx=x+1ft看闪痴绦丁迁型圃班辅诫协脂缴菲汽楼琶歧裙嫁骏制矛汇锚恕弛垦窥负介一章软件测试一章软件测试19复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件
15、工程课程该子程序有两个判定:a: (y1) and (z=0) c: (y=2) or (x1) 判定a中有两个判定条件: y1、 z=0判定c中有两个判定条件: y=2 、“x1” 根据程序的执行流程不同,判定c中的“x1”的含义也不同。当判定a为“真”时, “x1”实际是“x/y1”,即“xy”;当判定a为“假”时, “x1”仍是“x1”。淋辱詹追铲芜筷对傻堤酝核主抓捷饱桔壤香丢投辩骨纲金件凋寅景希给匀一章软件测试一章软件测试20复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程该子程序有四条可执行路径:路径1 sabcde , 其执行条件(L1)是a为“t”且
16、c为“t”L1= (y1) and (z=0) and (y=2) or (x/y1)= (y1) and (z=0) and (y=2) or (y1) and (z=0) and (x y )= (y=2) and (z=0) or (y1) and (z=0) and (x y )seacbdtffta:(y1)and(z=0)c:(y=2)or(x1)愉介额矽播袜裂刚伺滔渐蕴芜众援屿稼乙菜烈趁炸挡酿址巾骨筹畜跋野蚌一章软件测试一章软件测试21复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程路径2 sace ,其执行条件(L2)是a为“f”且c为“f”)L2
17、 = not(y1) and (z=0) and not(y=2) or (x1)= not (y1) or not (z=0) and not (y=2) and not (x1) = not (y1) and not (y=2) and not (x1) or not (z=0) and not (y=2) and not (x1)=(y1) and (y2) and (x 1) or (z 0) and (y 2) and (x 1)seacbdtffta:(y1)and(z=0)c:(y=2)or(x1)爹撅梳酶毡傈达街惮枢楔砌模滩龙述饯詹厌泛桐鹰转望攀藉牧厂舅价纸旋一章软件测试一章软
18、件测试22复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程路径3 sacde ,其执行条件(L3)是a为“f”且c为“t”)L3 = not (y1) and (z=0) and (y=2) or (x1)= not (y1) or not (z=0) and (y=2) or (x1)= not (y1) and (y=2) or not (y1) and (x1) or not (z=0) and (y=2) or not (z=0) and (x1)= (y 1) and (y=2) or (y 1) and (x1) or (z 0) and (y=2)
19、or (z 0) and (x1)seacbdtffta:(y1)and(z=0)c:(y=2)or(x1)难骚辕吞张斟敢匀荤绳鳃俊镇心恐簧乎盼棉才挑檄烂绎鹏降薯空篡单铰陈一章软件测试一章软件测试23复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程路径4 sabce ,其执行条件(L4)是a为“t”且c为“f”)L4 = (y1) and (z=0) and not (y=2) or (x/y1)= (y1) and (z=0) and not (y=2) and not (x y)=(y1) and (z=0) and (y 2) and (x y)seacbd
20、tffta:(y1)and(z=0)c:(y=2)or(x1)承陆浊蛰斯讳豆戎坐盐龚咸凝抉泞擦惺滨灾雪轴钠胚鲤罢擦呢储威稀波脆一章软件测试一章软件测试24复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程语句覆盖 语句覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个可执行语句都至少执行一次 欲使每个语句都执行一次,只需执行路径L1(sabcde)即可。 L1= (y=2) and (z=0) or (y1) and (z=0) and (x y )测试用例如下:测试数据预期结果x=4,y=2,z=0x=3seacbdtffta:(y1)and(z=
21、0)c:(y=2)or(x1)根糟广缮电胖颇震茄邀帚汛剑而物绑起纷吾染咱哥灿侣铲琳巩滔粹境配式一章软件测试一章软件测试25复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程判定覆盖判定覆盖 判定覆盖(也称分支覆盖)是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定的所有可能结果都至少执行一次(即判定的每个分支至少经过一次) 娃奏妨臭友擦茅惦祈绎捞缮碘莽忌纬嘱扒喷躲矣叔趁注抛孺翌雍敝窍遥铺一章软件测试一章软件测试26复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程欲使每个分支都执行一次,只需执行路径L3(sacde ,a为
22、“f”且c为“t”)和L4(sabce ,a为“t”且c为“f”) 即可。 或者,执行路径L1(sabcde,a为“t”且c为“t”)和L2(sace ,a为“f”且c为“f”).seacbdtffta:(y1)and(z=0)c:(y=2)or(x1)务控叉诡莎最硝介颂逆肖疆扮魁多扬执侄着枕诫斥眩卢鬼锨娘输姆凭竟庶一章软件测试一章软件测试27复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程L3(sacde ,a为“f”且c为“t”):(y 1) and (y=2) or (y 1) and (x1) or (z 0) and (y=2) or (z 0) and
23、 (x1)L4(sabce ,a为“t”且c为“f”):(y1) and (z=0) and (y 2) and (x y)seacbdtffta:(y1)and(z=0)c:(y=2)or(x1)测试数据预期结果路径acx=1,y=2,z=1x=2sacdeftx=3,y=3,z=0x=1sabcetf籍幼摘霞你愧蛰箕还温由籍乒嚏衍搂惮裤呆番毙造垒象罩暴慕臭需编浚馏一章软件测试一章软件测试28复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程 判定覆盖将每个判定的所有可能结果都至少执行一次,所以,程序中的所有语句也必定都至少执行一次。因此,满足判定覆盖标准的测试用
24、例也一定满足语句覆盖标准。 沽宇贺优曹矫难迢蔑泻让祁毕用已汀玻僻晰嚷溯绑揍窘鲍分贡呼膝祥绦旁一章软件测试一章软件测试29复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程条件覆盖条件覆盖 条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定中的每个条件的所有可能结果都至少出现一次 钥枷州兑杆躯洁呀醋芥集昔梧汇娥刹赐洲莉狡诌娟墙奴赶森冯圭迫图臼久一章软件测试一章软件测试30复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程判定a中各种条件的所有可能结果:y1, y 1 ,z=0, z 0。判定c中各种条件的所有可能结果
25、:y=2, y 2 ,x1(或xy), x 1 (或x y) 。seacbdtffta:(y1)and(z=0)c:(y=2)or(x1)测试数据预期结果路径覆盖的条件x=1,y=2,z=0x=1.5sabcde y1, z=0, y=2,x x y yx=2,y=1,z=1x=3sacdey y 1 1,z z 0 0, y y 2 2 ,x1x1衅因坛痈锅限玄惶当倪感熬沟待单币件殖拎俊绕臃爸照祷恫这督吭上初闯一章软件测试一章软件测试31复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程 条件覆盖通常比判定覆盖强,但有时虽然每个条件的所有可能结果都出现过,但判定表
26、达式的某些可能结果并未出现。上面的二个测试用例满足了条件覆盖标准,但判定c为“假”的结果并未出现。愿眷豹八涡察辱监涸荫羽荣堰絮宾糟恒借府扭恒廊陕塑国乖惫鸡淑桌滑莉一章软件测试一章软件测试32复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程判定判定/条件覆盖条件覆盖 判定/条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定的所有可能结果都至少执行一次,并且,每个判定中的每个条件的所有可能结果都至少出现一次 显然,满足判定/条件覆盖标准的测试用例一定也满足判定覆盖、条件覆盖、语句覆盖标准。 锹捧涝颅邦前敛滞直施嗣盛炕赐栋铜辉谢须羔锚亩十商舷楷驴
27、范艘沫笼竹一章软件测试一章软件测试33复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程seacbdtffta:(y1)and(z=0)c:(y=2)or(x1)测试数据预期结果路径ac覆盖的条件x=4,y=2,z=0x=3sabcdetty1, z=0, y=2,x x y yx=1,y=1,z=1x=1saceffy y 1 1,z z 0 0, y y 2 2 ,x 11程殷踞时贮亲咽礁瘦诉羡庶矩墙花剐颠党虹穿汛段唾抗饭渺唤乘硝拈绰芋一章软件测试一章软件测试34复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程条件组合覆盖条件组合覆
28、盖 条件组合覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定中条件结果的所有可能组合都至少出现一次 显然,满足条件组合覆盖标准的测试用例一定也满足判定覆盖、条件覆盖、判定/条件覆盖、语句覆盖标准。 通虏划瞩刨炎虏圭缚储巧革轻滥沽滋蓟洼冻郑蛔烩滦字书齐贵唤盂荣唾什一章软件测试一章软件测试35复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程判定a中条件结果的所有可能组合:y1, z=0 ; y1, z 0;y 1 , z=0 ; y 1 , z 0 判定c中条件结果的所有可能组合: y=2, x1; y=2, x 1 ; y 2 , x1; y
29、2 , x 1seacbdtffta:(y1)and(z=0)c:(y=2)or(x1)壤翰临娶京廷缎鲸隧烫喜荷浊我敲会渊抄鬼顶队廉岛睹阂曾哟郎筹发学笼一章软件测试一章软件测试36复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程测试数据预期结果路径ac覆盖的条件x=4,y=2,z=0x=3sabcdetty1,z=0 y=2,xyx=1,y=2,z=1x=2sacdefty1,z 0y=2,x 1x=2,y=1,z=0x=3sacdefty 1,z=0 y 2,x1x=1,y=1,z=1x=1saceffy 1,z 0 y 2,x1seacbdtffta:(y1)
30、and(z=0)c:(y=2)or(x1)悉揣炼阳蔬桓瞳讳黄骇旅锈溯逼犬俯刺姜定栅剩捍辕它磐蜕新娜骨筷匪貉一章软件测试一章软件测试37复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程 条件组合覆盖是上述五种覆盖标准中最强的一种,然而,条件组合覆盖仍不能保证程序中所有可能的路径都被覆盖。本例中,满足条件组合覆盖标准的测试用例就没有经过sabce路径。麓导尾拼露渴迟弦吱耶狸昏征诣睡叶舞毋捌嘎砸种吱杰闰歇谦尺阅今茧慕一章软件测试一章软件测试38复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程路径覆盖路径覆盖 路径覆盖是指选择足够的测试用例,
31、使得运行这些测试用例时,被测程序的每条可能执行到的路径都至少经过一次(如果程序中包含环路,则要求每条环路至少经过一次) 景肆雪弥蚁刽袖像欠淀借奢施陷绷爆稗鸽魁弦靖供哟殉俏骇抒仲扭绥获囊一章软件测试一章软件测试39复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程本例中所有可能执行的路径有:L1 ( sabcde , a为“t”且c为“t”)= (y=2) and (z=0) or (y1) and (z=0) and (x y )L2 ( sace , a为“f”且c为“f”)=(y1) and (y2) and (x 1) or (z 0) and (y 2) a
32、nd (x 1)L3 ( sacde , a为“f”且c为“t”)= (y 1) and (y=2) or (y 1) and (x1) or (z 0) and (y=2) or (z 0) and (x1)L4 ( sabce , a为“t”且c为“f”)=(y1) and (z=0) and (y 2) and (x y)seacbdtffta:(y1)and(z=0)c:(y=2)or(x1)芦盈摹纶纶哩庞嗡官舱滁录粟郝激寡外申坚俗鞭趣呼猖欢拟消廖韶迈酮既一章软件测试一章软件测试40复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程seacbdtffta:(
33、y1)and(z=0)c:(y=2)or(x1)测试数据预期结果路径acx=4,y=2,z=0x=3sabcdettx=3,y=3,z=0x=1sabcetfx=2,y=1,z=0x=3sacdeftx=1,y=1,z=1x=1saceff亏斤渣嫡晕派旧膘殴波庞烷函典戈痒境世哦辰锄辖立荡凄疚倍羽纷晴讶疆一章软件测试一章软件测试41复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程 路径覆盖实际上考虑了程序中各种判定结果的所有可能组合,但它未必能覆盖判定中条件结果的各种可能情况。因此,它是一种比较强的覆盖标准,但不能替代条件覆盖和条件组合覆盖标准。授朝镶壕堕自稳椒镑对
34、懒蝇检蝶闪锣溶身正硫昆脊咕抽沽枉弘探铁腰平暑一章软件测试一章软件测试42复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程瘸汛滁亢烫可骄他弟这码庸众愈贩由憨诛女尝贩沙馏语脱质掀许钾雇成程一章软件测试一章软件测试43复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程逻辑表达式错误敏感的测试逻辑表达式错误敏感的测试逻辑覆盖测试依赖于程序中的逻辑条件,这些逻辑条件由逻辑表达式组成。对于一个含有n个逻辑变量,或n个关系表达式的逻辑表达式,通常需要2n个测试用例来覆盖其所有可能的条件组合。当n较大时,我们可以选择对发现逻辑表达式错误比较敏感的组合条
35、件进行测试,以较少的测试用例来发现逻辑表达式中的绝大多数错误。冀脂弦唬眉得避誉堂图仍理粤待堤极课柱禁邹层聋柿酣仇翰泼歌盈干两婴一章软件测试一章软件测试44复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程Tai提出的分支与关系运算符(branch and relational operator,BRO)测试技术能用较少的测试用例发现条件中分支与关系运算符的大多数错误。采用BRO方法的前提条件:条件中的每个布尔变量和关系运算符至多出现一次,并且无公共变量。BRO方法引入条件约束的概念,含有n个简单条件Ci的复合条件C的约束D表示为(D1,D2,Dn), Di (0in
36、)表示在Ci的输出(outcome)上的约束,它一般是某种符号。祝籽戍疏兢辊刺吨玻曰脯泞撼膊椭虹衅棕惧拉废幸悼扇宗厩口疡命煌油办一章软件测试一章软件测试45复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程对布尔表达式,约束为t或f (真、假);对关系表达式,约束为、=。符合条件C的一次执行覆盖条件约束D是指,C中出现的每个简单条件Ci在这次执行中都满足D中对应的约束Di。下面分三种情况讨论:若条件为若条件为C1:B1&B2 其中其中B1、B2为布尔变量,为布尔变量,C1的约束具有的约束具有形式(形式(D1,D2),), D1和和D2为为t或或f。则则C1可能的三种
37、约束为可能的三种约束为(t,t),(f,t),),(t,f)。对其中的每一组设计一组测。对其中的每一组设计一组测试用例。而(试用例。而(f,f)对条件)对条件C1是不敏感的。是不敏感的。蜗充糜噶乳炽饥御栖藩蛤境片蹬柳轰谩诬棍账立馅默盘忱愿忽弱掉堵李俞一章软件测试一章软件测试46复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程若条件为若条件为C2:B1&(E3=E4) 其中其中B1为布尔表达式,为布尔表达式, E3和和E4为算术为算术表达式。表达式。C2的约束形式为(的约束形式为(D1,D2),), D1为为t或或f;当;当E3=E4时时D2为为=;当;当E3 E4
38、时时D2为为 或或 。则则C2可能的约束集合为可能的约束集合为(t,=),(f,=),),(t, ),), (t, )。拿妇焊梯绥什崇耸沁猾啊伦鲤牧呜臂传钞远葛群蒲谷雅镐五抨恃暂郧兔萤一章软件测试一章软件测试47复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程若条件为若条件为C3: (E1 E2) &(E3=E4) 其中其中E1、E2、E3、E4均为算术表达式。均为算术表达式。则则C2可能的约束集合为可能的约束集合为( ,=),(=,=),), ( ,=) ,(,( , ),), ( , )。踏颤捎怕滤苗柳烬艾丹丫沉磷垢茧锤刻写抉瓦非酣祸昌鉴扣桂号珍魔技编一章软件
39、测试一章软件测试48复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程基本路径测试基本路径测试在实际问题中,一个不太复杂的程序,特别是包含在实际问题中,一个不太复杂的程序,特别是包含循环的程序,其路径数可能非常大。因此测试常常循环的程序,其路径数可能非常大。因此测试常常难以做到覆盖程序中的所有路径,为此,我们希望难以做到覆盖程序中的所有路径,为此,我们希望把测试的程序路径数压缩到一定的范围内。把测试的程序路径数压缩到一定的范围内。基本路径测试是基本路径测试是Tom McCabe提出的一种白盒测提出的一种白盒测试技术,这种方法首先根据程序或设计图画出控制试技术,这种方
40、法首先根据程序或设计图画出控制流图,并计算其区域数,然后确定一组独立的程序流图,并计算其区域数,然后确定一组独立的程序执行路径(称为基本路径),最后为每一条基本路执行路径(称为基本路径),最后为每一条基本路径设计一个测试用例。径设计一个测试用例。礁军船劝客胰雹灿母掌客坝飞狠洁爵控亭农页级圭嘴进数纽据惑癸厢引雁一章软件测试一章软件测试49复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程程序的控制流图(也称程序图)程序的控制流图(也称程序图)流图由结点和边组成,分别用圆和箭头表示。设计图中一个连续的处理框(对应于程序中的顺序语句)序列和一个判定框(对应于程序中的条件控
41、制语句)映射成流图中的一个结点,设计图中的箭头(对应于程序中的控制转向)映射成流图中的一条边。对于设计图中多个箭头的交汇点可以映射成流图中的一个结点(空结点)。待碧唬叭垮嘲构屏忱琢到沛捡锈疾娇烙绳畜绍脂塑偏甥荷且资琼陆妒附闯一章软件测试一章软件测试50复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程上述映射的前提是设计图的判定中不包含复合条件。如果设计图的判定中包含了复合条件,那么必须先将其转换成等价的简单条件设计图。123456c)对应的流图)对应的流图a)含复合条件)含复合条件的设计图的设计图a borc dx=1x=2tfy=0b)只含简单条)只含简单条件的
42、设计图件的设计图ttffx=1x=1a bc dx=2 123456y=0胯吾日糯寺傀弱凡葛留琼鉴诸判坛肋拔龟晋姐耘演匙氛袋古拥茸溜碗埃眯一章软件测试一章软件测试51复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程我们把流图中由结点和边组成的闭合部分称为一个区域(region),在计算区域数时,图的外部部分也作为一个区域。例如,右图所示的流图的区域数为3。独立路径是指程序中至少引进一个新的处理语句序列或一个新条件的任一路径,在流图中,独立路径至少包含一条在定义该路径之前未曾用到过的边。在基本路径测试时,独立路径的数目就是流图的区域数。 123456咒汁势压匿妆纵夷
43、升跨症响肄窖赣梭钥寺圈愉迭盈谷辱桌叮慑砒瞻孩部丙一章软件测试一章软件测试52复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程例如,对一个PDL程序进行基本路径测试,该程序的功能是:最多输入N个值(以-999为输入结束标志),计算位于给定范围内的那些值(称为有效输入值)的平均值,以及输入值的个数和有效值的个数。鲍晦淄沃尺叁弟扑弊膨窟贡翔潦象熟征惮碟贤秦整从霞琼滞媳敲要业部蔚一章软件测试一章软件测试53复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程valueiminimumvaluei =maximumtotal.valid加加1sum
44、=sum+valueivaluei-999total.input ntotal.valid 0average=-999i加加1total.valid加加1赋初值赋初值average=sum/total.valid10111213987123456tffttttfff绊驳氖缉笑宏突埠之妖猿拌借氦凑拦秀纸伦席捏输造韶必瑚秒柬辖渔泛追一章软件测试一章软件测试54复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程其区域数为6,我们选取独立路径如下:路径1:1-2-10-11-13路径2:1-2-10-12-13路径3:1-2-3-10-11-13路径4:1-2-3-4-5-
45、8-9-2-10-12-13路径5:1-2-3-4-5-6-8-9-2-10-12-13路径6:1-2-3-4-5-6-7-8-9-2-10-11-13为每一条独立路径设计测试用例。假设:n = 5;minimum = 0;maximum = 100。伞症奸吓踞陇慕乙掂紫晃危刊陌衰锥尤掺眼汉向旗蓟晃谅刃和职锅劝很私一章软件测试一章软件测试55复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程路径1: 1-2-10-11-13测试数据:value = 90,-999,0,0,0预期结果:Average = 90,total.input = 1,total.valid
46、= 1路径2: 1-2-10-12-13测试数据:value = -999 ,0,0,0,0预期结果:Average = -999,total.input = 0,total.valid = 0路径3: 1-2-3-10-11-13测试数据:value = -1,90,70,-1,80预期结果:Average = 80,total.input = 5,total.valid = 3潭但果诵厘褪渣太遥塘镣智脉树撰隘逗畅当何湿从脱购感欢月曳烘删艰募一章软件测试一章软件测试56复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程路径4: 1-2-3-4-5-8-9-2-10
47、-12-13测试数据:value = -1,-2,-3,-4,-999预期结果:Average = -999,total.input = 4,total.valid = 0路径5: 1-2-3-4-5-6-8-9-2-10-12-13测试数据:value = 120,110,101,-999,0预期结果:Average = -999,total.input = 3,total.valid = 0路径6: 1-2-3-4-5-6-7-8-9-2-10-11-13测试数据:value = 95,90,70,65,-999预期结果:Average = 80,total.input = 4,total
48、.valid = 4套恨役邹隙世旧竖逝涛须鬼狂哑砒饿琼寻关控刨箩擞翌测树玻瞒教孩县娥一章软件测试一章软件测试57复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程值得注意的是,某些独立路径(如例中的路径1和路径3)不能以独立的方式进行测试,此时,这些路径必须在其他的独立路径测试中被覆盖。茶驼窍台撰值皆雕住斤桓艺仅殃脚轩邻慎暇怪自争哺请计瓣嚎祈硬羔树挖一章软件测试一章软件测试58复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程数据流测试数据流测试数据流测试是根据程序中变量的定义(赋值)和引用位置来选择测试用例假定s为语句的标号(每个语句有
49、唯一的标号),x为变量名。定义: DEF(s)= x | 语句s中含有对x的定义 USE(s)= x | 语句s中含有对x的引用 当s为分支或循环语句时, DEF(s)= 设变量x在语句s中被定义,如果存在一条从语句s到语句s 的路径,并且在这条路径上不存在对x的其它定义,则称变量x在s处定义在s处仍有效。迹五缘侧翔雁槛茅饯蛮荆爽岔摆从莹芽丧灭要搅靶灭命爽拒蚂够睫双杆欠一章软件测试一章软件测试59复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程定义:定义-引用链DU 变量x的定义-引用链为x,s,s 其中s, s为语句标号, x DEF(s) USE(s) 且s处
50、定义的x 在s处仍有效数据流测试就是设计测试用例使得每个DU链至少被覆盖一次数据流测试适用于嵌套IF和多重循环程序的测试诣隐凰任堵龋氨沙讥札泛趣沉祟惰贼舞射淄朔捏漏返喊巴席刨藏殿赠坞记一章软件测试一章软件测试60复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程循环测试循环测试循环分为4种不同类型:简单循环、嵌套循环、串接循环和非结构循环。 (1) 简单循环 按照下列规则设计测试用例: 零次循环:从循环入口到出口 一次循环:检查循环初始值 二次循环:检查多次循环 m次循环: 检查多次循环 最大次数循环 比最大次数多一次的循环 比最大次数少一次的循环裸焊坯割踞陆幸疡骋
51、锈足景苔钳擎娩痞晌症瑟蝴橡电馅抓业鬃零惊磐涧管一章软件测试一章软件测试61复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程风顽勇鸳鱼立盅丙狐队夜旺萨凋掳纬桶赡挨疼峨胶啡物藏访逾硒瓣蝶袱清一章软件测试一章软件测试62复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程按照下列规则设计测试用例: 先测试最内层循环:所有外层的循环变量置为最小值,最内层按简单循环测试; 由里向外,测试上一层循环:测试时此层以外的所有外层循环的循环变量取最小值,此层以内的所有嵌套内层循环的循环变量取“典型”值,该层按简单循环测试; 重复上一条规则,直到所有各层循环
52、测试完毕;对全部各层循环同时取最小循环次数,或者同时取最大循环次数(2)嵌套循环嵌套循环址浑疫辗涸卡胀纬方恤峙护楞径早阔焚践碟制甥绰坚坝傍削广握崭堪间叫一章软件测试一章软件测试63复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程(3) 串接循环如果串接的各个循环互相独立,则可以分别用简单循环的方法进行测试;但如果第一个循环的循环变量与第二个循环控制相关,则两个循环不独立,此时,把第一个循环看作外循环,第二个循环看作内循环,然后用测试嵌套循环的办法来处理。(4) 非结构循环这一类循环应该先将其结构化,然后再测试。岛涌讹驳角埂机体填耕治游谚尊旗橱荣袱朽勘又穷络箕倪挛哪
53、妻颗门询试一章软件测试一章软件测试64复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程内容摘要内容摘要软件测试基础软件测试基础白盒测试白盒测试黑盒测试黑盒测试测试策略测试策略面向对象测试面向对象测试测试完成标准测试完成标准调试调试闻笆祈坦纲型位敲伐号衣巴讨搔岭拎翟樊丑季犊赁谭署总颜掇虑吭妄哆讶一章软件测试一章软件测试65复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程黑盒测试黑盒测试黑盒测试是依据软件的需求规约,检查程序的功能是否符合需求规约的要求。主要的黑盒测试方法有:等价类划分等价类划分边界值分析边界值分析比较测试比较测试错误猜测
54、错误猜测因果图因果图伎苦歪裕沥撑驭癌谩旷节婪闭汕服戒预漠举猴腿蓖话土九燥乡搞援杀毖咽一章软件测试一章软件测试66复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程等价类划分等价类划分由于不能穷举所有可能的输入数据来进行测试,所以只能选择少量有代表性的输入数据,来揭露尽可能多的程序错误等价类划分方法将所有可能的输入数据划分成若干个等价类,然后在每个等价类中选取一个代表性的数据作为测试用例等价类是指输入域的某个子集,该子集中的每个输入等价类是指输入域的某个子集,该子集中的每个输入数据对揭露软件中的错误都是等效的,测试等价类的数据对揭露软件中的错误都是等效的,测试等价类的
55、某个代表值就等价于对这一类其他值的测试。也就是某个代表值就等价于对这一类其他值的测试。也就是说,如果该子集中的某个输入数据能检测出某个错误,说,如果该子集中的某个输入数据能检测出某个错误,那么该子集中的其他输入数据也能检测出同样的错误;那么该子集中的其他输入数据也能检测出同样的错误;反之,如果该子集中的某个输入数据不能检测出错误,反之,如果该子集中的某个输入数据不能检测出错误,那么该子集中的其他输入数据也不能检测出错误。那么该子集中的其他输入数据也不能检测出错误。嗣麦企腕驮恩气煮屑膘承瞻央傅吱隙勤哮舔舷胜撤腔谍风剧盲匠澜辩恃赞一章软件测试一章软件测试67复旦大学计算机科学与工程系复旦大学计算机
56、科学与工程系 软件工程课程软件工程课程等价类划分方法把输入数据分为有效输入数据和无效输入数据有效输入数据指符合规格说明要求的合理的输入数据,主要用来检验程序是否实现了规格说明中的功能无效输入数据指不符合规格说明要求的不合理或非法的输入数据,主要用来检验程序是否做了规格说明以外的事在确定输入数据等价类时,常常还要分析输出数据的等价类,以便根据输出数据等价类导出输入数据等价类。西晋叮幅挠郸楞圃史岸蹋卧贺钠肖询凳绵植驯迫锅蛹箱托慈绵斟堕酥年赐一章软件测试一章软件测试68复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程等价类划分设计测试用例的步骤等价类划分设计测试用例的步
57、骤确定等价类根据软件的规格说明,对每一个输入条件(通常是规格说明中的一句话或一个短语)确定若干个有效等价类和若干个无效等价类。 可使用如下表格输入条件有效等价类 无效等价类听喳辊翘鲤始项墅想士杖仕苗牟霉孰缄棍绢灭攒拜拜樟村武挫偶纪挛壳桩一章软件测试一章软件测试69复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程确定等价类的规则: (1) 如果输入条件规定了取值范围,则可以确定一个有效等价类(输入值在此范围内)和两个无效等价类(输入值小于最小值及大于最大值)例如,规定输入的考试成绩在0.100之间,则有效等价类是“0 成绩 100”,无效等价类是“成绩 0”和“成绩
58、 100”。夫住擎屈碱澜愧琉邪茶鸣市郭酋峻卵署掳戍文惦澜慷泳臂硕降矢肺无碘染一章软件测试一章软件测试70复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程(2) 如果输入条件规定了值的个数,则可以确定一个有效等价类(输入值的个数等于规定的个数)和两个无效等价类(输入值的个数小于规定的个数和大于规定的个数)例如,规定输入构成三角形的3条边,则有效等价类是“输入边数 = 3”,无效等价类是“输入边数 3”和“输入边数 3”。觉烧坪夫类赦琶储不义级妒返职订故订障蔷侮理羞屈填跨球阳篆痛坷迹司一章软件测试一章软件测试71复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软
59、件工程课程软件工程课程(3) 如果输入条件规定了输入值的集合(即离散值),而且程序对不同的输入值做不同的处理,那么每个允许的值都确定为一个有效等价类,另外还有一个无效等价类(任意一个不允许的值)。例如,规定输入的考试成绩为优、良、中、及格、不及格,则可确定5个有效等价类和一个无效等价类。敛氖邻羚魔夹佬业铆仙拿腔畴文杖屡葱钙禄块拣介窍投景寻购效欠捷薛歇一章软件测试一章软件测试72复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程(4) 如果输入条件规定了输入值必须遵循的规则,那么可确定一个有效等价类(符合此规则)和若干个无效等价类(从各个不同的角度违反此规则)。例如,
60、在Pascal语言中对变量标识符规定为“以字母开头的串”。那么有效等价类是“以字母开头的串”,而无效等价类有“以数字开头的串”、“以标点符号开头的串”等。泅况凰蔚停崔鳖速苍伴墙雕睡械甄崭狈多搭挣累恋动辫沛羌堡募我脯捎积一章软件测试一章软件测试73复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程(5) 如果输入条件规定输入数据是整型,那么可以确定三个有效等价类(正整数、零、负整数)和一个无效等价类(非整数)。(6) 如果输入条件规定处理的对象是表格,那么可以确定一个有效等价类(表有一项或多项)和一个无效等价类(空表)。以上只是列举了一些规则,实际情况往往是千变万化的
61、,在遇到具体问题时,可参照上述规则的思想来划分等价类。绸申盛梅乾菌峪逃触食奋羹腆载阮候绞导殴匆豪索手里嗅柏药兴绍碴呆砷一章软件测试一章软件测试74复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程设计测试用例在确定了等价类之后,建立等价类表,列出所有划分出的等价类。并为每个有效等价类和无效等价类编号。 输入条件有效等价类 无效等价类倚壬锨梆之诊战集篓硒羞追舌术妇缆眺卑正比吮射迭牧减剑淬殖拿犀潍绍一章软件测试一章软件测试75复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程利用等价类设计测试用例的步骤: (1) 设计一个新的测试用例,使其尽
62、可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;(2) 为每个无效等价类设计一个新的测试用例。套担寒竿甭管盎催毒墙啄埂震首扶手拧子淹嘲损卒吕范涵质爬煽江称密画一章软件测试一章软件测试76复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程用等价类划分法设计测试用例的实例:某编译程序的规格说明中关于标识符的规定如下:标识符是由字母开头,后跟字母或数字的任意组合构成;标识符的字符数为18个;标识符必须先说明后使用;一个说明语句中至少有一个标识符;保留字不能用作变量标识符。 酸尝挥嗅盖犬劳炮适讥盏贝距广酷甩骑查汞斟蓟脯绦域峭庭几吠属授极灰一
63、章软件测试一章软件测试77复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程用等价类划分方法,建立输入等价类表:输入条件输入条件有效等价类有效等价类无效等价类无效等价类第一个字符第一个字符字母字母数字数字非字母数字字符非字母数字字符后跟的字符后跟的字符字母字母数字数字非字母数字字符非字母数字字符保留字保留字字符数字符数18个个0个个 8个个标识符的使用标识符的使用先说明后使用先说明后使用未说明已使用未说明已使用标识符个数标识符个数 1个个0个个陶亲篱狙米瓦遵民温调州途韶绰睦莱邹蜡跃蚂创沛囊苗快样琢屁泻枕省鞍一章软件测试一章软件测试78复旦大学计算机科学与工程系复旦大
64、学计算机科学与工程系 软件工程课程软件工程课程下面选取9个测试用例,它们覆盖了所有的等价类。输入数据预期结果覆盖的等价类VAR P3t2:REAL;BEGIN P3t2:=31;END;正确标识符,VAR 3P:REAL;报错:不正确标识符VAR !X:REAL;报错:不正确标识符VAR T#:CHAR;报错:不正确标识符队式睦仗钥戌场蝎疵肘猛港稻睫枯氮纺屈冶害夷边祈组骂思本梳鸡恫盎彻一章软件测试一章软件测试79复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程输入数据预期结果覆盖的等价类VAR GOTO:INTEGER;报错:保留字作标识符VAR X,:REAL;
65、报错:标识符长度为0 VAR T12345678:REAL;报错:标识符字符超长 VAR PAR:REAL;BEGIN PAP:=314 END;报错:未说明已使用 VAR :REAL;报错:标识符个数为0躲其令葫傣熏猎簿揭氛竹搀条伸拽沧缄灭汗枯歧樊迷归醉盐囱季枢坝诽榨一章软件测试一章软件测试80复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程边界值分析边界值分析边界值分析也是一种黑盒测试方法,是对等价类划分方法的补充。人们从长期的测试工作经验得知,大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部。因此针对各种边界情况设计测试用例,其揭露程序中错误
66、的可能性就更大。腋休泊钵涤壮琐蜡审挟钢藐帽纷柜陋协欢唾剃详街末社候咏熟鸦悉扼蔽鸦一章软件测试一章软件测试81复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程这里所说的边界是指,相对于输入等价类和输出等价类而言,直接在其边界上、或稍高于其边界值、或稍低于其边界值的一些特定情况。使用等价类分析方法设计测试用例时,原则上,等价类中的任一输入数据都可作为该等价类的代表用作测试用例。而边值分析则是专门挑选那些位于边界附近的值(即正好等于、或刚刚大于、或刚刚小于边界的值)作为测试用例。初涝缺昆盯臼个号派寄织窿肌菱溜谓乍蜜拴旦嘛弟僚豺伍截匪鉴虑观弯瓤一章软件测试一章软件测试82
67、复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程边界值分析方法选择测试用例的规则如下:1如果输入条件规定了值的范围,则选择刚刚达到这个范围的边界的值以及刚刚超出这个范围的边界的值作为测试输入数据。 例如,规定输入的考试成绩在0100之间,则取0,100,1,101作为测试输入数据。2如果输入条件规定了值的个数,则分别选择最大个数、最小个数、比最大个数多1、比最小个数少1的数据作为测试输入数据。 例如,规定一个运动员的参赛项目至少1项,最多3项,那么,可选择参赛项目分别是1项、3项、0项、4项的测试输入数据。也硬怜哎挫琴赢种裳烈殉占坠迈秘赊晃绰绘搞架饼椒鸽别耕拽洲官
68、赴谁朴一章软件测试一章软件测试83复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程3对每个输出条件使用第1条。 例如,输出的金额值大于等于0且小于104 ,则选择使得输出金额分别为0、9999、1、10000的输入数据作为测试数据。4对每个输出条件使用第2条。 例如,规定输出的一张发票上,至少有1行内容,至多有5行内容,则选择使得输出发票分别有1行、5行、0行、6行内容的输入数据作为测试数据。5如果程序的输入或输出是个有序集合,例如,顺序文件、表格,则应把注意力集中在有序集的第1个元素和最后一个元素上。儿计百祸间复耳甄侧肄距蚀磐瘁扭氨残亚灶问凭珊溢没仕储祸段华以觅
69、竞一章软件测试一章软件测试84复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程6如果程序中定义的内部数据结构有预定义的边界,例如,数组的上界和下界、栈的大小,则应选择使得正好达到该数据结构边界以及刚好超出该数据结构边界的输入数据作为测试数据。 例如,程序中数组A的下界是10,上界是20,则可选择使得A的下标为10、20、9、21的输入数据作为测试数据。7发挥你的智慧,找出其他可能的边界条件。 胎缔翟逊尤肠迸娟纂皑政颖搅殿侄蛀漳旗蕊东沈瘩蝎留桐妻萍姐尔奸俐贿一章软件测试一章软件测试85复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程由于
70、边值分析方法所设计的测试用例更有可能发现程序中的错误,因此经常把边值分析方法与其它设计测试用例方法结合起来使用。亥冒垒怂即原绊坯罩者冒聪握痘研炬诡酒吁连掺稽挪暂铱拾嚣血政礼萌入一章软件测试一章软件测试86复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程比较测试(比较测试(back to back)在现实中,有些软件有很高的可靠性要求,特别是那些可能危及人的生命安全的软件系统,如航空航天控制软件、核电厂控制软件等,其软件可靠性绝对重要。此时,需要冗余的硬件和软件来减少错误发生的可能性。通常,可由二支软件开发队伍,根据相同的需求规格说明分别开发二个软件版本,然后,用相
71、同的测试用例对二个版本的软件分别进行测试,比较二个版本软件的测试结果,如果测试结果相同,则可认为二个版本的软件都是正确的,如果测试结果不同,则要分析各个版本,以发现错误的所在。这种测试称为比较测试或称为背靠背测试(backtoback testing)。大多数情况下,可用自动化工具来进行比较测试。卢崔颜懂琐篓窑径愿瞅式哭瘪赊哪僳撬库诅膊丈诌压熏醛冶匀鞍吞赛孕山一章软件测试一章软件测试87复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程值得注意的是,比较测试并不能保证软件没有错误,如果规格说明本身有错,那么所有的版本都可能反映这种错误。另外,如果各个版本产生相同的但
72、都不正确的结果,那么比较测试也无法发现这种错误。革萌蛇躬孵斩藉须耙比囊摊炼钟法簧羞隆稳铭议注秒选身峙麓嗅戳着提垣一章软件测试一章软件测试88复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程错误推测法错误推测法错误猜测是一种凭直觉和经验推测某些可能存在的错误,从而针对这些可能存在的错误设计测试用例的方法。这种方法没有机械的执行步骤,主要依靠直觉和经验。错误猜测法的基本思想是:列举出程序中所有可能的错误和容易发生错误的特殊情况,然后根据这些猜测设计测试用例。妊类喉辟豹棋赔兽窥阅掉重议尤璃贡因奎警皖狭铰失等世扮嫌揍蓬邢遮洱一章软件测试一章软件测试89复旦大学计算机科学与
73、工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程例如,测试一个排序子程序,可考虑如下情况:输入表为空;输入表为空;输入表只有一个元素;输入表只有一个元素;输入表的所有元素都相同;输入表的所有元素都相同;输入表已排序。输入表已排序。又如,测试二分法检索子程序,可考虑如下情况:表中只有一个元素;表中只有一个元素;表长为表长为2n;表长为表长为2n-1;表长为表长为2n+1衙亦尖环辅顷期针商酮毕靠舆劣椒颖仿幕匪袋遍陪殖而樱彝咬樟滓宪虹育一章软件测试一章软件测试90复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程因果图因果图在等价类划分方法和边界值方法中未考虑输
74、入条件的各种组合,当输入条件比较多时,输入条件组合的数目会相当大因果图方法是一种帮助人们系统地选择一组高效测试用例的方法,它既考虑了输入条件的组合关系,又考虑了输出条件对输入条件的依赖关系,即因果关系,其测试用例发现错误的效率比较高。非瘸侈遣娟不轴锯孟煽厩极怜驾释私以挠驱逊类川稗考法甸匙汝诚矽晋捏一章软件测试一章软件测试91复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程因果图方法的特点是:考虑输入条件的组合关系;考虑输入条件的组合关系;考虑输出条件对输入条件的依赖关系,考虑输出条件对输入条件的依赖关系,即因果关系;即因果关系;测试用例发现错误的效率高;测试用例发
75、现错误的效率高;能检查出功能说明中的某些不一致或遗能检查出功能说明中的某些不一致或遗漏。漏。崇廊讹囱是逾环撮息仑谨讣斟联铬犹陡追果绰踪瘁琐民傀犊镊虐奴檬俊艰一章软件测试一章软件测试92复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程用因果图设计测试用例的步骤:(1) 分割功能说明书 将输入条件分成若干组,然后分别对每个组使用因果图,这样可减少输入条件组合的数目。如测试编译程序时,可以将每个语句作为一组。纳钮柜捻元肉醒龋关痰椭指田坍绵蛀铰陡渴扔铝疗拣荆盟鸽绩柄潞角蹬蕉一章软件测试一章软件测试93复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工
76、程课程 (2) 识别“原因”和“结果”,并加以编号 “原因”是指输入条件或输入条件的等价类;“结果”是指输出条件或系统变换。如,更新主文件就是一种系统变换。 每个原因和结果都对应于因果图中的一个结点,当原因或结果成立(或出现)时,相应的结点的值为1,否则为0。递舅久伸直团抵竹绵桑卤矢嫉汐车咯俺恨脉谁信熏杰恤嘉胀途嘻赚淡且嚏一章软件测试一章软件测试94复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程(3) 根据功能说明中规定的原因与结果之间的关系画出因果图 因果图的基本符号如下:ba恒等恒等ba非非 abcd或或abcd 与与限岿技恐紫辅接葬吏腺击结良柿嫌呕狮结贵牵
77、陈碌脆仁甘歪瞳买笺芒去纤一章软件测试一章软件测试95复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程图中左边的结点表示原因,右边的结点表示结果原因和结果之间的关系有:恒等:若恒等:若a=1,则,则b=1;若;若a=0,则,则b=0非:若非:若a=1,则,则b=0;若;若a=0,则,则b=1或:若或:若a=1或或b=1 或或c=1 ,则,则d=1;否则;否则d=0与:若与:若a=b=c=1 ,则,则d=1;否则;否则d=0画因果图时原因在左,结果在右,由上向下排列,并根据功能说明中规定的原因和结果之间的关系,用上述符号连接起来。必要时还可以引入一些中间结点。著拦付烈
78、艰镍镰氰识盗旭耪韧疽空昆脾翰好哈壮奎扔帘靛脚运色筐慑吟剁一章软件测试一章软件测试96复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程(4) 根据功能说明在因果图中加上约束条件 因果图的约束条件如下图所示:要求要求RbabaM屏蔽屏蔽互斥互斥abcE包含包含abcI唯一唯一abcO咎旧悠媒赚举米炸背枯涪惮经腥绦掸槽券贰兼工离长伸诱宿男帕椒叉千俏一章软件测试一章软件测试97复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程图中互斥、包含、唯一、要求是对原因的约束,屏蔽是对结果的约束互斥:表示互斥:表示a、b、c中至多只有一个为中至多只有一个
79、为1,即不,即不同时为同时为1包含:表示包含:表示a、b、c中至少有一个为中至少有一个为1,即不同,即不同时为时为0唯一:表示唯一:表示a、b、c中有且仅有一个中有且仅有一个1要求:表示若要求:表示若a=1 ,则要求,则要求b必须为必须为1,即不可,即不可出现出现a=1 且且b=0屏蔽:表示若屏蔽:表示若a=1 ,则,则b必须为必须为0,即不可出现,即不可出现a=1 且且b=1坠岂朱预愚辣攘翱摹陌形圃彻轩照栋瞒享藐血兽悟疵威稿关湃市汀毋做忱一章软件测试一章软件测试98复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程(5) 根据因果图画出判定表 列出满足约束条件的所
80、有原因组合,写出每种原因组合下的结果(如有的话)原原因因允许的原因组合允许的原因组合中间中间结点结点各种原因组合下中间结点的值各种原因组合下中间结点的值结结果果各种原因组合下的结果值各种原因组合下的结果值(6)为判定表的每一列设计一个测试用例为判定表的每一列设计一个测试用例姆题糯唁渡陌提龄念偷颊龋杭澄艾瘁粕掘胜痢右垃韵悉痞矾贵谤柔凉绰胎一章软件测试一章软件测试99复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程 例如,有一个处理单价为5角钱的饮料自动售货机软件,其规格说明如下: 饮料自动售货机允许投入5角或1元的硬币,用户可通过“橙汁”和“啤酒”按钮选择饮料,售货
81、机还装有一个表示“零钱找完”的指示灯,当售货机中有零钱找时指示灯暗,当售货机中无零钱找时指示灯亮。当用户投入5角硬币并押下“橙汁”或“啤酒”按钮后,售货机送出“橙汁”或“啤酒” 。当用户投入1元硬币并押下“橙汁”或“啤酒”按钮后,如果售货机有零钱找,则送出相应的饮料,并退还5角硬币;如果售货机没有零钱找,则饮料不送出,并且退还1元硬币。碱燃阶参垮诫敌寸磨扎整锣廊狐遣右心些酉听走涡频汐漆桅凌沉均姻缉映一章软件测试一章软件测试100复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程(1)分析规格说明,列出原因和结果规格说明中的红色部分是输入条件(原因),蓝色部分是输出条
82、件(结果)。 由于“售货机有零钱找”是在投入1元硬币时判断是否能找零钱的依据,所以也可把它看作是一个输入条件,即原因。与之对应的结果是售货机指示灯亮(或暗)。 原因 结果(1)售货机有零钱找(21)售货机“零钱找完”灯亮(2)投入1元硬币(22)退还1元硬币(3)投入5角硬币(23)退还5角硬币(4)押下“橙汁”按钮(24)送出“橙汁”饮料(5)押下“啤酒”按钮(25)送出“啤酒”饮料鸯族耍摇进址氟闯犬丽溜肠惶往伸述凶淑梗涝戌绦旭肚朽槐它巍跳梅圾恳一章软件测试一章软件测试101复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程(2) 画出因果图。所有原因结点列在左边
83、,所有结果结点列在右边。 其中中间结点的含义如下: (11)投入1元硬币且押下饮料按钮 (12)押下“橙汁”或“啤酒”按钮 (13)应找5角硬币且售货机有零钱找 (14)钱已付清 亥邻幻重婉翅醋喝豢代奈桂羞苯疟呼静硅猎此题令舀赢失整腥瓣凶雄竭苍一章软件测试一章软件测试102复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程(3) 由于原因 2 与 3 ,4 与 5 不能同时发生,分别加上约束条件E。(4) 根据因果图画出判定表(5) 根据判定表设计测试用例却槛较足膏侯逼皱熙商够锄诽振拖搐甚高吸斜吵苇侗吻颧沂必伎德腕飘般一章软件测试一章软件测试103复旦大学计算机科学
84、与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程拼翻肪蛛程骏批稀桃灌舌哎囚徘锅萨伐汽鬃辜处街泛喜清叮涌掺樊平卧瓢一章软件测试一章软件测试104复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程内容摘要内容摘要软件测试基础软件测试基础白盒测试白盒测试黑盒测试黑盒测试测试策略测试策略面向对象测试面向对象测试测试完成标准测试完成标准调试调试董降此痪往冈月咸造抽煮奈抽斡独缎茫弥允鸵垦训瘤模喂陈铅禄锐道绥镀一章软件测试一章软件测试105复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程测试策略测试策略一种测试策略就是将测试分为单元测试、
85、集成测试、确认测试和系统测试。单元测试是针对程序中的模块或构件,主要揭露编码阶段产生的错误。集成测试针对集成的软件系统,主要揭露设计阶段产生的错误。确认测试是根据软件需求规约对集成的软件进行确认,主要揭露不符合需求规约的错误。对于基于计算机系统中的软件,还需将它集成到基于计算机系统中,并进行系统测试,以揭露不符合系统工程中对软件要求的错误。阉椅宽癌贱曝妓医陈研钨彬纵勿缠闹貌玩谰虚抬贴瓮歧桓溉胎糠俐免北泵一章软件测试一章软件测试106复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程V模型:描述软件开发各阶段与测试策略之间的对应关系。系统工程系统工程需求分析需求分析设
86、计设计编码编码系统测试系统测试确认测试确认测试集成测试集成测试单元测试单元测试窿抄太娱脓嗅营葱矗旗酞宜舷忌蝎逃甭瞄可北旧逸广揪育洽榷衫递降咸丈一章软件测试一章软件测试107复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程Tom Gilb指出实现一个成功的软件测试策略必须涉及如下问题:在着手开始测试之前的较长时间,就要以量化的在着手开始测试之前的较长时间,就要以量化的形式确定产品的需求。形式确定产品的需求。显式地陈述测试目标。显式地陈述测试目标。了解软件的用户并为每一类用户建立剖面了解软件的用户并为每一类用户建立剖面(profile)图)图建立一个强调建立一个强调“
87、快速循环(快速循环(rapid cycle)测试)测试”的测试计划。的测试计划。构造构造“健壮健壮”的软件,它被设计成可测试自身。的软件,它被设计成可测试自身。使用有效的正式技术评审作为测试之前的过滤器。使用有效的正式技术评审作为测试之前的过滤器。使用正式技术评审来评估测试策略和测试用例本使用正式技术评审来评估测试策略和测试用例本身。身。为测试过程建立一种持续改进的方法。为测试过程建立一种持续改进的方法。焦室壤滇茁良勾辅怠棚陪造贪慑愁旷檬箭诧陶音备厦戴凉碴垣虞攫惺唐缺一章软件测试一章软件测试108复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程单元测试单元测试 (
88、Unit Testing)单元测试又称模块测试,它着重对软件设计单元测试又称模块测试,它着重对软件设计的最小单元(软件构件或模块)进行验证的最小单元(软件构件或模块)进行验证单元测试根据设计描述,对重要的控制路径单元测试根据设计描述,对重要的控制路径进行测试,以发现构件或模块内部的错误进行测试,以发现构件或模块内部的错误单元测试通常采用白盒测试,并且多个构件单元测试通常采用白盒测试,并且多个构件或模块可以并行进行测试或模块可以并行进行测试这里将构件或模块统一称为模块这里将构件或模块统一称为模块滓须远苯箭综兽袄便活挖置胚纱肮宜获憾瓶暗硅鸣蹈肘形傀搓烂巧悍琼护一章软件测试一章软件测试109复旦大学
89、计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程1. 单元测试的内容模块接口:确保模块的输入/输出参数信息是正确的。这些信息包括参数的个数、次序、类型等。局部数据结构:确保临时存储的数据在算法执行的整个过程中都能维持其完整性。如不合适的类型说明、不同数据类型的比较或赋值、文件打开和关闭的遗漏、超越数据结构的边界等。边界条件:确保程序单元在极限或严格的情况下仍能正确地执行。涤卷侩箱栓驱担辜锁恳荫较瘤森查热率匈爷迹锑激肥刚符培灵逗敷客掇肾一章软件测试一章软件测试110复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程所有独立路径:确保模块中的所有语
90、句都至少执行一次。程序执行的路径实际上体现了计算的过程,计算中常见的错误有:不正确的操作优先级、不同类型数据间的操作、不正确的初始化、不精确的精度、不正确的循环中止、不适当地修改循环变量、发散的迭代等。所有错误处理路径:单元测试应该对所有的错误处理路径进行测试。错误处理部分潜在的错误有:报错信息没有提供足够的信息来帮助确定错误的性质及其发生的位置、报错信息与真正的错误不一致、错误条件在错误处理之前就已引起系统异常、异常条件处理不正确等。掳拟篙涝嚷胁平件栓斋郭邹河俐勿姚迸疲砸皆毗钵铸挑婆惜桃搜奉拎谷祥一章软件测试一章软件测试111复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程
91、软件工程课程2. 单元测试过程单元测试通常与编码工作结合起来进行。模块本身不是一个独立的程序,在测试模块时,必须为每个被测模块开发一个驱动(driver)程序和若干个桩(stub)模块。驱动程序驱动程序被测模块被测模块桩模块桩模块桩模块桩模块描栋秃舶团欠遇图岩聊搽较苔血尺棘富浅杏都价嚼质晒钞雁着题肋锣咙畅一章软件测试一章软件测试112复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程驱动模块接收测试数据,调用被测模块,把测试数据传送给被测模块,被测模块执行后,驱动模块接收被测模块的返回数据,并打印相关结果。驱动程序的程序结构如下:数据说明;初始化;输入测试数据;调用
92、被测模块;输出测试结果; 停止菜辟接录经彩垄藕磷谤汹惦启席澄伊欧盒愧赵苏津净蛊床桂之核椒笔尉隔一章软件测试一章软件测试113复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程桩模块的功能是替代被被测模块调用的模块,它接受被测模块的调用,验证入口信息,把控制连同模拟结果返回给被测模块。桩模块的程序结构如下:数据说明;初始化;输出提示信息(表示进入了哪个桩模块);验证调用参数;打印验证结果;将模拟结果送回被测程序; 返回恒佣亭仪商汗汗粱誓濒梗科诸钒淄下剿容俊狮筋沸尧乏翔闻痪煞较壶意廉一章软件测试一章软件测试114复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件
93、工程课程软件工程课程集成测试(集成测试(Integrated Testing)集成测试 也称组装测试、联合测试经单元测试后,每个模块都能独立工作,但把它们放在一起往往不能正常工作。琐皂熟赃铁迫羊您色慷推玻忻剪湾杠骏腰绰俐耀世蔚捞纸荤即阑洋谆芒札一章软件测试一章软件测试115复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程主要问题在于:数据可能在通过接口时丢失;数据可能在通过接口时丢失;一个模块可能对另一个模块产生产生非一个模块可能对另一个模块产生产生非故意的、有害的影响(即副作用);故意的、有害的影响(即副作用);当子功能被组合起来时,可能不能达到当子功能被组合起
94、来时,可能不能达到期望的主功能;期望的主功能;单个模块可以接受的不精确性(如误差)单个模块可以接受的不精确性(如误差),连接起来后可能会扩大到无法接受的,连接起来后可能会扩大到无法接受的程度;程度;全局数据结构可能会存在问题。全局数据结构可能会存在问题。网标闭鸦膛聚替嘿逐允撂疾稍捣惊娘丰阮奋寥隆兵鸯篇绕捷赐殴瑞段蕾再一章软件测试一章软件测试116复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程集成的方式有两种:非增量式集成:使用非增量式集成:使用“一步到位一步到位”的方法来构的方法来构造程序。先将所有经过单元测试的模块组合在造程序。先将所有经过单元测试的模块组合在
95、一起,然后对整个程序(作为一个整体)进行一起,然后对整个程序(作为一个整体)进行测试。这种测试在发现错误时,很难为错误定测试。这种测试在发现错误时,很难为错误定位。改正错误时容易引入新的错误,新旧错误位。改正错误时容易引入新的错误,新旧错误混在一起,更难定位。混在一起,更难定位。 增量式集成:根据程序结构图,按某种次序挑增量式集成:根据程序结构图,按某种次序挑选一个(或一组)尚未测试过的模块,把它集选一个(或一组)尚未测试过的模块,把它集成到已测试好的模块中一起进行测试,每次增成到已测试好的模块中一起进行测试,每次增加一个(或一组)模块,直至所有模块全部集加一个(或一组)模块,直至所有模块全部
96、集成到程序中。在增量集成测试过程中发现的错成到程序中。在增量集成测试过程中发现的错误,往往与新加入的模块有关。误,往往与新加入的模块有关。右沥凳揽老兹琅筋驻牲务弯读噶鸣醉呈本疽织注冠茅讯目媚柱眩箱雨恭淹一章软件测试一章软件测试117复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程增量式集成又可分为自顶向下集成和自底向上集成。自顶向下集成:从主控模块(主程自顶向下集成:从主控模块(主程序)开始,然后按照程序结构图的序)开始,然后按照程序结构图的控制层次,将直接或间接从属于主控制层次,将直接或间接从属于主控模块的模块按深度优先或广度优控模块的模块按深度优先或广度优先的
97、方式逐个集成到整个结构中,先的方式逐个集成到整个结构中,并对其进行测试。并对其进行测试。 自顶向下集成在测试一个模块时,自顶向下集成在测试一个模块时,它的上层模块(已测试过)可用作它的上层模块(已测试过)可用作它的驱动模块。它的驱动模块。矛君剑峦餐足涩甫宁询鳞赢洽霓刹睁风茨婉油遥枷知苦妙欢贯斌沟烤撵洋一章软件测试一章软件测试118复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程深度优先测试次序: M1、M2、M5、M8、M6、M3、M7、M4广度优先测试次序: M1、M2、M3、M4、M5、M6、M7、M8M2M3M4M7M1M6M5M8浓启嘴睫疵簧计废绅额遭讼谈
98、敌轮支飞阵叛溯密雕抠祁滨诉伞嘴捆剁祟酚一章软件测试一章软件测试119复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程 自顶向下集成的步骤:(1)主控模块(主程序)被直接用作驱动程序,所)主控模块(主程序)被直接用作驱动程序,所有直接从属于主控模块的模块用桩模块替换,有直接从属于主控模块的模块用桩模块替换,然后对主控模块进行测试;然后对主控模块进行测试;(2)根据集成的实现方式(深度优先或广度优先),)根据集成的实现方式(深度优先或广度优先),下层的桩模块一次一个地替换成真正的模块,下层的桩模块一次一个地替换成真正的模块,从属于该模块的模块用桩模块替换,然后对其从属
99、于该模块的模块用桩模块替换,然后对其进行测试;进行测试;(3)用回归测试来保证没有引入新的错误;)用回归测试来保证没有引入新的错误;(4)重复第()重复第(2)和第()和第(3)步,直至所有模块都被)步,直至所有模块都被集成。集成。赖跪戮肢堆胶祈船示轮壹啦漏挛进诌磷卤俱惧兆铆抒回芝衬聚诗悉烂淹畏一章软件测试一章软件测试120复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程 自顶向下集成的优点: 不需要驱动模块;能尽早对程序的主要控制和决策机制进行检验,能较早发现整体性的错误;深度优先的自顶向下集成能较早对某些完整的程序功能进行验证。 自顶向下集成的缺点: 测试时低
100、层模块用桩模块替代,不能反映真实情况;重要数据不能及时回送到上层模块。七妖绝望甄杉霞溺畜慕阎柬粤究弧犹泄啤蛹梗极临茁夹胚汽痔傀劲并迫所一章软件测试一章软件测试121复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程自底向上集成:从程序结构的最底自底向上集成:从程序结构的最底层模块(即原子模块)开始,然后层模块(即原子模块)开始,然后按照程序结构图的控制层次将上层按照程序结构图的控制层次将上层模块集成到整个结构中,并对其进模块集成到整个结构中,并对其进行测试。行测试。 自底向上集成在测试一个模块时,自底向上集成在测试一个模块时,它的下层模块(已测试过)可用作它的下层模
101、块(已测试过)可用作它的桩模块。它的桩模块。冶糜托已氏租点言彬雄流牧抑沈傅卖料皖娱微膝妓罗逸芬邹圈涅十拾摇皇一章软件测试一章软件测试122复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程 自底向上集成的步骤:(1)将低层模块组合成能实现软件特定功能的簇;(2)为每个簇编写驱动程序,并对簇进行测试;(3)移走驱动程序,用簇的直接上层模块替换驱动程序,然后沿着程序结构的层次向上组合新的簇;(4)凡对新的簇测试后,都要进行回归测试,以保证没有引入新的错误;(5)重复第(2)步至第(4)步,直至所有的模块都被集成。鲍驾帧使搓哑去拥烃蒜龟耗诅电蹿峨悟缆镜吮忆秋公桔核买钾腹痒
102、杀姻断一章软件测试一章软件测试123复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程McMaMb簇簇1簇簇2簇簇3D1D3D2驱动模块驱动模块簇簇4簇簇5桑社妊椅枷蜒肥遏乱幂都掳拾纳窍贱譬赋仑版躯蓬吴财舞汤列嚼仆程吧灶一章软件测试一章软件测试124复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程 自底向上集成的优点: 不需要桩模块,所以容易组织测试;将整个程序结构分解成若干个簇,对同一层次的簇可并行进行测试,可提高效率。 自底向上集成的缺点: 整体性的错误发现得较晚。敷摘国荔逆渤无利倡薯晓纽悟伞挠桶蹭沈望俄斤嗅庐泅搏觉为辈爵矫记魁一章
103、软件测试一章软件测试125复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程策略的选择自顶向下集成测试与自底向上集成测试各有优自顶向下集成测试与自底向上集成测试各有优缺点,其中一种策略的优点差不多就是另一种缺点,其中一种策略的优点差不多就是另一种策略的缺点。将这两种策略组合起来可能是一策略的缺点。将这两种策略组合起来可能是一种最好的折衷,这种折衷的策略是:在程序结种最好的折衷,这种折衷的策略是:在程序结构的高层使用自顶下向策略,而在低层则使用构的高层使用自顶下向策略,而在低层则使用自底向上策略,这种测试策略也称为三明治测自底向上策略,这种测试策略也称为三明治测试(试
104、(sandwich testing)。)。集成测试时应特别关注关键模块(集成测试时应特别关注关键模块(critical module)的测试。关键模块是指具有下列一个)的测试。关键模块是指具有下列一个或多个特征的模块:或多个特征的模块:1)与多个软件需求有关;)与多个软件需求有关;2)含有高层控制(位于程序结构的高层);)含有高层控制(位于程序结构的高层);3)本身是复杂的或是容易出错的;)本身是复杂的或是容易出错的;4)含有确)含有确定的性能需求。关键模块应尽早测试,回归测定的性能需求。关键模块应尽早测试,回归测试时也应集中在关键模块的功能上。试时也应集中在关键模块的功能上。棒丹霸腑震满佛融
105、诲峙讹窥颂鸟褥螟骂酥坝孕臃主嫂把诲藏漫邪帽居甭漠一章软件测试一章软件测试126复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程回归测试(回归测试(Regression Testing)在集成测试过程中,每当增加一个(或一组)新在集成测试过程中,每当增加一个(或一组)新模块时,原先已集成的软件就发生了改变。新的模块时,原先已集成的软件就发生了改变。新的数据流路径被建立,新的数据流路径被建立,新的I/O操作可能出现,还操作可能出现,还可能激活新的控制逻辑,这些改变可能使原本正可能激活新的控制逻辑,这些改变可能使原本正常的功能产生错误。常的功能产生错误。当测试时发现错误
106、后,需修改程序;或者在软件当测试时发现错误后,需修改程序;或者在软件维护时也需修改程序。这些对程序的修改也可能维护时也需修改程序。这些对程序的修改也可能使原本正常的功能产生错误。使原本正常的功能产生错误。回归测试就是对已经进行过的测试的子集的重新回归测试就是对已经进行过的测试的子集的重新执行,以确保对程序的改变和修改,没有传播非执行,以确保对程序的改变和修改,没有传播非故意的副作用。故意的副作用。居寐叮辱兴螟油钾隆启王绿把愁访掠晚篇禽竟稻息捏弧议常馅浪玻捷臻撬一章软件测试一章软件测试127复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程回归测试集(已经过测试的子集
107、)包括三种不同类型的测试用例:能测试软件所有功能的代表性测试用例能测试软件所有功能的代表性测试用例专门针对可能会被修改影响的软件功能专门针对可能会被修改影响的软件功能的附加测试的附加测试注重于修改过的软件模块的测试注重于修改过的软件模块的测试柞辅远组示吻此之龚智皇同揩敝笺悸涂闭蚀窜魏课摇节渤莉斜队法穗飞涅一章软件测试一章软件测试128复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程确认测试(确认测试(Validation Testing)确认测试标准 确认测试以软件需求规约为依据,以发现软件与需求不一致的错误。主要检查软件是否实现了规约规定的全部功能要求,文档资料
108、是否完整、正确、合理,其他的需求,如可移植性、可维护性、兼容性、错误恢复能力等是否满足。啄孰狼拢卓桑埠号先墨凰浦缎矩木亮问盟接皋团犹怒螟薪伴云稍耀肾斌倪一章软件测试一章软件测试129复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程 确认测试的结果可分为两类:满足需求规约要求的功能或性能特满足需求规约要求的功能或性能特性,用户可以接受。性,用户可以接受。 发现与需求规约有偏差,此时需列发现与需求规约有偏差,此时需列出问题清单。出问题清单。约痕享哺葛决譬堡吧味监烂哮嵌约闰佣品荫怠圭僻版卒池盂澈径阴佯割进一章软件测试一章软件测试130复旦大学计算机科学与工程系复旦大学计
109、算机科学与工程系 软件工程课程软件工程课程软件配置评审软件配置评审也称软件审计(audit),其目的是保证软件配置的所有成分都齐全,各方面的质量都符合要求,具有维护阶段必需的细节,而且已经编排好分类目录。软件配置主要包括计算机程序(源代码和可执行程序),针对开发者和用户的各类文档,包含在程序内部或程序外部的数据。剐袄抨栋婚滓戳渐诊毒例乌依军凹先累蜒剔辜铃嚼混匆齐阅胜墓颓鲁啦谍一章软件测试一章软件测试131复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程测试和测试如果软件是为一个客户开发的,那么,最后由客户进行验收测试(acceptance test),以使客户确认
110、该软件是他所需要的。如果软件是给许多客户使用的(如市场上销售的各种软件),那么让每个客户做验收测试是不现实的。大多数软件厂商都使用一种称为测试和测试的过程,来发现那些似乎只有最终用户才能发现的错误。终断念技闰余缮鸡葛婪咳兔粗慰筏曳锹炬邵颁纶雾娥染称种熙钦须岿病持一章软件测试一章软件测试132复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程测试是由一个用户在开发者的场所进行的,软件在开发者对用户的“指导下”进行测试。经测试后的软件称为版软件。测试是由软件的最终用户在一个或多个用户场所进行的,与测试不同,开发者通常不在测试现场,因此,测试是软件在一个开发者不能控制的环
111、境中的“活的”应用,用户记录所有在测试中遇到的(真正的或想象的)问题,并定期把这些问题报告给开发者,在接到测试的问题报告后,开发者对软件进行最后的修改,然后着手准备向所有的用户发布最终的软件产品。踪郴沧蕾砚侮戍腹账闺步冕戊振恭侍牟醒瘟剐琢挺淀域黔鬃谓尼肚暮收胯一章软件测试一章软件测试133复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程系统测试(系统测试(System Testing)系统测试是对整个基于计算机的系统进行的一系列测试。系统测试的种类很多,每种测试都有不同的目的,它们从不同的角度测试计算机系统是否被正常地集成,并完成相应的功能。常用的系统测试包括:恢
112、复测试恢复测试(recovery testing)安全测试安全测试(security testing)压力测试压力测试(stress testing)性能测试性能测试(performance testing)本禾粹内稿镶迫弃驭哗播舜谁玖腰焉作邦粕误膳坤念村抑矩换塔去淆蒋隙一章软件测试一章软件测试134复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程恢复测试(恢复测试(recovery testing)恢复测试是通过各种手段,强制软件发生故障,然后来验证系统能否在指定的时间间隔内恢复正常,包括修正错误并重新启动系统。如果恢复是由系统自身来完成的,那么,需验证重新初始
113、化、检查点机制、数据恢复和重启动等的正确性。如果恢复需要人工干预,那么要估算平均修复时间MTTR(mean time to repair)是否在用户可以接受的范围内。用特厘客计箩赊恬佰霉雀躲唬感砷盼潜懂从辑遏惑小晋进揍室溶羹寄捏杏一章软件测试一章软件测试135复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程安全测试(安全测试(security testing)安全测试用来验证集成在系统中的保护机制能否实际保护系统不受非法侵入。在安全测试过程中,测试者扮演一个试图攻击系统的角色,采用各种方式攻击系统。例如,截取或码译密码;借助特殊软件攻击系统;“制服”系统,使他人无
114、法访问;故意导致系统失效,企图在系统恢复之机侵入系统;通过浏览非保密数据,从中找出进入系统的钥匙等等。一般来说,只要有足够的时间和资源,好的完全测试一定能最终侵入系统。系统设计者的任务是把系统设计成:攻破系统所付出的代价大于攻破系统后得到信息的价值。引惩恼屯济冲只踊烁朵享楔埔窄根燃茬梆则码沸兰留束矗撕太违盯渣融郝一章软件测试一章软件测试136复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程压力测试(压力测试(stress testing)压力测试也称强度测试,它是在一种需要非正常数量、频率或容量的方式下执行系统,其目的是检查系统对非正常情况的承受程度。例如:当系统
115、的中断频率是每秒当系统的中断频率是每秒1或或2个时,执行每秒个时,执行每秒10个中断的测试用例个中断的测试用例将输入数据的数量提高一个数量级来测试输入将输入数据的数量提高一个数量级来测试输入功能如何响应功能如何响应执行需要最大内存或其它资源的测试用例执行需要最大内存或其它资源的测试用例执行可能导致大量磁盘驻留数据的测试用例执行可能导致大量磁盘驻留数据的测试用例坞蚀亥卷厦幕恳蛇摇俺沽弃做缩胀坟害泡顾师鼠铝峭售扛促铅辞搞妇就铱一章软件测试一章软件测试137复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程性能测试(性能测试(performance testing)性能测
116、试用来测试软件在集成的系统中的运行性能。它对实时系统和嵌入式系统尤为重要。性能测试可以发生在测试过程的所有步骤中单元测试时,主要测试一个独立模块的性能,单元测试时,主要测试一个独立模块的性能,如算法的执行速度。如算法的执行速度。软件集成后,进行软件整体的性能测试。软件集成后,进行软件整体的性能测试。计算机系统集成后,进行整个计算机系统的性计算机系统集成后,进行整个计算机系统的性能测试。能测试。性能测试常常需要与压力测试结合起来进行,而且常常需要一些硬件和软件测试设备,以监测系统的运行情况。辐崩座燎禁怕拥疽姬拟局俺宅酪沽滩爱哆量膳秀痕溺毗结凹职众诊框砌丁一章软件测试一章软件测试138复旦大学计算
117、机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程内容摘要内容摘要软件测试基础软件测试基础白盒测试白盒测试黑盒测试黑盒测试测试策略测试策略面向对象测试面向对象测试测试完成标准测试完成标准调试调试香掺掖扑苍渴簿北烘硝闺允瞥芝记衍旧铃役墩僳激盛菇喧阐趾叠馅监阂递一章软件测试一章软件测试139复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程面向对象测试面向对象测试面向对象软件的测试目标仍然是用最少时间和工作量来发现尽可能多的错误但面向对象软件的性质改变了测试的策略和测试战术。面向对象软件的测试也给软件工程师带来新的挑战。孤藉层除镰愚寄什侨吩饺葛吩挖砧婿鸥
118、勘漓哲龋绎唤辉冻划疼暑迪蒲滞侧一章软件测试一章软件测试140复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程面向对象语境对测试的影响面向对象语境对测试的影响继承、封装、多态性、基于消息的通信等概念都是面向对象软件的重要特征,它们对面向对象测试有很大的影响。单元 适用于面向对象测试的两种单元定义单元是可以编译和执行的最小软件部件单元是可以编译和执行的最小软件部件单元是决不会指派给多个设计人员开发的软件部单元是决不会指派给多个设计人员开发的软件部件件类是面向对象软件中的单元类是面向对象软件中的单元键处跋详迷战婆乞共洛绵扶窃宾谷虱妆目贩胚老时事烘蔗宏翱奋洗滤买脓一章软件
119、测试一章软件测试141复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程封装 由于属性和操作被封装在类中,因此测试时很难获得对象的某些具体信息(除非提供内置操作来报告这些信息),从而给测试带来困难。继承 测试了父类的操作后,并不表示其子类就不必对继承的操作进行测试。多态性 在测试时,应覆盖反映多态的所有实现方法。基于消息的通信 面向对象软件是通过消息通信来实现类之间的协作,它们没有明显的层次控制结构,因此,传统的自顶向下和自底向上集成策略不适用于面向对象软件测试。禹侥叶恕申箭阿苟唤种刁崔罪劈惟冈重获濒毅赘刀按乳址懂欲浴锑魁算乖一章软件测试一章软件测试142复旦大学计
120、算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程面向对象的测试策略把类作为面向对象软件的单元,传统的单元测试等价于面向对象中的类测试,也称类内测试。它包括类内的方法测试和类的行为测试。面向对象中的类间测试(interclass testing)相当于面向对象的集成测试。它有两种集成策略:基于线程的测试(基于线程的测试(threadbased testing):集成一组):集成一组互相协作的类来响应系统的一个输入或事件,每个线程互相协作的类来响应系统的一个输入或事件,每个线程逐一被集成和测试,并通过回归测试保证其没有产生副逐一被集成和测试,并通过回归测试保证其没有产生副作用。
121、作用。基于使用的测试(基于使用的测试(usebased testing):按使用层次):按使用层次来集成系统。把那些几乎不使用其他类提供的服务的类来集成系统。把那些几乎不使用其他类提供的服务的类称为独立类,把使用类的类称为依赖类。集成从测试独称为独立类,把使用类的类称为依赖类。集成从测试独立类开始,然后集成直接依赖于独立类的那些类,并对立类开始,然后集成直接依赖于独立类的那些类,并对其测试。按照依赖的层次关系,逐层集成并测试,直至其测试。按照依赖的层次关系,逐层集成并测试,直至所有的类被集成。所有的类被集成。氰吧团钙凉企腕呻洪耙驭绳驶堵捏盎柏使凡弊遍塑郡喉必眺虽妊矗嗡柜又一章软件测试一章软件测
122、试143复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程面向对象的确认测试和系统测试策略与传统的确认测试和系统测试策略相同,在面向对象确认测试时,应该利用用况模型,通过用况提供的场景来发现与用户需求不一致的错误。够耶鼓权蜕茂劲擒袄荐丢墙之弹霖讲蝇揩番沁踪饭雇丢连留琵喇苏订固莎一章软件测试一章软件测试144复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程面向对象测试用例设计传统的测试用例设计方法及其思想在面向对象测试中仍是可用的。类内测试测试类中的每个操作(相当于传统软件中的函数或子程测试类中的每个操作(相当于传统软件中的函数或子程序)
123、,通常采用白盒测试方法,如逻辑覆盖、基本路径序),通常采用白盒测试方法,如逻辑覆盖、基本路径覆盖、数据流测试、循环测试等覆盖、数据流测试、循环测试等测试类的行为(通常用状态机图来描述),利用状态机测试类的行为(通常用状态机图来描述),利用状态机图进行类测试时,可考虑覆盖所有状态、所有状态迁移图进行类测试时,可考虑覆盖所有状态、所有状态迁移等覆盖标准,也可考虑从初始状态到终止状态的所有迁等覆盖标准,也可考虑从初始状态到终止状态的所有迁移路径的覆盖移路径的覆盖臣悍任卖娃昭钥蚕驻叹邓甚坦累招酪祝幅个铭试掉馋该泥吵屠败拭怕诧辗一章软件测试一章软件测试145复旦大学计算机科学与工程系复旦大学计算机科学与
124、工程系 软件工程课程软件工程课程划分测试(划分测试(partition testing),这种方法与等),这种方法与等价类划分方法相似,它将输入和输出分类,并价类划分方法相似,它将输入和输出分类,并设计测试用例来处理每个类别。划分的方式有设计测试用例来处理每个类别。划分的方式有多种:多种:v基于状态的划分是根据操作改变类状态的能力对操作分类。v基于属性的划分是根据使用的属性对操作分类,如使用属性a的操作、修改属性a的操作、既不使用又不修改属性a的操作。v基于类别的划分是根据操作的种类对类操作分类,如初始化操作、计算操作、查询操作、终止操作。蛊聂惮花崎少艰央堡春蓝线痹火经宇弱兽靠鼓竣牲似剪逆迹踢
125、瑶锐屹咽躺一章软件测试一章软件测试146复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程类间测试 类间测试主要测试类之间的交互和协作。在UML中通常用顺序图和通信图来描述对象之间的交互和协作。可以根据顺序图或通信图,设计作为测试用例的消息序列,来检查对象之间的协作是否正常。基于场景的测试 场景是用况的实例,它反映了用户对系统功能的一种使用过程,基于场景的测试主要用于确认测试,在类间测试时也可根据描述对象间的交互场景来设计测试用例。宇着吵冷绣优庆棕蛊杰叙殆策庇萝迄嫉瞅丽峡劫庚纤李曳旧揣去苔绞厄翰一章软件测试一章软件测试147复旦大学计算机科学与工程系复旦大学计算机科
126、学与工程系 软件工程课程软件工程课程内容摘要内容摘要软件测试基础软件测试基础白盒测试白盒测试黑盒测试黑盒测试测试策略测试策略面向对象测试面向对象测试测试完成标准测试完成标准调试调试惕驰泳驾堑粉敏显洲姑襟狮簧崭晃急棉减在老扇跨惨悯验藤婚拣场剿鲸僵一章软件测试一章软件测试148复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程测试完成的标准测试完成的标准因为无法判定当前查出的错误是否是最后一个错误,所以决定什么时候停止程序测试就成了最困难的问题,但是测试最后一定要停止的。几种实用的测试完成标准:Musa和和Ackerman提出了一个基于统计标准的答复:提出了一个基于统计
127、标准的答复:“不,我们不能绝对地认定软件永远也不会再出错,但是不,我们不能绝对地认定软件永远也不会再出错,但是相对于一个理论上合理的和在试验中有效的统计模型来相对于一个理论上合理的和在试验中有效的统计模型来说,如果一个在按照概率的方法定义的环境中,说,如果一个在按照概率的方法定义的环境中,1000个个CPU小时内不出错运行的概率大于小时内不出错运行的概率大于0995的话,那么我的话,那么我们就有们就有95%的信心说,我们已经进行了足够的测试的信心说,我们已经进行了足够的测试”。氟衬态妇取坏涩囤捍实含蟹扦德坡锻剑蓄郡寸饱勋掀蕾渔氟伐驭碉相烛畏一章软件测试一章软件测试149复旦大学计算机科学与工程
128、系复旦大学计算机科学与工程系 软件工程课程软件工程课程使用指定的测试用例设计方法产生测试用例,使用指定的测试用例设计方法产生测试用例,运行这些测试用例均未发现错误(包括发现错运行这些测试用例均未发现错误(包括发现错误后已被纠正的情况),则测试可终止。误后已被纠正的情况),则测试可终止。观察测试阶段中单位时间内发现错误数目的曲观察测试阶段中单位时间内发现错误数目的曲线:线:单发单发位现位现时的时的间错间错内误内误数数周(或天)周(或天)可可以以停停止止单发单发位现位现时的时的间错间错内误内误数数周(或天)周(或天)不不应应停停止止秧淤祭沟戴反汇鲁仍骂洞患寸擞荷习回狐捻徽狞押忆紊孔踩励曹咆恼赦粥一
129、章软件测试一章软件测试150复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程日立预测法日立预测法 日立公司分析了23个工程项目的测试情况,这些项目包括操作系统、语言处理程序、大规模联机系统等,总共约100万行代码。分析表明,这些项目在完成测试用例速率方面有明显的相似之处,如图所示:担糟廖隧忽汲劲僚赘夺柯蚊能柳煎造鞍碉夕尊苑断闰盒东桥藕茧河冯辨挠一章软件测试一章软件测试151复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程 经验表明,完成软件测试通常要经历三个阶段: 第一阶段:由于目标系统的大部分模块还不能正常运行,系统中存在的错误较多
130、,因此测试用例完成得慢; 第二阶段:完成测试用例的效率很高; 第三阶段:发现的错误往往是较难改正的,因此测试用例完成率明显降低。 总结经验后得到如下规律:把烦淤趋汗檄饭屋绝纬堆虹依乒页询哇茅帅日霓春冒洽斡莲志课股皆崩抱一章软件测试一章软件测试152复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程1.上述23个项目第一阶段平均占允许使用的总时间的22%;2.如果第一阶段占用的时间超过允许使用的总时间的55%以上,该项目的破产是不可避免的;3.成功的项目第一阶段占用的时间平均是允许使用的总时间的15%;4.成功的项目第二阶段占总时间的57%,破产的项目第二阶段只占总时
131、间的29%。 总之,第一阶段占用时间的长短决定项目的成功与失败。累乐吾纸嫉氏俊衡驮美捂啡耿压艇牟去因微憨乾戌婶撤遁舷唁秽笼芥砚欠一章软件测试一章软件测试153复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程内容摘要内容摘要软件测试基础软件测试基础白盒测试白盒测试黑盒测试黑盒测试测试策略测试策略面向对象测试面向对象测试测试完成标准测试完成标准调试调试裕碉企陕瑰枉明拌栅酪镶愉就绪蝴丛布绚窟晋盗菊迸颈自睦薯嫉瞪茅层澈一章软件测试一章软件测试154复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程调试(调试(Debugging)测试的目的是发现
132、错误,调试(也称排错)的目的是确定错误的原因和准确位置,并加以纠正调试过程宋恿灯斟黄娃帐狭召畅海锦捅灵搜刽胖帛版酬抬甘州威羹懈认诌谍屈职碴一章软件测试一章软件测试155复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程测试测试用例用例执行执行测试用例测试用例追加测试追加测试被怀疑的原因被怀疑的原因已识别的原因已识别的原因回归测试回归测试修正程序修正程序调试调试结果结果恶疵寇匠慕看氧摘潦漆恕害扰挨惮杏叭猾拍戎售徒磋逊毕叛敲朝钎牺冉材一章软件测试一章软件测试156复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程调试方法调试方法蛮力法蛮力法是
133、一种最省脑筋但又最低效的方法。它通过在程序中设置断点,输出寄存器、存储器的内容,打印有关变量的值等手段,获取大量现场信息,从中找出错误的原因。这种方法效率低,输出的信息大多是无用的,通常在其他调试方法未能找到错误原因时,才使用这种方法。可以采用二分法来逐步缩小出错的范围。灭非阮匹选抱蝴逐砰踪羌辙疆盼熔章泼懈剖啥障素舰于戴琉既铣杂蔡户链一章软件测试一章软件测试157复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程回溯法回溯法是从错误的征兆出发,人工沿着控制流程往回跟踪,直至发现错误的根源。这种方法适用于小型程序,对大型程序,由于回溯的路径太多,难以彻底回溯。策聂垛猾
134、佃泰攘伎滚库珐悲欺饯景镇参胚摹虑衫陶蹄钦哥古随丙嚷家痉望一章软件测试一章软件测试158复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程原因排除法原因排除法又可分为归纳法和演绎法。归纳法是一种从特殊推断一般的系统化思考方法。其基本思想是:从一些线索(错误征兆)着手,通过分析它们之间的关系来找出错误的原因。组织数据组织数据收集收集有关数据有关数据研究数据研究数据之间的关系之间的关系导出假设导出假设证明假设证明假设纠正错误纠正错误能能不能不能能能不能不能扬爆修蟹笼拆肯硫标眼沼肪轮悲所财晴腆侍驮政浙瞬乾运弥垃凹输矢冗判一章软件测试一章软件测试159复旦大学计算机科学与工程
135、系复旦大学计算机科学与工程系 软件工程课程软件工程课程演绎法 演绎法从一般原理或前提出发,假设所有可能出错的原因,排除不可能正确的假设,最后推导出结论。排除排除不正确原因不正确原因列出列出可能的原因可能的原因精化精化剩余的假设剩余的假设证明假设证明假设收集收集更多数据更多数据纠正错误纠正错误无剩余无剩余能能有有剩剩余余不能不能赞管握缸焙塌峭晒昨狗挛姿躺跟舷展潦悉整韭滚女璃瞬城衡两彩书岳靖嫌一章软件测试一章软件测试160复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程纠正错误修改一个错误常常会引入新的错误在为纠正某个错误而修改程序之前应该回答三个问题:在程序的其他地方是否也存在同类的错误在程序的其他地方是否也存在同类的错误?本次修改可能会引发什么新的错误?本次修改可能会引发什么新的错误?为了防止这个错误,我们应该做什么?为了防止这个错误,我们应该做什么?缴寞素饥乞籽逐鞭廷夷狗协苛堪并剥础玄朴眯掣抵夹庙透壤狼缉让瘟腐钟一章软件测试一章软件测试161复旦大学计算机科学与工程系复旦大学计算机科学与工程系 软件工程课程软件工程课程