Overview
首先这门课的考核形式由 HW (20%), Midterm exam (20%), and Final project (60%, can include extra bonus) 三部分组成。在期末项目中,每个人将会负责每个 pj 中的一个 part。
HW
对于作业部分,基本上可以概括为 uml diagrams, uppaal, testing, and pyqt practice four parts。作业难度比较简单,且有一定的开放性,但是由于发布的时效性,可能对于卷怪组的 project 进度没有帮助,需要提前自学
Midterm
首先是期中考核的形式,该课程允许携带任意数量的纸质 cheatsheet,你可以进行自我总结,或是打印 ppt。接着是期中考核的内容,大概包含 uml diagram (考试批改比较松,只要能画出关键部分即可满分),uppaal (难度最大的 part,比如检查模型中是否存在 deadlock,亦或是给出模型,来让你判断对应 property 是否成立),testing (给定一段代码程序,写出要求路径,或是给出满足对应 coverage 的最小数目 cases),state machine (与 CA 类似)。每个 part 的内容在 ppt 中均有对应,好好复习 ppt,考试基本没什么问题。
Final Project
我们这一届的期末 project 包括 bank,painkiller,and elevator 这三个 system,并且该课程于今年完全转向 python 开发和测试。对于开发部分会给出相应的框架,对于一些项目可能需要自己将前后端的实现 split,并且实现他严格要求的 api requirement (最恶心的一集,因为最开始说允许学生有自我的实现,但最后的 api test 是给定的,需要严格按照他给的 api 定义实现。因此你的框架搭建也要与他的对应,并且这 requirement 他还会中间偷偷改,你可能需要多关注 piazza 和 blackboard 中的通知和代码文档。同时这个 part 在今年其实是算 bonus 的,不想卷的同学按照自己的实现也可以,但自我实现也要符合老师和助教们的认知!!!)。对于测试部分,主要包含 unit test,integral test,and functional test,该部分利用 unittest 库实现即可。测试部分同时还包含 model checking,你需要利用 uppaal 搭建一个与你的 system 实现近似的 model 来检验对应的性质 (一般比较基础能够验证 system 的 basic rule 即可。搭建过于复杂的 model 会卡死在性质验证)。Project 除去代码还要写大量的文档,这一点需要提前注意,文档的内容决定了你的一大部分成绩(可遵循有了就行原则。
Daily Routine
该课程在前八周基本没有任何 workload,第一次的 consultation 只需要简单的实现 requirement 部分即可,第二次 consultation 实现简单的 UI 即可,同时在第二次 consultation 左右还会有期中考试。最后的四周会在班级里组织线下的 consultation,有问题来跟老师沟通即可。江老师人比较好,上课讲的比较细致,在 consultation 中也能给出一些关键的意见。如果报了该课程,可以多与助教和老师进行沟通,并且在实现中多与你的队友沟通。
Advice
报该课程时,最好选择两个信得过的队友,毕竟每个人只负责每个 project 的一个 part,需要能够时刻联系上自己的队友进行实现和细节上的沟通 (警惕会消失的队友)。并且如果你有志做出三个完成度不错的项目,可能你需要投入不少的时间和精力,因为 “未定” 的 requirement。对于期末 pj 和 cheatsheet 或许你可以参考我的github和个人主页了解更多,该课程我最终获取了 A + 的成绩。