#目录

 

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

BUAAOO-Second-Summary的更多相关文章

  1. BUAAOO——UNIT2 SUMMARY

    本单元的题目为设计电梯,通过这单元的学习,我初步了解了关于java多线程编程及线程之间并发安全性设计等方面的内容.以下为对这三次作业的分析与总结. 作业分析 序号 楼层 电梯数量 可停靠楼层 调度策略 ...

  2. Summary of Critical and Exploitable iOS Vulnerabilities in 2016

    Summary of Critical and Exploitable iOS Vulnerabilities in 2016 Author:Min (Spark) Zheng, Cererdlong ...

  3. 三个不常用的HTML元素:<details>、<summary>、<dialog>

    前面的话 HTML5不仅新增了语义型区块级元素及表单类元素,也新增了一些其他的功能性元素,这些元素由于浏览器支持等各种原因,并没有被广泛使用 文档描述 <details>主要用于描述文档或 ...

  4. [LeetCode] Summary Ranges 总结区间

    Given a sorted integer array without duplicates, return the summary of its ranges. For example, give ...

  5. Network Basic Commands Summary

    Network Basic Commands Summary set or modify hostname a)     temporary ways hostname NEW_HOSTNAME, b ...

  6. Summary - SNMP Tutorial

    30.13 Summary Network management protocols allow a manager to monitor and control routers and hosts. ...

  7. Mac Brew Install Nginx Summary

    ==> Downloading https://homebrew.bintray.com/bottles/nginx-1.10.1.el_capitan.bot################# ...

  8. Leetcode: LFU Cache && Summary of various Sets: HashSet, TreeSet, LinkedHashSet

    Design and implement a data structure for Least Frequently Used (LFU) cache. It should support the f ...

  9. How to add taxonomy element to a summary view?

    [re: Orchard CMS] This caused me scratching my head for days and now I can even feel it's bleeding. ...

  10. (转) Summary of NIPS 2016

    转自:http://blog.evjang.com/2017/01/nips2016.html           Eric Jang Technology, A.I., Careers       ...

随机推荐

  1. vscode小程序代码高亮

    vscode无法识别wxml,wxss语法: wxml文件设置: (1)任意打开一wxml文件,点击下方语言模式选择,这里已关联wxm所以当前显示wxml.默认关联为纯文本或者html或其他语法,点击 ...

  2. node获取当前路径的三种方法

    node提供了3种获取路径的方法  ,在当前目录下,运行node const {resolve} = require('path') console.log('__dirname : ' + __di ...

  3. Linux下/proc目录的作用

    文章是摘抄过来,方便自己查阅! 1. /proc目录 Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构.改变内核设置的机制.proc文件系统是一个伪文件系统,它只存在 ...

  4. 记字符串转bigDecimal的一个坑

    项目中一个地方用到了bigdecimal,之前是字符串转Double,处理之后再转成String,看着麻烦,给改成用bigdecimal计算字符串,但是偶尔会出现如下异常. 很是诧异,加了非空校验,怎 ...

  5. Tomcat笔记 #01# WEB应用管理工具简介

    索引 查看JVM以及SERVLET/接口的情况 动态管理WEB应用 Tomcat自带了一个基于网页的web应用管理工具,可以帮助我们监控&管理部署上去的WEB APP,特别方便!恰好之前碰到的 ...

  6. 根据RadioButtonList动态显示隐藏Div

    使用场景 今天在写项目的时候遇到一个需求,注册页面,用户先选择类型继而填表单,所以需要根据选择切换表单,使用的前端框架是MiniUI,但是在实现这个功能的时候mini.get()方法无法得到div元素 ...

  7. 【Alpha】Scrum Meeting 8

    目录 前言 任务分配 燃尽图 会议照片 签入记录 困难 前言 第8次会议在4月12日21:00进行微信会议. 交流确认了任务进度,对下一阶段任务进行分配.时长15min. 任务分配 姓名 当前阶段任务 ...

  8. ASP.NET Core开发总结

    1.关于浏览器缓存,修改CSS文件和Javascript文件后调试,浏览器不更新问题,解决办法是在link标签和script标签引用的文件名后面添加版本信息如下: <link rel=" ...

  9. 富文本编辑,xss攻击

    富文本编辑 KindEditor 在线HTML编辑器 http://kindeditor.net/doc.php 下载成功,解压放到项目中去 查看官方文档进行操作 xss攻击 XSS攻击全称跨站脚本攻 ...

  10. go 笔记

    Go 语言的变量声明格式为: var 变量名 变量类型 返回类型. 匿名变量不占用命名空间,不会分配内存.匿名变量与匿名变量之间也不会因为多次声明而无法使用. func GetData() (int, ...