项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2021春季软件工程(罗杰 任健) |
这个作业的要求在哪里 | 结对编程第二次作业 |
这个作业的GitLab项目地址在哪里 | 项目地址 |
参与结对编程的是哪两位 | 3808 3050 |
一、体验
1.From 3808
OO PTSD
ISSUE OVERFLOW
15-B1-016 PREFERRED LOCATION
感谢助教们对ISSUE的及时FIX
愿武运昌隆
2.From 3050
-
几天前还在看1906 oo人的笑话,今天发现小丑竟是我自己(
-
在熟悉之后结对效率的提高较为明显,夜里昏头的时候有另一个人帮忙看着指出错误效果极佳
-
再次认识到了需求分析的重要性,最开始没看出来cp操作有两种类型,拷贝和覆盖,然后出一个issue我惊诧一次。后来发现问题改正后至少再看那些issue就自然而然。这么说来指导书+issue其实真的有在暗示某种架构(当然啦肯定是标程吧),特别是在细节处理上,如果使用某种架构就能自然而然解决,但另一些方法,只要处理有不同就要极不优雅的特判。
-
单元测试很重要,发现了一堆大锅。两个人写测试确实能找到一个人照顾不到的地方
-
结对编程的项目应该和真正的工程需求还是有所不同的(应该是更有逻辑的),指导书也远比工作中有可能接触到的客户需求精准明晰,助教回复也超级及时,然而这样我们还是在需求分析上花了大量时间,确实觉得软件工程中需求的部分是最艰难的也最重要的。
3.结对编程方式
仍然沿用任务一时采用的Code with me
结对编程现场图:
二、设计实现思路
1.思路
1.1 文件系统
一切皆文件,目录、文件和链接均继承自抽象文件类
软链接仅保存绝对路径;硬链接仅保存所指对象的引用,且文件中包含保存所有指向自身的硬链接的列表,当文件发生更改时,会通知所有硬链接文件大小的变化
获取实体的方法分为重定向和不重定向,根据指导书要求选用不同方法
文件系统的mv
方法在确认可以完成move
操作后
- 如果不需要覆盖目标文件,直接将原文件从原文件的父文件夹中移除,并放置在目标文件夹中
- 否则,则在记录下目标文件的元数据后,移除目标文件,将元数据恢复到原文件后,再进行移除放置操作
mv
方法不涉及重定向操作,此外,当mv
操作涉及覆盖时,不需要保证被覆盖对象仍与其原有硬链接同步,因此可以上述操作
文件系统的cp
方法在确认可以完成copy
操作后,调用抽象文件类的抽象方法copy
,创建原文件的副本
- 如果不涉及覆盖,则直接将该副本添加到要被拷贝的目标文件夹下
- 如果涉及覆盖,且拷贝前后对象类型不同,采用类似
mv
中的先删除再添加方法(与ISSUE相关内容不同,但本次测试不涉及) - 如果涉及覆盖,且拷贝前后对象类型相同,则调用被拷贝对象的
coverFrom
方法,在保留目标文件元数据的同时,利用原文件的内容完成覆盖
1.2 用户系统
本次用户系统较为独立,且指导书内容较为明确,依次完成User
、UserGroup
和MyUserSystem
的设计、实现和测试工作
1.3 系统交互
通过在SystemManager
中设置两个静态变量,分别指向MyFileSystem
和MyUserSystem
,当两个系统需要交互时,通过两个静态变量获取所需内容即可
2.测试
测试文件代码量 = 功能文件代码量 * 3
2.1 回归测试
将第一次作业单元测试和第一次作业强测数据(根据第二次指导书要求内容做出对应修改)用作回归测试
2.2 针对测试
对30+ISSUE(不包含【不测】类型的ISSUE)编写测试数据,进行针对性测试
2.3 单元测试
针对新功能编写单元测试数据,进行全面的单元测试
三、PSP
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 5 | 10 |
· Estimate | · 估计这个任务需要多少时间 | 5 | 10 |
Development | 开发 | 1690 | 2635 |
· Analysis | · 需求分析 (包括学习新技术) | 30 | 200 |
· Design Spec | · 生成设计文档 | 30 | 10 |
· Design Review | · 设计复审 (和同事审核设计文档) | 30 | 20 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 5 |
· Design | · 具体设计 | 30 | 100 |
· Coding | · 具体编码 | 500 | 600 |
· Code Review | · 代码复审 | 60 | 100 |
· Test | · 测试(自我测试,修改代码,提交修改) | 1000 | 1600 |
Reporting | 报告 | 70 | 60 |
· Test Report | · 测试报告 | 30 | 30 |
· Size Measurement | · 计算工作量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 20 |
合计 | 1765 | 2705 |