结对伙伴:
201421123038(队友)、201421123039(本人)
题目描述:
上一周大家为四则运算程序设计了2-3个新功能,本次在隔了一周之后,我们循序渐进地进阶。本次目标:
- 把计算模块提取出来,单独创建一个类。
- 针对提取出来的计算类的接口函数做单元测试。
- 参考助教的示例:
a. http://www.cnblogs.com/zhengrui0452/p/6507630.html
需求分析:
- 通过单元测试代码,测试加法是否能正确工作;
- 通过单元测试代码,测试加减乘除功能;
- 通过单元测试代码,测试计算类对于各种参数的支持。
测试过程:
- 测试框架如图
- 计算模块的测试用例及运行结果
封装加减乘除模块: package random; import junit.framework.TestCase; public class calculateTest3 extends TestCase { protected void setUp() throws Exception { super.setUp(); } public void testAdd() //加法测试模块 { RandomNum a=new RandomNum(2,3); RandomNum b=new RandomNum(2,3); calculate c=new calculate(); c.Add(a, b); System.out.println(a.toString()); } public void testSubstract() //减法测试模块 { RandomNum a=new RandomNum(1,3); RandomNum b=new RandomNum(2,3); calculate c=new calculate(); c.Add(a, b); System.out.println(a.toString()); } public void testDeivde() //除法测试模块 { RandomNum a=new RandomNum(2,1); RandomNum b=new RandomNum(3,1); calculate c=new calculate(); c.Add(a, b); System.out.println(a.toString()); } public void testMul() //乘法测试模块 { RandomNum a=new RandomNum(2,3); RandomNum b=new RandomNum(2,1); calculate c=new calculate(); c.Add(a, b); System.out.println(a.toString()); } }
- 测试过程中遇到的问题以及解决的方案。
测试代码覆盖率时clover插件安装不好,开始一直找不到下载的地方,后来通过百度直接在ECLIPSE的中HELP中安装成功。
- 展示上面描述的单元测试的每个环节。
1、首次测试结果,加减乘除皆可执行:
2、将除法模块中,分母改为0,则测试报错:
3、测试超出范围的数相加:
4、利用clover测试代码覆盖率
实验总结:
1.小结与感受:
(1)问题:通过测试,是否有效发现了程序计算模块的问题,并给予改进?
答:无法解决溢出的问题,不知该如何改进。
(2)体会:
- 在本次实验中,跟队友一起利用JUnit进行代码模块的测试,开始跟队友也是不太会,通过百度还有请教一些会的同学,才掌握了方法,同时明白了这种测试的好处,它可以方便快速的找出代码中出错的地方并加以改正。
- 在测试代码覆盖率方面也摸索了好久,有许多可以进行测试的插件,通过讨论我们选择了利用CLOVER,开始一直找不到下载的地方,后来通过百度直接在ECLIPSE的中HELP中安装成功。
(3)汉堡包式评价:
先来一片面包:队友编程的思路和解题思想都很好,针对题目常常能提出一针见血的看法。
再放上肉:缺点就是有点会拖时间,任务是都能如期完成,但是过程会拖拖沓沓,所以在实验过程中常常需要我的监督,结对做实验也正是需要两人互相监督完成
再来一片面包:做事情真正静下心来就会做的很认真,实验过程中也给了我很多帮助。
2.在隔了一周之后再看之前的代码,是否更能体会到下面这些东西:
(1)良好的设计
良好的设计非常重要,结构化模块化编程对于管理和修改和扩展都是非常有帮助的。如果没有设计好,可能一开始还没有感觉,
但是后面进行功能扩展的时候会非常痛苦,会导致后续一系列的问题。所以开始设计时,一定要有模块化的思想。相互之间的联系尽量少,分层设计,这样容易修改和拓展。
(2) 编码规范
一定要有自己熟练而且正规的一个变量,方法等命名规则。
如果随便定义了a,b,c,x,y后续再看的时候,或者别人看的时候会很困难。这方面自己还要好好改进。
(3) 必要的注释
方法的注释以及关键代码的注释很重要,有时候自己写的方法可能比较复杂,但是别人使用的时候可能并不想研究怎么写的,而是只关注怎么用。
让别人看一下注释就知道怎么用,有什么效果。这个后面一定要好好使用和规范。
项目地址:https://git.coding.net/nibaijiejiea/test.git
结对照片:
PSP表格:
PSP2.1 | Personal Software Process Stages | Time (%) Senior Student | Time (%) |
Planning | 计划 | 5h | 6h |
· Estimate | 估计这个任务需要多少时间 | 5h | 6h |
Development | 开发 | ||
· Analysis | 需求分析 (包括学习新技术) | 0.5h | 0.3h |
· Design Spec | 生成设计文档 | 0 | 0 |
· Design Review | 设计复审 | 0 | 0 |
· Coding Standard | 代码规范 | 0.2h | 0.3h |
· Design | 具体设计 | ||
· Coding | 具体编码 | 0.5h | 0.5h |
· Code Review | 代码复审 | 0.5h | 0.6h |
· Test | 测试(自我测试,修改代码,提交修改) | 2h | 2h |
Reporting | 报告 | 4h | 3h |
· | 测试报告 | ||
· | 计算工作量 | ||
· | 并提出过程改进计划 |