测试和论证都是验证程序正确性的方法。git
测试是在一组测试用例上执行一个程序,并将实际结果与指望结果进行比较以揭示错误的存在,但不会精确地揭示错误所在之处。若是可能输入的集合很小,进行完全的测试时可能的,但若是输入集合很是大,则完全的测试时不可能的。测试的优势是易于实施,工程广为采用,缺点在于其不能彻底确保程序的正确性。编程
论证针对格式化的规格和代码实现,人工方式对代码逻辑进行分析,确认是否正确。论证能够对代码进行全面地分析,能够肯定错误的存在范围。论证是形式验证与天然语言层次逻辑推理的结合,缺点是没法确保天然语言层次逻辑推理的严谨性。安全
UML图表例如类图可用于描述规格,但还不足以描述规格的所有内容。对象建模中须要描述对对象的约束条件,一般用天然语言来描述。因为天然语言老是有二义性的,人们就使用无二义性的形式化语言,形式化语言对数学要求较高,对普通的从业人员来讲有必定难度。OCL就是在这样的背景下诞生的,OCL也是形式化语言,但它易于阅读和编写,而且语义清晰。微信
1) 初步认识面向对象程序的结构特色并发
2) 区分过程式程序与面向对象程序在结构上的主要差别gitlab
3) 初步认识面向对象程序的运行行为和调试学习
4) 初步认识输入处理与程序鲁棒性的关系测试
5) 初步掌握结构化输入的处理技巧网站
1) 如何把程序功能“均衡”分配给多个类spa
2) 如何让多个类之间进行协同
3) 初步熟悉基于队列的调度
1) 进一步理解调度逻辑及其设计
2) 开始掌握如何使用继承构造逻辑处理层次
3) 进一步训练类的均衡设计
4) 开始了解针对状态的测试设计
1) 理解和实践线程交互
2) 线程交互模式识别
1) 识别程序并发特征
2) 实践线程的主从协同模式
3) 基于锁的线程同步设计
4) 实践线程安全设计
5) 使用代码进行测试
1) 实践面向对象分析
2) 认识和实践线程交互的动态性
3) 实践线程工做状态控制
4) 实践设计原则
5) 继续实践线程安全设计
1) 熟悉过程规格的内涵和书写
2) 初步实践基于规格的方法实现
3) 实践基于异常处理的防护编程
4) 初步实践基于过程规格的测试设计
1) 熟悉类规格的内涵和书写
2) 实践基于规格的类实现
3) 实践契约式设计方法
4) 初步实践基于类规格的测试设计
1) 实践类型层次下的规格设计
1) 设计测试数据
2) 设计测试场景
3) 基于规格设计测试
1) 软件正确性内涵
2) 类实现的正确性论证
3) 方法实现的正确性论证
4) 子类实现的正确性论证
每次做业的关键要点用蓝色粗体字标出。
第一单元(1-3)初始面向对象,掌握类、继承等基本概念,练习均衡设计、类间协同。
第二单元(5-7)掌握线程设计、线程安全以及设计原则。
第三单元(9-11)学习规格设计的方法。
第四单元(13-14)练习程序测试、程序正确性论证。
每一个单元的知识点相对独立又相互联系,例如第四单元的代码测试,在前三个单元都有所涉及,又如第二单元设计原则,在第一单元的均衡设计部分有所体现。四个单元内容井井有条,按部就班,从开始的面向对象基础,到进阶的线程设计,再到更高层次的设计原则与规格化设计,最后到程序的测试与论证,构成了一个统一的体系。
在设计上,一开始毫无头绪(很庆幸作第一次做业时看到了教材上的部分代码),后来渐渐地可以理清要求,寻找出其中的对象,对象间的关系。测试上,最初是想到什么测什么,没有逻辑,后来可以按照分类树划分输入,分类测试。
做业上我以为能够有一次独立的规格设计做业,从设计,编写规格,到实现做为一个完整的过程。 第九、十、11次做业是在已有实现的基础上补充规格或者增长新的方法和规格,若是有一次一开始就用规格化设计的做业,也许能加深对规格化设计的理解。
每次做业的答疑若是能统一就行了,如减弱微信群的答疑功能,只在gitlab网站上答疑,而且对做业发布后的变化用单独的一个版块来更新。否则,同窗们既须要关注微信群,又要阅读全部的答疑帖才能知道做业要求的改变,耗费时间精力。
除了讲课和做业的制定上,老师能够参与更多,例如在gitlab上答疑等。“OO不易,和谐6系”这句话可能蕴含着一种较强的对立关系,若是老师的更多参与可以给同窗以引导,更多关注学习自己,而不是如何团结起来应付课程组,或许有更好的效果。
若是有同窗与老师或助教的面对面答疑时间就更好了,这样对同窗和助教的能力应该都有提高。