结对编程_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. 伍 ...
随机推荐
- wireshark 获取指定进程id的数据
>netstat -aon | findstr 11380 TCP 191.127.1.7:57936 29.225.107.216:3734 ESTABLISHED 11380 过滤器: tc ...
- 「NGK每日快讯」12.14日NGK公链第41期官方快讯!
- django学习-4.url动态传值
1.前言 我们在浏览器访问一个网页A是通过一个指定的url地址去访问的.但在浏览器用一个不存在的url地址去执行访问是打不开正确的网页的,只会打开一个浏览器自带的有错误提示的网页. 在django框架 ...
- 02.Fancy Indexing
import numpy as np x = np.arange(16) index = [3,5,8] x[index] array([3, 5, 8]) X = x.reshape(4,-1) X ...
- Mybites逆向工程的搭建
这个链接写的很全:https://www.cnblogs.com/whgk/p/7140638.html 这段时间太忙,等周末写上自己尝试的步骤.暂时仅作记录.
- Django Admin 图片路径设置显示为图片(imageField显示方法设置)
一 使用环境 开发系统: windows IDE: pycharm 数据库: msyql,navicat 编程语言: python3.7 (Windows x86-64 executable in ...
- 简单的ssm练手联手项目
简单的ssm练手联手项目 这是一个简单的ssm整合项目 实现了汽车的品牌,价格,车型的添加 ,修改,删除,所有数据从数据库中拿取 使用到了jsp+mysql+Mybatis+spring+spring ...
- IDEA中便捷内存数据库H2的最简使用方式
在IDEA中有时候为了练习,需要使用到数据库,但如果自己工作或开发机子上本来没有安装数据库,也没有可用的远程数据库时,我们可以直接在IDEA环境上使用便捷式的内存数据库H2,关于H2更多知识就自己去找 ...
- MyBatis(二):自定义持久层框架思路分析
使用端 引入架构端Maven依赖 SqlMapConfig.xml-数据库配置信息(数据库连接jar名称.连接URL.用户名.密码),引入Mapper.xml的路径 XxMapper.xml-SQL配 ...
- kubernetes生产实践之redis-cluster
方案一 自定义yaml文件安装redis cluster 背景 在Kubernetes中部署Redis集群面临挑战,因为每个Redis实例都依赖于一个配置文件,该文件可以跟踪其他集群实例及其角色.为此 ...