课程考查(论文)封面作业(论文)题目:成绩百分制转等级制所修课程名称:软件测试质量与保证修课程时间:2020年2月至2020年5月完成作业(论文)日期:2020年5月评阅成绩:程序:黑盒测试用例设计:白盒测试用例设计:单元测试:测试结果:文档格式:评阅教师签名:年月日第1页一、所选题目12.成绩百分制转等级制编写程序,给定一个学生成绩(0-100分),给出相应等级:90~100优秀,80~89良好,70-79中等,60~69及格,0~59不及格。二、主要代码(10分)#includestdio.hvoidmain(){intx;printf(请输入0-100的成绩:);scanf(%d,&x);if(x100||x0){printf(成绩错误\n);}elseif(x=90){printf(优秀\n);}elseif(80=x&&x=89){printf(良好\n);}elseif(70=x&&x=79){printf(中等\n);}elseif(60=x&&x=69){printf(及格\n);}else{printf(不及格\n);}}三、黑盒测试技术测试用例设计(25分)1.边界值测试(7分)(1)边界值分析由于学生有五个等级,学生成绩的取值范围是:0-100,学生成绩的边界值有:0,59,60,69,70,79,80,89,90,100.(2)边界值测试用例表设计测试用例(给出所有测试用例)成绩等级问题的测试用例输入条件边界值测试数据x0,59,60,69,70,79,80,89,90,100-1,0,1,58,59,60,61,68,69,70,71,78,79,80,8188,89,90,91,99,100,101.测试用例编号输入数据预期输出测试结果x1-1成绩错误成绩错误20不及格不及格31不及格不及格458不及格不及格559不及格不及格660及格及格761及格及格868及格及格第2页2.等价类测试(8分)(1)等价类划分分析1.首先分析题目中给出的条件,输入条件如下:有效等价类:成绩0=x=100;无效等价类:成绩x0||x100。2.根据输入条件的要求划分等价类,列出等价类表并编号(2)等价类测试用例表成绩等级问题的测试用例表969及格及格1070中等中等1171中等中等1278中等中等1379中等中等1480良好良好1581良好良好1688良好良好1789良好良好1890优秀优秀1991优秀优秀2099优秀优秀21100优秀优秀22101成绩错误成绩错误编号输入条件等价类10x无效等价类290=x=100有效等价类380=x=89有效等价类470=x=79有效等价类560=x=69有效等价类60=x=59有效等价类7X100无效等价类测试用例编号输入数据预期输出覆盖等价类测试结果x190优秀2优秀292优秀2优秀394优秀2优秀4-20成绩错误1成绩错误510不及格6不及格680良好3良好782良好3良好第3页3.基于决策表的测试(10分)(1)决策表测试分析(2)基于决策表的测试用例表成绩等级问题的测试用例表884良好3良好9-50成绩错误1成绩错误1020不及格6不及格1170中等4中等1272中等4中等1374中等4中等14110成绩错误7成绩错误1530不及格6不及格1660及格5及格1762及格5及格1864及格5及格19120成绩错误7成绩错误2040不及格6不及格测试用例123456输入条件0=x=100TTTTTF90=x=100TFFFFF80=x=89FTFFFF70=x=79FFTFFF60=x=69FFFTFF0=x=59FFFFTF预期输出优秀√良好√中等√及格√不及格√成绩错误√测试用例编号输入数据预期输出覆盖等价类测试结果x195优秀2优秀285良好3良好第4页四、白盒测试技术测试用例设计(25分)1.静态白盒测试(4分)①代码走读:从出口来看,只有一个出口语句,if...else语句中,所有的判断节点取值情况都以覆盖。每个出口都有符合格式要求的返回值。从程序结构来看,整个函数体就只有一个判定结构,且整个判定结构为结构化设计。#includestdio.hvoidmain(){1.intx;2.printf(请输入0-100的成绩:);3.scanf(%d,&x);4.if(x100||x0){5.printf(成绩错误\n);6.}elseif(x=90){7.printf(优秀\n);8.}elseif(80=x&&x=89){9.printf(良好\n);10.}elseif(70=x&&x=79){11.printf(中等\n);12.}elseif(60=x&&x=69){13.printf(及格\n);14.}else{15.printf(不及格\n);16.}}序号1,2,3获取到学生成绩赋值给x,序号4,5判断学生成绩是否有效,序号6-14判断学生成绩的等级。②静态结构分析(函数控制流图法)(1)出口:该函数只有一个出口(2)孤立节点:无孤立节点(3)环复杂度:6(4)结构化设计。375中等4中等465及格5及格530不及格6不及格6120成绩错误7成绩错误第5页2.对判断的测试(10分)(1)在六种选取1种判定测试覆盖指标进行分析①函数流程图不及格良好中等及格优秀数据错误0=x=10080=x=8970=x=7960=x=69输入成绩90=x=100开始N(P1)Y(P2)结束Y(P3)N(P4)Y(P5)N(P6)Y(P7)N(P8)Y(P9)N(P10)第6页②选择判定覆盖:程序中每个判定节点取得各种可能的结果至少有一次,选择测试用例时加强了判定节点的作用。而去判定覆盖可以满足语句覆盖执行路径有:L1:P1L2:P2,P3L3:P2,P4,P5L4:P2,P4,P6,P7L5:P2,P4,P6,P8,P9L6:P2,P4,P6,P8,P10(2)测试用例表3.对路径的测试(11分)(1)程序图测试用例输入数据预期输出覆盖的判定条件或判定节点测试结果x1120数据错误L1数据错误295优秀L2优秀385良好L3良好475中等L4中等565及格L5及格630不及格L6不及格第7页(2)环复杂度由判定节点法可知环复杂度为:5+1=6.(3)独立路径的抽取P1:1,4,5,16P2:1,4,6,7,16P3:1,4,6,8,9,16P4:1,4,6,8,10,11,16P5:1,4,6,8,10,12,15,16P6:1,4,6,8,10,12,13,16(4)不可行路径的处理由程序图可知,其中路径都是可以达到的,没有不可行路径。(5)测试用例表五、驱动程序开发代码(20分)1.驱动模块与桩模块的开发(1)读入一批测试用例,对每个测试用例能够读入基本信息并显示出来成绩等级测试用例表测试用例编号输入数据预期输出路径测试结果x1120数据错误P1数据错误295优秀P2优秀385良好P3良好475中等P4中等565及格P5及格630不及格P6不及格测试用例编号输入数据预期输出测试结果x1-1成绩错误成绩错误20不及格不及格31不及格不及格458不及格不及格559不及格不及格660及格及格761及格及格868及格及格969及格及格1070中等中等1171中等中等1278中等中等1379中等中等1480良好良好第8页(2)利用测试用例来驱动(调用)被测试函数源代码:#includestdio.h#includestring.hintScore(intx){if(x100||x0){return0;}elseif(x=90){return1;}elseif(80=x&&x=89){return2;}elseif(70=x&&x=79){return3;}elseif(60=x&&x=69){return4;}else{return5;}}voidScoreTest(){printf(这是对成绩等级的测试\n);intPassNum=0;//测试通过的数量intFailNum=0;//测试没有通过的数量FILE*pFpFrom=NULL;//数据文件的指针,储存测试用例的基本信息FILE*pFpTo=NULL;//记录测试用例执行结果的文件的指针char*DataFileName=DataTest.txt;//打开测试文件,准备读取测试用例pFpFrom=fopen(DataFileName,r);if(!pFpFrom){printf(读取数据失败,返回\n);return;}char*DataFileTestResultName=TestResult.txt;//打开数据文件pFpTo=fopen(DataFileTestResultName,w+t);if(!pFpTo){printf(打开文件失败,返回\n);return;}fprintf(pFpTo,-------对函数Score的单元测试结果------\n);intid=0;intx;intScoreAnswer;intNewScoreAnswer;//执行测试用例的返回值char*infurAnwser;char*realiAnwser;printf(对函数展开单元测试\n);while(!feof(pFpFrom)){//不断读取测试用例Idfscanf(pFpFrom,%d,&id);//读入测试用例的IDfscanf(pFpFrom,%d,&x);//读入测试用例的xfscanf(pFpFrom,%d,&ScoreAnswer);//读入测试用例的预期输出NewScoreAnswer=Score(x);//执行测试用例if(ScoreAnswer==0){1581良好良好1688良好良好1789良好良好1890优秀优秀1991优秀优秀2099优秀优秀21100优秀优秀22101成绩错误成绩错误第9页infurAnwser=成绩错误;}elseif(ScoreAnswer==1){infurAnwser=优秀;}elseif(ScoreAnswer==2){infurAnwser=良好;}elseif(ScoreAnswer==3){infurAnwser=中等;}elseif(ScoreAnswer==4){infurAnwser=及格;}elseif(ScoreAnswer==5){infurAnwser=不及格;}if(NewScoreAnswer==0){realiAnwser=成绩错误;}elseif(NewScoreAnswer==1){realiAnwser=优秀;}elseif(NewScoreAnswer==2){realiAnwser=良好;}elseif(NewScoreAnswer==3){realiAnwser=中等;}elseif(NewScoreAnswer==4){realiAnwser=及格;}elseif(NewScoreAnswer==5){realiAnwser=不及格;}printf(测试用例%d:成绩X:%d;预期输出:%s,实际输出:%s,id,x,infurAnwser,realiAnwser);if(ScoreAnswer==NewScoreAnswer){PassNum++;printf(通过\n);fprintf(pFpTo,测试用例%d:Pass\n,id);}else{FailNum++;printf(失败\n);fprintf(pFpTo,测试用例%d:Fail\n,id);}}fclose(pFpFrom);//关闭测试用例数据文件printf(共执行%d个测试用例,其中%d个通过,%d个失败\n,PassNum+FailNum,PassNum,FailNum);fprintf(pFpTo,共执行%d个测试用例,其中%d个通过,%d个失败\n,PassNum+FailNum,Pass