结对项目第一阶段博客
结对项目第一阶段博客
一些基本信息
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2021春季计算机学院软件工程(罗杰 任健) |
这个作业的要求在哪里 | 结对项目-第一阶段 |
我在这个课程的目标是 | 培养软件开发过程中的团队合作能力,了解软件工程中的开发过程 |
这个作业在哪个具体方面帮助我实现目标 | 首次实践结对编程 |
GitLab 项目地址 | https://gitlab.buaaoo.top/2021_alige_homeworks/pair_works/2021_rui_ma-junjie_dong_pair_work |
学号后四位 | 7155 5044 |
结对编程的感受
本次作业是第一次进行结对编程,资料中经常提到,与两个人独立工作相比,结对编程能编写出质量更高的代码,对于这一点我们深表同意。在结对编程中,两个人可以对项目中的各个方面进行讨论,不管是整体的设计还是某些Java语言中是实现细节,都可以采取两个人的想法中更好的那一个来实现。此外,两个人共同编程能够减少一些小bug的出现,“驾驶员”长时间编码,难免会由于疲劳等原因出现各种错误,这时“领航员”就能够进行一些提醒,减少bug的产生,调试bug的速度也会变快。
总而言之,结对编程会牺牲一定的效率,但是能提升代码质量,降低错误率。我们组的两位同学之前比较熟悉,磨合适应的也比较快,这次作业写的也比较顺利。
设计和实现思路
采用树状结构来实现文件系统的增删改查。编写一个抽象的节点(Node)类来表示树中的节点,由于本次作业中要求的文件系统中包含文件和目录,编写文件(File)类和目录(Directory)类继承节点(Node)类。Node类中有一个指向父目录的指针(根节点的这个指针指向自己),Directory类中新增一个HashMap<String, Node>类型的字典用来存储其子目录和文件。
此外,我们再MyFileSystem类中编写了解析输入路径以及在树中寻找下一个节点的方法,将关于寻找路径的一部分功能解耦,其他方法可以调用这两个方法。在以上基础上,本次作业中简单文件系统不难实现。
结对编程过程记录
由于组内一位同学目前在外校交流期间,无法展开线下结对编程。我们尝试过以下工具进行线上结对编程。
-
腾讯会议:腾讯会议可以进行语音和屏幕共享,并且网络连接比较稳定,但是并不具有远程操控同伴电脑的功能。
-
TeamViewer:TeamViewer可以进行语音,并且能够远程操控同伴的机器,实现类似于两人交替在同一台电脑上编程的功能。
-
CodeWithMe:CodeWithMe是idea中的一个插件,可以连接到对方的idea同时编辑一个Project中的文件,同时进行语音交流。此外还可以互相看到对方的光标,同时编辑不同的文件。这个插件是这几种工具中我们认为最适合进行远程结对项目的,唯一的缺点是在使用中经常遇到网络不佳的情况。
各个模块的耗时情况
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 10 | 10 |
· Estimate | · 估计这个任务需要多少时间 | 10 | 10 |
Development | 开发 | 585 | 790 |
· Analysis | · 需求分析 (包括学习新技术) | 10 | 10 |
· Design Spec | · 生成设计文档 | 10 | 10 |
· Design Review | · 设计复审 (和同事审核设计文档) | 15 | 15 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
· Design | · 具体设计 | 60 | 60 |
· Coding | · 具体编码 | 300 | 400 |
· Code Review | · 代码复审 | 60 | 45 |
· Test | · 测试(自我测试,修改代码,提交修改) | 120 | 240 |
Reporting | 报告 | 30 | 30 |
· Test Report | · 测试报告 | 10 | 10 |
· Size Measurement | · 计算工作量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 10 | 10 |
合计 | 625 | 830 |