林晓芳 201421123092 陈惠 201421123096
Coding地址:点我查看哦
题目描述:
上一周大家为四则运算程序设计了2-3个新功能,本次在隔了一周之后,我们循序渐进地进阶。本次目标:
- 把计算模块提取出来,单独创建一个类。
- 针对提取出来的计算类的接口函数做单元测试。
需求分析:
- 测试加法是否能正确工作;
- 测试加减乘除功能。
- 测试计算类对于各种参数的支持。
设计测试框架, 模拟测试数据:
计算模块的测试用例及运行结果:
@Test public void testAdd() { assertEquals(String.valueOf("3"),Calculator.add("5/3","4/3")); assertEquals(String.valueOf("9"), Calculator.add("4","5")); } @Test public void testSub() { assertEquals(String.valueOf("1/3"),Calculator.sub("5/3","4/3")); assertEquals(String.valueOf("-1"),Calculator.sub("4","5")); } @Test public void testMul() { assertEquals(String.valueOf("20/9"),Calculator.mul("5/3","4/3")); assertEquals(String.valueOf("20"),Calculator.mul("4","5")); } @Test public void testDiv() throws Exception { assertEquals(String.valueOf("5/4"),Calculator.div("5/3","4/3")); assertEquals(String.valueOf("4/5"),Calculator.div("4","5")); }
计算最大公约数测试:
@Test public void testGCD() { assertEquals(Calculator.GCD(15,10),5); }
参数错误提示:
public static String div(String a, String b) throws Exception// 除法 { a = a + "/1"; b = b + "/1"; String[] m = a.split("/"); String[] n = b.split("/"); int numerator1 = new Integer(m[0]); int denominator1 = new Integer(m[1]); int numerator2 = new Integer(n[0]); int denominator2 = new Integer(n[1]); if (denominator1 == 0 || numerator2 == 0 || denominator2 == 0) { throw new Exception("分母不能为0!"); } int p = numerator1 * denominator2; int q = denominator1 * numerator2; int t = GCD(p, q); return Reduction(p / t, q / t); }
@Test public void testDiv() throws Exception { assertEquals(String.valueOf("5/4"),Calculator.div("5/3","4/3")); assertEquals(String.valueOf("4/5"),Calculator.div("4","5")); try{ Calculator.div("4","0"); } catch(Exception ex){ assertEquals("分母不能为0!",ex.getMessage()); fail("分母不能为0!"); } }
覆盖率:
非摆拍照片:
小结与感受:
通过本次测试,能够有效发现程序计算模块的问题,并予以改进。由于我们两个都是第一次尝试测试,对于测试很陌生,不知从何下手,通过老师关于测试的教程和其他同学的帮助,对计算部分的代码进行了测试。测试过程中,我们开始庆幸当初的代码编程相对而言比较规范,使得隔了一周之后再看之前的代码,我们还能够看懂并加以修改。虽然这次还能够看懂自己写的代码,但是通过这次测试还是体会到了拥有良好的设计、编码规范和必要的注释的重要性。首先,良好的设计是基础,只有拥有良好的设计,才能更有效地找出编码过程中出现的问题并及时予以改正;其次,编码规范是核心,一大段杂乱无章的代码不仅会给自己和队友带来不必要的麻烦,而且在出现错误的时候容易迷失方向,浪费时间。最后,必要的注释可以让我们更快地理解整个程序。
“汉堡包”:
先来一片面包:队友是一个有想法的人,但还会听取我的看法,相互讨论最终执行。
在把肉放上:有好的想法,但由于编程过程比较困难,会选择比较不简洁的解决方式。
再来一片面包: 两个人之间要能够相互学习,相互讨论,发挥出1+1>2的能力。
PSP:
PSP2.1 |
Personal Software Process Stages |
Time (%) Senior Student |
Time (%) |
Planning |
计划 |
1h |
0.5h |
· Estimate |
估计这个任务需要多少时间 |
8.5h |
8h |
· Analysis |
需求分析 (包括学习新技术) |
0.5h |
0.5h |
· Coding Standard |
代码规范 |
1h |
0.5h |
· Design |
具体设计 |
1h |
1.5h |
· Coding |
具体编码 |
3h |
2.5h |
· Test |
测试(自我测试,修改代码,提交修改) |
1h |
1.5h |
Reporting |
报告 |
1h |
1h |