BUAAOO-First-Summary

目录

  • homework & class & trainning : 两次上机、三次作业、四周课堂
  • code analysis & review : 为什么我没有bug
  • 黑盒测试和白盒测试
  • OO 设计感言
  • Scanning: Creational Pattern & Multithreading

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

   1. 关于Debug

  我对我三次房间的同学的bug都做了详细的文档记录,这里简单的贴一下,很热衷于和同学们分享。

  第一次

1 1.  多人删除了首尾的特殊字符
2 2.  多人没有判断指数后面
3 3.  一人没有考虑正则表达式爆栈
4 4.  一人没有考虑对常数求导

  第二次 

[x] 1.in for rider TLE ,考虑嵌套,导致超市
[x] 2.in for saber 0 , 没有考虑输出0
[x] 3.in for archer WF ,没有考虑格式错误
[?] 4.in for altergo saber assassin berserker rider UNKNOWN maybe because of sympy, sympy对拍精度问题,使用Wolfram Alpha复查
[?] 5.in for archer lancer UNKNOWN maybe because of sympy sympy对拍精度问题,使用Wolfram Alpha复查
[?] 6.in for rider WA UNKNOWN 「fail to debug」 ,没有考虑化简错误
[x] 7.in for archer WF ^ + ,没有考虑`^ +`类型的错误格式
[x] 8.in for altergo WA , 化简出现错误

x 表示 是错误数据
? 表示 是可疑数据

  第三次

整体错误较少,仅一人出现判错格式。

  大佬分享课的收获

  1. shh : 优秀的自动机分析

  2. cyx :优秀的设计模式思考者

  3. dyj :高阶对拍器设计者

  4. hdl :优秀的面向对象和工业级设计师

  

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

二、code review & analysis

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

  第一次作业:

  

  第二次作业

  

  第三次作业

  

  从三次的设计图来看,Unit 1对我的提升非常大,可以看到我的设计越来越有整体层次感、对象和接口的封装、多态的函数返回模式、具有自我管理能力的类、Unit 1的设计最后充分体现了我的设计思想逐渐丰富。组合思维的应用让我的程序越来越有设计感,越来越具有可扩展性和良性。

  为什么我没有bug:其实是由于我的开发流程在逐步细化:

    我的第一次开发流程:

    1. 做一个简要的计划

    2. 设计对象、画图

    3. 写简单的测试用例和测试代码

    4. 写代码

    5. 小黄鸭调试

    6. 运行测试

    我的第二次开发流程:

    1. 学习递归下降法

    2. 第一次代码重新阅读

    3. 重构类型清单

    4. 一个新的设计计划

    5. 设计新对象、做思维导图

    6. 写部分代码

    7. 重构部分代码,消除硬绑定、做软绑定。

    8. 测试代码和测试类

    9. 测试数据编写

    10. 小黄鸭调试

    11. 黑盒运行调试

    12. 简单白盒测试

  

    我的第三次开发流程

    1. 学习装饰者模式、接口设计

    2. 第二次代码重构模块绑定

    3. 重构部分清单

    4. 表达式树建立

    5. 文法和对象模式的逐一对应

    6. 写代码「仅40分钟」

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

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

    9. 扩展、将优化和求导均作为装饰者执行。

    10. 写代码

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

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

    13. 小黄鸭测试

    14. 黑盒运行测试

    15. 覆盖式白盒测试

    16. 优化及优化测试

    17. 性能分析和性能测试

    18. 代码回顾和思考

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

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

  我的第一次作业,代码其实有较高的耦合度。

  OCavg WMC
Poly 3.8333333333333335 23.0
Main 5.666666666666667 17.0
Total   40.0
Average 4.444444444444445 20.0

  我的第二次作业,代码的耦合度就直线降低了。

  

  OCavg WMC
Deg 1.5714285714285714 11.0
Expr 2.7142857142857144 19.0
Main 1.0 1.0
Myinput 2.2222222222222223 40.0
Myoutput 3.0   6.0
Term 2.1818181818181817 24.0
Total   101.0
Average 2.1956521739130435 16.833333333333332

  我的第三次作业,在扩展之后,依然有较好的扩展性和松耦合。且后两次的耦合主要在Input Handler即递归下降的部分,这部分HansBug学长已经给出了有效的OO风格的指导。

  

  OCavg WMC
Val 1.0 9.0
Sin 2.75 11.0
Pow 1.6666666666666667 10.0
Plus 2.272727272727273 25.0
Myoutput 1.0 1.0
Myinput 2.526315789473684 48.0
Mul 2.4545454545454546 27.0
Main 1.0 1.0
Cos 2.75 11.0
Total   143.0
Average 2.1666666666666665 15.88888888888889

三、黑盒测试和白盒测试  

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

  在白盒测试部分,感谢:荣文戈老师的优质教学、感谢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. 检查内部数据结构以确保其有效性

四、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思维和设计模式的大海里面徜徉。

(0)

相关推荐

  • OO第一作业周期(前四周)总结

    前言 本文章针对Java课程前三次PTA作业进行总结 一.作业过程总结 1.总结三次作业之间的知识迭代关系:关于前三次作业之间的迭代关系,第一次作业主要是关于Java的最基础的练习,算法都可以直接再m ...

  • OO第三单元作业总结

    OO第三单元作业总结--JML 第三单元的主题是JML规格的学习,其中的三次作业也是围绕JML规格的实现所展开的(虽然感觉作业中最难的还是如何正确适用数据结构以及如何正确地对于时间复杂度进行优化). ...

  • OO第一次总结作业

    第一次OO博客作业 前言 面向对象课程已经经过了4周的时间.前三次作业全部是关于多项式求导的相关内容,内容由易到难,同时我也开始逐渐深入感受学习面向对象的各项特征,逐渐将自己的编程风格从C向真正的面向 ...

  • 【OO学习】OO第一单元作业总结

    OO第一单元作业总结 在第一单元作业中,我们只做了一件事情:求导,对多项式求导,对带三角函数的表达式求导,对有括号嵌套的表达式求导.作业难度依次递增,让我们熟悉面向对象编程方法,开始从面向过程向面向对 ...

  • 编写可维护软件的十大原则

    编写可维护软件,可以提高软件开发效率,降低开发和维护成本.而要实现这一目标,软件开发人员应当遵守以下10大原则: 编写短小的代码单元 这里的代码单元,指的是方法或函数. 短小的代码单元(一个经验法则是 ...

  • Executive Summary和Introduction有何不同?

    说到executive summary,留学生们应该并不陌生,但是你真的了解它吗?据小编了解,很多留学生在初次接触executive summary的时候,就经常将之与introduction弄混,以 ...

  • CNCF LandScape Summary

    CNCF Cloud Native Interactive Landscape 1. App Definition and Development 1. Database Vitess:itess i ...

  • BUAAOO 第四单元 & 课程总结

    BUAAOO 第四单元 & 课程总结

  • Pubmed Summary 文献泛读至简辅助工具

    写在前面 TBtools开放的功能很少在后期版本撤去.而作为少数被撤去的功能之一,Pubmed Summary 事实上是一个不错的动能.在抹去之后,不时有用户问起.趁着 TBtools 插件模式的释放 ...

  • 帽子、手套款总图 06 Beannie/Hat / gloves summary styles image

    帽子,款形多样,保暖性,功能性,都有.你想选哪种? Beannie, or hat, gloves, so many styles, for keep warm, for function or fo ...

  • httprunner 2.x学习17 - summary结果统计和 html 报告生成

    前言 调用HttpRunner类的run方法运行用例后,会返回测试结果统计. 得到测试结果后加载html测试报告模板,最终得到一个html测试报告. summary结果统计 接着上一篇调用HttpRu ...

  • 【Deep Learning with PyTorch 中文手册】(五)Summary for Chapter I

    Hardware for deep learning 使用预训练网络预测新的数据对于任何新款笔记本电脑或私人计算机来说都是力所能及的事情.即使是对一个预训练网络的一小部分进行再训练,以使其拟合到一个新 ...

  • 王梓涵:summary—1

    From <从你的全世界路过>/<我们仨> "所有人的坚强,都是柔软生的茧." "这座城市正在降温,11月的太阳脆弱得如同扉页,署名被时间染黄,打 ...

  • 王梓涵:summary—2

    From<白夜行>/网友书评 这本书的好三言两语是说不完的,附上一些非常精彩的关于<白夜行>一书的句子,希望能激起你读这本书的好奇心,这些句子在读过此书后才被赋予别样的意义,会 ...

  • 王梓涵:summary—3

    From<我们仨>/关于奥运 "我们读书总是从一本书的最高境界来欣赏和品评,我们使用绳子总是从最薄弱的一段来断定绳子的质量.坐冷板凳的书呆子待人不妨像读书般读,政治家或企业家等也 ...