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