第二次结对编程总结

项目 内容
作业所属课程 2021春季计算机学院软件工程(罗杰 任健)
教学班级 周五上午
项目地址 Gitlab地址
学号后四位 张书恺:3146 李巳辰:3464

 

结对编程感受

第二阶段的结对编程作业相比于第一阶段难度有很大的提升,这对我们的结对编程也很大的挑战。

  • 第二阶段我们计划先写根据指导书单元测试,再进行接口的实现。由于发现userSystem和fileSystem的交互很少,所以我们先进行fileSystem单元测试的修改。先根据指导书新建fileSystem的新增方法(如ln、mv、cp等)的单元测试,再在第一阶段的单元测试的基础上为原有的方法(如cd、touch等)新增针对软硬链接的单元测试,不过这两次对单元测试的修改都默认当前用户为root。不过为了提高效率,单元测试的构造过程并非有两双眼睛盯着,有些只需要复制粘贴加一丢丢改动的工作就交给一个人来完成了,另一个人改为构建userSystem的单元测试。虽然最后事实证明这样的单元测试仍存在一些笔误。

  • 单元测试构建完后,我们根据issue#2上的思路,在userSystem和fileSystem的上层新建了SystemSwitch类,采用单例模式。经过讨论,我们发现SystemSwitch类只需要有很少的用于信息传递的接口,于是我们决定先对fileSystem的接口实现的思路进行讨论。在有了一个大体的实现思路后,我们进行了分工,一个人着手对fileSystem进行修改,另一个人实现userSystem的相关接口。由于userSystem本身较为简单,再加上构建单元测试后对需求十分熟悉,所以只用了约两个小时就完成了。之后的工作就是两个人边修改fileSystem边进行单元测试,然后debug,并完善单元测试的覆盖率。顺便对单元测试中的笔误和与指导书要求不符的地方进行修改,因为每一个issue的出现都可能导致对指导书的新的理解。

实际上,由于代码实现时有太多的细节要注意,我们经常因对指导书理解有偏差而重新修改代码。这个过程不仅降低了效率,还在消磨我们的意志。虽然没有明面的责怪,但心中的不满早已暗流涌动,不过我们还是共同努力坚持了下来。即使最后结果可能并不理想,但结对编程的过程仍是一笔宝贵的财富。

 

项目程序的设计与实现思路

我们将本次项目主要划分为以下四个部分:

  • MyFileSystem:用递归方法寻找路径,再在每个方法中调用递归方法,根据返回结果进行讨论。由于不同的指令的需求不同,我们实现了多个递归方法,如dirDiGui、makeDirDiGui等。
  • MyUserSystem:分别在User和Group中用Map存储对对方的依赖关系,在MyUserSystem中也用Map存储当前User、所有User和Group,根据指令需求进行相关的判断。
  • SystemSwitch:采用单例模式,MyFileSystem和MyUserSystem在创建时自动向SystemSwitch添加自己的引用,然后SystemSwitch实现用于信息交换的接口。
  • 单元测试:使用Junit对MyFileSystem、MyUserSystem和SystemSwitch中各个指令进行全覆盖单元测试。
     

PSP表格记录各个模块的开发上所需的时间和实际花费时间。

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 90 120
Estimate 估计这个任务需要多少时间 15 20
Development 开发 60 30
Analysis 需求分析 (包括学习新技术) 0 0
Design Spec 生成设计文档 120 75
Design Review 设计复审 (和同事审核设计文档) 60 80
Coding Standard 代码规范 (为目前的开发制定合适的规范) 30 20
Design 具体设计 120 180
Coding 具体编码 420 720
Code Review 代码复审 60 120
Test 测试(自我测试,修改代码,提交修改) 120 480
Reporting 报告 45 60
Test Report 测试报告 30 30
Size Measurement 计算工作量 2 2
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 30 30
合计 1202 1967
posted @ 2021-04-02 14:11  xxlscxx  阅读(97)  评论(2编辑  收藏  举报