第一次结对编程总结
项目 | 内容 |
---|---|
作业所属课程 | 2021春季计算机学院软件工程(罗杰 任健) |
教学班级 | 周五上午 |
项目地址 | Gitlab地址 |
学号后四位 | 张书恺:3146 李巳辰:3464 |
结对编程感受
经过第一阶段的结对编程,我们初次体会到了结对编程的优势所在 尽管一直在为除去寝室以外,很难找到“有插座+能交流+有座位”的地方而苦恼。
- 首先是需求分析方面,我们小组对指导书的每一字每一句都挨个进行了细致的分析,在力求对每个指令二人理解完全一致的前提下,全方面考虑了可能出现的特殊情况,例如 mkdir -p a/b/..
touch a/b.txt/ 等等。这相比于之前单人完成OO项目时,在前期做出的考量明显更为全面且事半功倍。我们在遇到对需求有不同理解时会进行重点讨论与记录,避免后期工作出现差错。 - 再者是代码规范与具体设计方面,这也是与往日单人编程花费时间有明显差距的地方。由于我们二人的代码风格有很大的“代沟”,例如对临时变量的命名(某人偏爱极简风格,某人钟爱详尽露骨风格);因此为了解决这个问题,我们花了较多时间统一书写格式,以及提前定义接口。
- 最后是结对进行代码编程书写,我们主要采用了一人书写,一人观察,提出异议,并思考是否考虑了全部可能的结对方式。例如我在书写cd指令时,我会先就我对cd指令进行的流程与李同学进行交流,达成共识后开始书写。每进行一个操作(如书写一个if/else条件,进入一次循环,新建一个类时),我都会向李同学解释,“我这一步在做什么,我想要达到什么目的”,在我书写的过程中,李同学负责思考是否所有banch都考虑周全,以及该banch我是否实现正确。每当书写完一个模块后,为了提高效率,我们会交换位置:李同学负责紧接着书写该模块的Junit单元测试,我负责思考下一个模块的逻辑与实现方法。
- 3-23 新北-1共享空间摄
- 3-24 寝室摄
- Gitlab部分集成记录
- 微信交流记录
总的说我们给第一次结对编程体验打90分,由于我们双方水平相近,不会出现一人carry一人摸鱼的尴尬情况,思考框架时一起思考能更早、更全的考虑到所有情况,书写代码时分工交替工作能劳逸结合,并且一人书写一人检查,极大降低了出现逻辑漏洞的可能,完美达到了“1+1 > 2”的目标。
期待下次合作。
项目程序的设计与实现思路
我们将本次项目主要划分为以下三个部分:
- dirPath、filePath解析器:使用正则表达式来判断输入的dirParh与filePath命名格式上是否合法,若不合法则报错;合法则将地址进行切割,分割成多个node,最终形成List数组,返回给fileSystem进行指令实现。
- 指令实现部分:根据指令类型与返回的List<Node>对rootDirectory下的目录文件树进行建立叶节点,查询,删除等操作,同时判断dirPath与filePath路径格式上是否合法,并持续更新currentDirectory来追踪当前目录。
- 单元测试部分:使用Junit对fileSystem中各个指令进行全覆盖单元测试,我们最终语句覆盖率达到了99%。
PSP表格记录各个模块的开发上所需的时间和实际花费时间。
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
· Estimate | · 估计这个任务需要多少时间 | 15 | 20 |
Development | 开发 | ||
· Analysis | · 需求分析 (包括学习新技术) | 100+30 | 150+40 |
· Design Spec | · 生成设计文档 | 90 | 60 |
· Design Review | · 设计复审 (和同事审核设计文档) | 30 | 60 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 20 |
· Design | · 具体设计 | 60 | 150 |
· Coding | · 具体编码 | 420 | 360 |
· Code Review | · 代码复审 | 60 | 120 |
· Test | · 测试(自我测试,修改代码,提交修改) | 360 | 400 |
Reporting | 报告 | ||
· Test Report | · 测试报告 | 30 | 30 |
· Size Measurement | · 计算工作量 | 2 | 2 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 30 |
合计 | 1257 | 1442 |