实验目的
1. 理解单元测试的原理及工作内容;
2. 掌握使用程序流图设计测试用例;
3. 掌握测试用例设计方法及应用。
实验内容
(一)实验内容
请阅读附件的Java程序,根据下列要求完成实验内容(参考第5章ppt)
1. 绘制程序流图:分析函数int cal(Person person, int salary),绘制程序流图;
2. 提取独立路径集合:计算程序流图的环形复杂度,并提取独立路径集合;
3. 设计测试用例:根据每条独立路径,设计其测试用例(见表1);
4. 分析测试结果:运行每个测试用例,并分析其测试结果(见表1);
5. 程序修复(选做):如发现测试失败,请修复程序,并重新测试使得修复后的程序通过测试用例。
(二)要求:
1. 请按要求完成上述实验内容,在实验报告中要详细描述实验的各个步骤,图文并茂。
2. 请大家按照指定的软件工程实验报告模板,高质量的完成实验报告内容。
3. 请独立完成实验,并按时提交报告。
实验分析及过程
1. 以下是函数 cal 的主要步骤:
安全性检查:
检查输入参数 person 是否为 null,如果是,抛出 NullPointerException。
检查输入参数 salary 是否小于 0,如果是,抛出 IllegalArgumentException。
计算应纳税所得额:
初始化 res 为 salary - 5000,即月度收入减去免征额。
专项附加扣除:
子女教育:每个子女每月扣除 1000 元。
继续教育:根据是否在学以及是否获得相关证书,分别扣除 400 元或 3600 元。
住房贷款:如果有住房贷款,扣除 1000 元。
住房租金:根据不同情况扣除不同金额的租金。
赡养老人扣除:
每个月扣除 2000 元除以兄弟姐妹个数加一。
计算个人所得税:
根据阶梯税率计算个人所得税,将结果保存在 tax 中。
如果应纳税所得额小于 0,则个人所得税为 0。
返回结果:
将 tax 强制转换为整数并返回。
绘制成程序流图所下图所示。
2. 提取独立路径集合:计算程序流图的环形复杂度,并提取独立路径集合;
环形复杂度可定量度量程序的逻辑复杂性。
流图中的区域数等于环形复杂度,即13。
流图G的环形复杂度V(G)=E – N + 2,其中E是流图中边的条数,N是流图中的节点数。则V(G)=49-38+2=13
流图G的环形复杂度V(G)= P + 1,其中P流图中判定节点的数目。
即V(G)= P + 1=12+1=13。
独立路径集合过多,下方只列出五种。
(1) 1-3-5-6-8-9-12-13-14-16-17-18-33-34
(2) 1-3-5-6-7-8-10-11-12-35-37-14-15-16-17-19-21-23-24-33-34
(3) 1-3-5-6-8-9-12-13-14-15-16-17—19-21-23-25-27-28-33-34
(4) 1-2
(5) 1-3
3. 设计测试用例:根据每条独立路径,设计其测试用例;
4.设计测试代码,如下所示。
5.运行代码,结果如下,符合预期。
实验结论
经分析知程序正确,此次测试完成。
(by 归忆)