$$ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Self-defined math definitions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Math symbol commands \newcommand{\intd}{\,{\rm d}} % Symbol 'd' used in integration, such as 'dx' \newcommand{\diff}{{\rm d}} % Symbol 'd' used in differentiation ... $$

BUAAOO-Second-Summary

#目录

 

  • homework & class & trainning : 两次上机、三次作业、四周课堂
  • code analysis & review : 为什么我没有bug,为什么大家的bug越来越少
  • 多线程设计
  • OO 设计感言
  • Scanning: Junit

一、作业、课堂、上机总结若干

1. 关于Debug

非常有趣在上一次的互测中,你由于被 hack 扣分 0 分。这其中包括了 0 个错误,还有 0 个尚未修复。同时,你 hack 他人成功 0 次,得分 0 分。,这句话与我已经整整一个单元相伴了,因为我总是在无bug零伤亡组,而且我自己也测不出bug,这说明:

  1. 同学们的学习是有效的,对java的掌握相当熟练,有极强的自我设计思想在里面
  2. 强大的自动评测造福了若干同学
  3. 感谢老师和助教无微不至的帮助,预先排除了很多雷
  4. debug水平提高

2. 大佬分享课的收获

  

  1. 感谢王少布大佬,教导我们使用楼层类做优化,感谢他的分享,让我受益,理解了很多之前设计中
  2. 感谢张大佬,教导我们怎么做多线程任务分析太有趣了

感谢各位同学,我受益匪浅,在分享知识后,我们收获的更多:如何设计测试、如何做良好测试、如何运用设计模式、如何学习面向对象、如何挑战自己的高度。

二、code review & analysis

  第一单元三次全无正确性问题,同样本单元三次作业以来,我的作业在强测、互测阶段没有发现任何正确性错误、在弱测环节因为正确性产生的commit也非常少。我来总结一下我三次作业的流程、思路、设计、代码实现。先是三张我的设计图。

第一次作业:

第二次作业

  

第三次作业

从三次的设计图来看,Unit 2对我的提升非常大,我的设计可以一直使用,而且长期对修改封闭,对扩展开放,我的SOLID原则一直在做,在坚持,在锻炼自己,可以看到我的设计越来越有整体层次感、对象和接口的封装、多态的函数返回模式、具有自我管理能力的类、Unit 2的设计最后充分体现了我的设计思想逐渐丰富。组合思维的应用让我的程序越来越有设计感,越来越具有可扩展性和良性。

甚至可以发现,我的类图框架基本就没有变过,如果不仔细看,三次作业就如同一次作业一样,迭代开发的实力已经可见一般。

为什么我没有bug

其实是由于我的开发流程在逐步细化,我现在的开放模式:

  1. 学习相关的模式、接口设计、画流程图 (确定如何发布订阅,确定如何对象的属性)

  2. 代码重构、模块绑定、尽量避免重构

  3. 重构部分清单

  4. 电梯设计文档和策略

  5. 设计逻辑和对象模式的逐一对应

  6. 写代码「仅40分钟」

  7. 做头脑风暴,考察多种测试数据和思路,并完成代码

  8. 检查是否存在硬绑定、消除硬绑定、为可行的优化做准备

  9. 扩展、将优化的部分和不优化的部分独立进行,随时可以换下优化。

  10. 写代码

  11. 测试类和测试代码运行

  12. 测试数据构造和覆盖性测试

  13. 小黄鸭测试

  14. 黑盒运行测试

  15. 覆盖式白盒测试

  16. 优化及优化测试

  17. 性能分析和性能测试

  18. 代码回顾和思考

  19. 个人测试完毕,和同学交流讨论设计相互学习

  20. 回顾自己的开发,总结不足,下次再改,不做压线任务。

  21. 做代码审查,检查中避免死锁

  22. 实验, 故意放慢某个进程做强化死锁测试

  23. 理想实验,做并行程序分析图

  24. 不写无意义的commit,不做合并式的commit

  25. 做无锁化,不需要锁的任务尽量避免锁

  26. 做去轮询,避免代码中的轮询,越少越好

    可以看到,在三次作业中,我没有bug完全是因为通过学习、通过和优秀的各位同学在讨论区交流、不断提升自我、提高自己的代码鲁棒性、和建立具有纠错能力的开发模式。我没有bug不完全是运气、但也有不少运气成分、还有很多同学比我做得更好、向他们学习。在三次作业后,我逐渐看清了表达式问题的本质:即,用组合的思维去描述表达式树的形态、用装饰者的行为去描述求导和化简这些可以变化的方法。是设计提升了我的代码质量。可以发现,我的优化也是完全面向对象的松耦合实现!

  此外,在讲讲我三次作业的进步

  我的第一次作业.

class OCavg WMC
Elevator 3.8 57.0
Main 1.0 1.0
Myinput 1.5 6.0
Person 1.0 6.0
Sheduler 2.5 5.0
Total 75.0
Average 2.6785714285714284 15.0

我的第二次作业.

class OCavg WMC
Elevator 3.4444444444444446 62.0
Main 1.0 1.0
Myinput 1.5 6.0
Person 1.0 6.0
Sheduler 2.5 5.0
Total 80.0
Average 2.5806451612903225 16.0

  我的第三次作业,在扩展之后,依然有较好的扩展性和松耦合

class OCavg WMC
Elevator 4.071428571428571 57.0
HaltAll 2.3333333333333335 7.0
Main 1.0 1.0
Myinput 1.5 6.0
Myoutput 1.0 1.0
Person 1.2 12.0
Scheduler 11.0 22.0
Total 106.0
Average 3.0285714285714285 15.142857142857142

有趣的是,为了优化方便,我的三次作业都选择了耦合度较高的电梯,这是由于电梯本身的职责较多造成的,后期我把这部分压力分到了人的上面,这里可以一览我最终版本的设计思路

三、黑盒测试和白盒测试

  在黑盒测试部分,感谢:牛雅哲、张少昂两位助教的建议和鼓励、感谢林佬@login256,丁总,HugeGun,Nemo陈宇轩,MountVoom,对我的技术支持和指导。  

  在白盒测试部分,感谢:荣文戈老师的优质教学、还有偷学一节吴际老师课程的自己、感谢OO课程组老师的优质ppt、感谢何岱岚、叶开辉教导实现junit做测试。

  

  • 黑盒测试:

  我的测试环境是: ubuntu 18.04 (Intel Core i7 8Gen) ,java 10 , g++ 7.3.0 , Python 3.6.7,GNU bash 4.4.19,我的测试方法在不同平台和环境下有一定的调整、同学们可以自行调整、大部分内容是跨平台的。

  我的测试构造技巧同样可以参考我已经写好的博文。

  

  • 白盒测试:

  大量的同学在debug环节是黑盒测试的,即比较其他同学输出和标准输出的正确性,而这样是劳心劳力、费时费资源的一种朴素测试思路,所以需要白盒测试,来弥补难以覆盖的测试环节和情形。我通过单元测试、全路径覆盖的形式保证了:

    1. 保证模块中所有独立路径至少被执行一次
    2. 对所有逻辑值都会测试TRUE和FALSE
    3. 在上下边界及可操作范围内运行所有循环情况
    4. 检查内部数据结构以确保其有效性

  • 多线程强化测试
  1. 多线程的不可复现问题
  2. 将某一个进程故意放慢测试
  3. 做两个线程的遭遇测试,数据共享测试
  4. 写log,给trace多线程做准备。

四、OO设计感言

  OO设计是充满惊险充满挑战的过程。面向对象的设计思想是从自然界中来的,因为在自然界中,类(Class)和实例(Instance)的概念是很自然的。Class是一种抽象概念,比如我们定义的Class——Student,是指学生这个概念,而实例(Instance)则是一个个具体的Student,比如,Bart Simpson和Lisa Simpson是两个具体的Student。Java学起来很有趣,通过学习Java可以提高自己的逻辑思维能力。在学习Java期间我们做了一些程序,我们班的同学也都积极准备,完成的还不错!因为Java是一种面向对象的编程语言,刚接触Java的人可能会感觉比较抽象 ,不过没关系不用着急,上课的时候认真听老师讲解,一些概念知识慢慢去理解,课后多做练习,认真完成课下作业,熟能生巧,哪怕是你的记性再好,课后不去强化练习也没用,只有多练了,当你在做项目时你才能很熟练的写出你想要代码。

五、Design Pattern & Multithreading

  

六、鸣谢

  鸣谢OO课程组中对OO精心付出的每一位老师同学,希望后续的OO体验会更好。我想在OO思维和设计模式的大海里面徜徉。

posted @ 2019-04-23 16:19  I_love_SE_forever  阅读(530)  评论(0编辑  收藏  举报