zoukankan      html  css  js  c++  java
  • 结对项目作业

    结对编程作业


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

    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.计算模块接口的设计与实现过程

    共计五个接口,

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

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

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

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

    • 省略细节

    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交流 (基本都是夜深人静的时候写代码,不好用语音类的工具)

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

    结对编程:

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

    我:

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

    队友:

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

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

    • 见第2部分

    总结:

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

  • 相关阅读:
    2019第二周作业
    求最大值及其下标
    查找整数
    2018秋季学习总结
    抓老鼠 亏了还是赚了
    币值转换
    打印沙漏
    从文本中找出url,并附上链接。
    手机端点击输入框页面会放大
    <dl>、<dt>和<dd>标记的用法
  • 原文地址:https://www.cnblogs.com/JeromyLee/p/12560670.html
Copyright © 2011-2022 走看看