20172301 2017-2018-2 《程序设计与数据结构》实验二报告
20172301 2017-2018-2 《程序设计与数据结构》实验二报告
课程:《程序设计与数据结构》
班级: 1723
姓名: 郭恺
学号: 20172301
实验教师:王志强老师
实验日期:2018年4月18日
必修/选修: 必修
实验内容
- 初步掌握单元测试和TDD
- 理解并掌握面向对象三要素:封装、继承、多态
- 初步掌握UML建模
- 熟悉S.O.L.I.D原则
- 了解设计模式
实验过程及结果
-
第一个提交点:学习Junit的使用
-
第二个提交点:以 TDD的方式研究学习StringBuffer
- 了解什么是TDD(测试驱动开发)
明确当前要完成的功能,记录成一个测试列表
快速完成编写针对此功能的测试用例
测试代码编译不通过(没产品代码呢)
编写产品代码
测试通过
对代码进行重构,并保证测试通过(重构下次实验练习)
循环完成所有功能的开发 -
第三个提交点:让系统支持Short类,并在MyDoc类中添加测试代码
- 学习S.O.L.I.D原则
S.O.L.I.D原则
SRP(Single Responsibility Principle,单一职责原则)
OCP(Open-Closed Principle,开放-封闭原则)
LSP(Liskov Substitusion Principle,Liskov替换原则)
ISP(Interface Segregation Principle,接口分离原则)
DIP(Dependency Inversion Principle,依赖倒置原则)- 仿照例子编写代码。
- 实验结果如图:
- 实验链接
-
第四个提交点: 以TDD的方式开发一个复数类Complex
-
第五个提交点:使用StarUML对实验二中的代码进行建模
- 学习基本的UML绘图。明白各个符号的意义。
- UML符号意义 :
参考资料:UML类图新手入门级介绍
UML实践详细经典教程 - 实验结果如图:
实验过程中遇到的问题和解决过程
-
问题1:Junit找不到测试?!
如图:
··· -
问题1解决方案:在测试办法前面加test,即把get()改为testget()。这样后就可以运行了。
参考资料: junit.framework.AssertionFailedError: No tests found in错误解决办法 -
问题2:Complex类测试后显示红条,因为实际值和预测值不相等,然后查看异常以后两个内容是完全一样的。我不明白为什么内容完全一样的两个值却输出不相等。
如图:
-
问题2解决方案:这个我也看了别的同学在蓝墨云上面的提问,有的预测结果就是String型,实际则是Complex型,是不相等的。而我的都是Complex对象却仍旧显示红条。询问了学长,他告诉我要调用to.string方法。确实成功了。但是,我却不知道为什么。
在Junit测试里,你的预期值和实际值之所以不同是因为程序比较的不是内容,而是他的引用本身,所以这里调用toString相当于把它们的引用搞成相同的了,因为之前你的复数类型不是String的,就没有比较它们的引用,它们的引用也不一样,所以是红条。
学长的意思是在junit测试里,比较的不是内容,这也就是为什么我的两个内容相等却仍然是红条。所以,这里调用toString方法实际上是把他们引用相同地址,这样就会变绿。
其他(感悟、思考等)
实验主要考察的是自主学习和实践学习,简言之,做中学。第四个实验我遇到错误以后想了很久,也查阅了很多资料,虽然最后还是请教了学长才得以解决,但是我自己也有了一个思考的过程,能够更加深刻的理解错误,以后避免错误。这次的实验耗费的时间虽然多,但是对我本身的代码编写的实力有一定的提升,加油吧。