结对项目作业

结对编程作业


1.在文章开头给出教学班级和可克隆的 Github 项目地址

  • 教学班级:005
  • 项目地址: https://github.com/Junhaoo/IntersectProject2.git

2.在开始实现程序之前,在下述 PSP 表格记录下你估计将在程序的各个模块的开发上耗费的时间

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划
· Estimate · 估计这个任务需要多少时间 20 10
Development 开发
· Analysis · 需求分析 (包括学习新技术) 300 640
· Design Spec · 生成设计文档 30 60
· Design Review · 设计复审(和同事审核设计文档) 30 30
· Coding Standard · 代码规范(为目前的开发制定合适的规范) 10 10
· Design · 具体设计 60 60
· Coding · 具体编码 240 180
· Code Review · 代码复审 60 120
· Test · 测试(自我测试,修改代码,提交修改) 60 40
Reporting 报告
· Test Report · 测试报告 30 30
· Size Measurement · 计算工作量 20 20
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 60 120
Total 合计 920 1320

3.看教科书和其它资料中关于 Information Hiding,Interface Design,Loose Coupling 的章节,说明你们在结对编程中是如何利用这些方法对接口进行设计的

  • 除了尽可能使用private修饰成员变量外,最有代表性的就是接口的使用。接口本身就是Information Hiding的实现。类与类、层与层之间不展示细节,只进行必要的通信,从而达成Loose Coupling,最大程度降低了模块之间的依赖性,几乎不用担心彼此的影响,但对设计的要求也更高,是多人开发常用的手段。但有些情况下,也不适合使用接口、松耦合等方式,如整个任务本身各个部分的耦合度较高时,松耦合的设计不仅在难度上提高了不少,而且也会直接影响性能。
  • 在我们的项目中,将核心部分单独设计,通过输入,得到输出,不展示其他细节,如使用容器,实现方法等。具体实现见第4部分。

4.计算模块接口的设计与实现过程

结对项目作业_第1张图片

共计五个接口,

  • addPlot用于添加几何图形
  • removePlot用于删除几何图形
  • printPlots用于打印(返回)所有几何图形
  • printDots用于打印(返回)所有交点
  • reloadIOstream用于重载输入输出流

其中的难点在于删除几何图形,实现主要依靠重复点的存取。
使用两个容器:set ,multiset

前者存储无重复的点集,后者存储可重复的点集(对于三条以上线交于一点的情况),每次removePlot操作,将multiset中与移除几何图形相关的点全部剔除,再将multiset去重得到set,总体时间复杂度仅为去重的时间复杂度,无需重新生成一遍点集。

5.画出 UML 图显示计算模块部分各个实体之间的关系

结对项目作业_第2张图片

  • 省略细节

6.计算模块接口部分的性能改进

  • 并没有做出性能改进

7.看 Design by Contract,Code Contract 的内容,描述这些做法的优缺点,说明你是如何把它们融入结对作业中的

  • 在我的理解中,契约式设计的核心就是assert的使用,可能出现未知错误的地方都assert一下。这样确实能够保证正确性,但有时候,对assert内容的处理是很十分重要的,一句assert就可以把包袱甩出去。可能会使得另一方的编程由完成目标变成了完成契约
  • 结对作业中并没有应用到DbC

8.计算模块部分单元测试展示

  • 无单元测试环节

9.计算模块部分异常处理说明

主要设计了三种异常:

OutRangedException:输入的数据超出给定的(-100000,100000)范围

DuplicatedDotException:用于确定几何图形的两点重合

UnknownTypeException:除了C,L,R,S之外的其他类型

10.界面模块的详细设计过程

  • 由于对时间的把握不充分,以及对C++的不熟悉,从选择UI的开发工具到选定工具,再到学习相关工具的使用,花费了过多的时间,没能按时完成。

11.界面模块与计算模块的对接

12.描述结对的过程

主要靠QQ交流 (基本都是夜深人静的时候写代码,不好用语音类的工具)

结对项目作业_第3张图片

13.结对编程的优点和缺点与结对的每一个人的优点和缺点

结对编程:

  • 优点:相互学习;提高积极性;1+1>2(大概)。
  • 缺点:门槛较高,需要至少一方对开发环境、流程等有较清楚的认识,否则,结果基本都是1+1<2。

我:

  • 优点:善于熬夜、抗压能力强、敢于尝试新技术
  • 缺点:对新知识理解太慢、拖延症

队友:

  • 优点:写代码较快、C++较擅长(比我好)、善于测试
  • 缺点:拖延症

14.在你实现完程序之后,在附录提供的PSP表格记录下你在程序的各个模块上实际花费的时间

  • 见第2部分

总结:

对于本次作业的完成情况很不满意,虽然花的时间比大多数人要多了不少,但对于学习新知识以及寻找合适的工具还是很不擅长,时间安排也很不合理。会在接下来的一周内继续完善项目,直到自己满意。

你可能感兴趣的:(结对项目作业)