结对编程_stage2
| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | 2021春季软件工程(罗杰 任健) |
| 这个作业的要求在哪里 | 结对项目-第二阶段 |
| 我在这个课程的目标是 | 从实践中学习软件工程相关知识(结构化分析和设计方法、敏捷开发方法、软件测试、软件项目管理、软件开发工具和环境等),培养合作开发能力 |
| 这个作业在哪个具体方面帮助我实现目标 | 实践结对编程,学习在 CI 中进行单元测试 |
| GitLab 项目地址 | 2021_Minyi_Xiao-Yulong_Xu_pair_work |
| 学号后四位 | 3377 3436 |
一、结对编程感受
3436:
本次结对编程跟上次类似,主要在寝室及新主楼公共区域线下进行。首先在设计阶段,两人一起一条条的看指导书,边讨论大体的解决方法,将整体框架商讨好后,由我先写好设计文档的框架(包括要有哪些类,方法及属性),然后一起对设计文档进行商讨修改。
因为有了第一次结对的经验,这次的初步设计还算顺利,但当讨论区各种问题频出,指导书也进行相应修改,才发现我们的设计做的不够细,有很多地方细节没考虑到,导致后来还大改了一次设计。
3377:
如果不是结对编程,面对这么多的边界情况和如此规模的系统,我无法想象需要怎么样和队友合作,才能够达成一致。
二、项目总体设计和实现思路
先上 UML 类图:

顶层接口 MetaFile 完成对所有文件(包括链接)和目录的归一化管理;AbsFile 继承这个接口,负责管理硬链接和狭义上的文件。
一个使用了单例模式的 Manager 类完成两个大系统之间的交互。具体地,Manager 类有以下特点和职能:
- 只能有一个实例
- 构造方法是
private的,由该类自身创建自己的唯一实例 - 通过
getManager()方法将唯一实例交付给MyUserSystem和MyFileSystem Manager类存有一个静态属性time,用于对指令流计数Manager类同时使用两个静态属性存储MyFileSystem和MyUserSystem的实例引用,MyFileSystem和MyUserSystem也都存有Manager的实例引用,使得二者可以间接访问彼此的一些属性。比如MyFileSystem需要查询当前用户时,只需要调用manager.getCuUser()方法,而manager.getCuUser()会调用myUserSystem.getCuUser(),从而返回当前用户名。
重定向的实现:
- 硬链接直接持有一个文件类的引用,而软链接除了基本的
MetaFile元信息只存储一个绝对路径。 - 对于硬链接的文件操作,可以直接调用
AbsFile中的接口,硬链接完成了对这些接口重写。 - 软链接不直接存储文件或者目录,而是存储路径,则文件目录进行各种删除、移动、恢复操作时,不需要额外操作软链接,就能够保证文件系统的一致性。缺点是当需要进行软链接重定向时,都需要从根目录开始根据绝对路径进行寻址,实现较为复杂,且异常的抛出非常繁琐。
困难很多,总体可以归结为系统的规模较大,以至于无论设计还是编码的过程都很漫长,且难以直视全貌,容易在边界情况上出问题,就连复盘都很困难。而隐藏在系统规模表面之下的,首先是难以找到合适的协作模式,但更大的问题是设计和架构的缺陷在规模增加时会迅速暴露。
三、PSP 表格记录
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 10 | 20 |
| · Estimate | · 估计这个任务需要多少时间 | 10 | 20 |
| Development | 开发 | 785 | 1615 |
| · Analysis | · 需求分析 (包括学习新技术) | 60 | 210 |
| · Design Spec | · 生成设计文档 | 30 | 30 |
| · Design Review | · 设计复审 (和同事审核设计文档) | 15 | 20 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 5 | 5 |
| · Design | · 具体设计 | 15 | 120 |
| · Coding | · 具体编码 | 420 | 810 |
| · Code Review | · 代码复审 | 120 | 210 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 120 | 210 |
| Reporting | 报告 | 45 | 60 |
| · Test Report | · 测试报告 | 20 | 20 |
| · Size Measurement | · 计算工作量 | 5 | 10 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 20 | 30 |
| 合计 | 840 | 1695 |
总体来说,由于系统复杂度的增加,产生了许多边界问题。如果不在设计阶段把边界情况完全吃透,导致架构与期望不符,就需要通过大量补丁完善系统;然而指导书本身更新了多次(非常感谢助教学长们的辛勤付出,澄清了数十条理解容易产生歧义的地方),且我们的能力不足以设计阶段把边界情况全部吃透,因此还是不可避免地进行了许多小重构和打补丁,同时产生了很多不敢处理的冗余实现(或许测试驱动开发在这个问题上表现好一些,不至于基本不敢修改不知道什么时候写下的看似无意义的代码)。
关于实践时间远远高于预估时间的的原因,初始的想法是:题目本身的设计容错比较低,一旦设计和标程存在少许差异,就容易产生大量补丁;但经过编程实践以及复盘以后,我认为并不是这样,归根结底还是初始的设计太烂了,如果有一个比较好的设计,即使和标程存在差异,也不需要进行如此多的特判,也就不会在编码和测试上花费远远高于预估的时间。
结对编程_stage2的更多相关文章
- 结对编程--基于android平台的黄金点游戏
游戏内容: 阿超的课都是下午两点钟,这时班上不少的同学都昏昏欲睡,为了让大家兴奋起来,阿超让同学玩一个叫“黄金点”的游戏: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或1 ...
- 结对编程-地铁续(有种上个学期OO的既视感)
我们组比较特殊..三人结对 github:https://github.com/qingchanghan/WPFUI_Metro po一张照片: 石浩然,韩青长.陈彦吉 (台式机真的很高端,分屏贼帅) ...
- 结对编程项目——四则运算vs版
结对编程项目--四则运算vs版 1)小伙伴信息: 学号:130201238 赵莹 博客地址:点我进入 小伙伴的博客 2)实现的功能: 实现带有用户界面的四则运算:将原只能在 ...
- 关于软件工程结对编程作业 PairProject : Elevator Scheduler(电梯调度算法的实现与测试)的总结
1)结对编程队友 1106xxxx 张扬 1106xxxx 杨军 其中,此项目的编程实现主要由前者完成. 2)关于结对编程 结对编程的优点: 最直接的一点:在结对编程中,由于有另一个人在你身边和你配合 ...
- 结对编程—黄金点游戏WinForm单机版
本小游戏场景来自邹欣老师的<移山之道>一书: "阿超的课都是下午两点钟,这时班上不少的同学都昏昏欲睡,为了让大家兴奋起来,阿超让同学玩一个叫"黄金点"的游戏: ...
- Week4 结对编程
1.照片 1.1 结对编程参与者:李文涛.黎柏文 1.2 展示照片 2.结对编程的优点&缺点 2.1 优点 2.1.1.两人分工合作,减少了工作量 2.1.2.结对编程的伙伴往往能提供不同 ...
- 结对编程——关于Fault、Error、Failure程序设计
一.问题描述: 构造程序,分别是: •不能触发Fault •触发Fault,但是不能触发Error •触发Error,但是不能产生Fai ...
- GUI、模块化与结对编程(homework-03)
摘要: 在本次作业博客里,我将主要阐述作业3的收获.作业3表面是将之前的程序转换为图形界面(之前程序见http://www.cnblogs.com/shone/p/3348372.html),然而本质 ...
- BJDP结对编程活动
7月21日参与了 BJDP北京的活动 在北京首次参与能够参与动手编程活动,感觉挺不错的. 本次活动共有三项内容 1. 金锐分享单元测试的Mocking技术,20 mins 2. 伍 ...
随机推荐
- Flutter: IntrinsicWidth类,将孩子的宽度调整为孩子的最大内在宽度
文档 原文 class HomePage extends StatefulWidget { @override _HomePageState createState() => _HomePage ...
- 11_MySQL如何让数据分页显示
-- 数据分页 SELECT empno,sal FROM t_emp LIMIT 5;
- ext文件系统机制原理剖析
本文转载自ext文件系统机制原理剖析 导语 将磁盘进行分区,分区是将磁盘按柱面进行物理上的划分.划分好分区后还要进行格式化,然后再挂载才能使用(不考虑其他方法).格式化分区的过程其实就是创建文件系统. ...
- AttributeError: 'function' object has no attribute 'as_view'
我的描述:当我启用jwt_required来进行token验证的时候,我提示错误; 解决方案: 修改前代码: 修改后代码: 多看书.多多了解.多看看世界...
- 微信小程序:优化页面要渲染的属性
问题:页面中只用到四个属性:goods_name,goods_price,goods_introduce,pics,但是整个对象中有22个属性,小程序中建议:data中只存放标签中要使用的数据,而现在 ...
- .NET测试断言工具Shouldly
.NET测试断言工具Shouldly .NET测试 Shouldly在GitHub的开源地址:https://github.com/shouldly/shouldly Shouldly的官方文档:ht ...
- vscode中js文件使用typescript语法报错,如何解决
原因:由于vcode自身的语法检查有些问题 解决办法:在设置里面加上 "javascript.validate.enable": false 禁用默认的 js 验证 总结: 由于v ...
- vs2019远程调试
VS2019远程调试 这几天遇到个很是纠结的问题,同样的源代码,放在测试服务器,完美运行.但是上线正式环境就是死活显示不出来.于是想到了微软的远程调试功能,这里用VS2019举例. 下载远程访问工具 ...
- 『力荐汇总』这些 VS Code 快捷键太好用,忍不住录了这34张gif动图
之前写过三篇文章,收获了极其不错的阅读量与转发量: 你真的会用 VS Code 的 Ctrl.Shift和Alt吗?高效易用的快捷键:多光标.跳转引用等轻松搞定 VS Code 中的 Vim 操作 | ...
- Vmware虚拟机CentOS7、Ubuntu20系统设置静态IP,且主机和虚拟机系统能相互ping通。
目录 前言 一.VMware虚拟系统centos7设置静态IP 1.1 打开VMware虚拟网络配置窗口 1.2 方法1:通过DHCP服务给主机动态分配IP,同时设置centos静态IP 1.2.1 ...