结对项目第二阶段小结
基本信息
项目 | 内容 |
---|---|
本作业所属课程 | 2020春季软件工程(罗杰 任健) |
本作业要求 | 采用结对编程的形式完成一个简单的文件管理系统 |
- 学号后四位:1045、3298
- Gitlab:https://gitlab.buaaoo.top/2021_alige_homeworks/pair_works/2021_xinyu_deng-shuai_luan_pair_work
结对编程感受
1045
相比于第一次结对,这次合作配合的确实更好了。这次主要的问题不是出在编码,而是出在需求理解。这次增加了软链接、硬链接、移动、拷贝,这四个十分灵活的指令,为了能够操作软链接文件,其在不同指令具有不同的语义,再加上这四个指令在<dstpath>
已存在且为目录时会缺省对目录下的<srcname>
进行操作,所以分支情况很多,更进一步,为了减少指导书篇幅、避免一致性问题,很多条件和分支都采用了xx指令同样处理,不在赘述
类似的描述。所以很多时候需要通过issue来进行提问,但是问题就出来了,单独在宿舍编程的时候,遇到需要等待issue解答的情况,可以先去做别的事情,但是结对编程的时候,我们都专门腾出时间,在食堂进行结对编程,等待解答就无事可做,所以就按照自己的理解先做了,然后等解答有了结果再回来改,有些地方蒙对了,不用再改了,但是有些地方就需要重新来写了。
3298
本次软工作业最大的难度可能就是读懂指导书吧.指导书多次出现下面不在赘述
的字眼,感觉非常需求难以理清.虽然和队友提了很多issue,但是到现在都不敢说自己弄懂了指导书.直到最后一天还在照着issue看有没有什么遗漏的地方.这次作业可能就是在锻炼我们不要跟产品经理打架的能力吧.每次食堂写完代码都是痛苦面具,吃饭都不想去新北负一楼了.
而我跟队友的配合也越来越默契,这次帮队友分担了一部分的单元测试,第一次写单元测试的感觉还是有点微妙的,直到周三我们都没有通过弱测,然后写了一部分单元测试以后找到了bug,从此对单元测试由黑转路了.
程序设计和实现思路
本次作业相对于上次作业,主要有两方面改动,一方面是用户管理系统,这一部分都是比较常规的增改删查,另一方面是文件系统加入了软链接、硬链接、拷贝、移动,这一部分不仅和之前的部分有很深的耦合,其提供的灵活性也造成了很大的麻烦。
对于硬连接部分,为File
类建立内部类InnerFile
,原本的创建时间、修改时间、创建用户、内容等信息全部在InnerFile
中保存,File
只保存路径相关的属性,如父目录引用、文件名,创建硬链接时,多个File
引用相同的InnerFile
以达到设计要求。值得注意的是,虽然软链接本质为文件,并且在cp
、mv
等指令中与文件有相同的行为,但是由于设计需求中不要求对软链接建立硬链接,所以软链接类Redirection
并没有采取File
类似的设计。如果有条件的话,会考虑让File
和Redirection
拥有相同的基类,该基类负责对内容的控制,File
和Redirection
分别负责对内容不同的解释方式。
另外,本次作业加入了操作的原子要求,即一个操作要么全部完成,要么什么更改都不进行,所以我们加入了简单的事务管理,不考虑多个事务的协同,同时只能进行一个事务。具体的实现方法是每一个对FileControlBlock
的修改操作,都向RollbackStack
中注册一个回调函数以撤销其更改,当事务提交时,清空RollbackStack
,当事务因异常而失败时,将RollbackStack
中的回调函数依次弹出并调用,进行撤销。由于之前已经将每一个FileControlBlock
的可变部分强制分离出来,添加到内部类FileControlBlock.ModifyHandler
中,所以这样的实现并不困难。
以下为FileControlBlock
部分的模型的UML图:
时间花费记录
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
· Estimate | · 估计这个任务需要多少时间 | 10 | 10 |
Development | 开发 | ||
· Analysis | · 需求分析 (包括学习新技术) | 20 | 30 |
· Design Spec | · 生成设计文档 | 10 | 10 |
· Design Review | · 设计复审 (和同事审核设计文档) | 10 | 10 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
· Design | · 具体设计 | 10 | 30 |
· Coding | · 具体编码 | 400 | 600 |
· Code Review | · 代码复审 | 100 | 200 |
· Test | · 测试(自我测试,修改代码,提交修改) | 200 | 400 |
Reporting | 报告 | ||
· Test Report | · 测试报告 | 10 | 10 |
· Size Measurement | · 计算工作量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 10 | 10 |
合计 | 800 | 1320 |