结对作业

一)项目GitHub地址

(https://github.com/awfsgdf/coyg)

二)PSP表格

Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
计划 60 60
· 估计这个任务需要多少时间 60 60
开发 1000 1810
· 需求分析 (包括学习新技术) 300 60
· 生成设计文档 60 30
· 设计复审 (和同事审核设计文档) 60 30
· 代码规范 (为目前的开发制定合适的规范) 60 10
· 具体设计 60 240
· 具体编码 1000 1080
· 代码复审 60 60
· 测试(自我测试,修改代码,提交修改) 200 300
报告 220 180
· 测试报告 100 60
· 计算工作量 60 60
· 事后总结, 并提出过程改进计划 60 60
合计 3240 4100

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

1.信息隐藏:类属性私有,被调用方法共有
2.接口设计:单词链计算功能独立
3.松耦合:核心可以单独调用

四)计算模块接口的实现过程

先把以a-z开头的单词分别存在26个向量中,把以a-z结尾的单词分别存在26个向量中,以这52个向量来保存图的信息,然后根据图的信息和输入的参数计算出可以作为遍历开始的点的集合,然后依次以这个集合里的点作为DFS的起点,进行深度优先搜索。

五)UML图


六)计算模块接口部分的性能改进

在没有环的图中,由于图的结构比较简单,我认为爆搜全部路径是一种奢侈,于是采用了类似剪枝的方法,省去了大量肯定得不到最长路径的遍历,运行时间比较短。在有环的途中,无奈本人学艺不精,找不到更高效的方法,只能DFS爆搜,但是我发现我的爆搜过程严重超时,经过分析和比对,我发现我的DFS的特别之处在于它传入的无用的参数太多了,于是我把一些变量设置为全局变量,不在作为参数传入,这样修改之后跑同一份代码的时间竟然缩短为原来的十分之一!(从十分钟到一分钟)由此我了解到,函数传入的参数过多确实会严重影响运行效率。

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

优点:契约式设计能够使设计更加优秀;
缺点:耗时较大;

八)计算模块部分单元测试展示。

单元测试得到的测试覆盖率截图

九)计算模块部分异常处理说明。

异常处理函数 功能
void check_h_and_t(char head, char tail, bool have_head, bool have_tail); 检查是否存在head开头和tail结尾的单词
void check_file(); 检查输入单词文件的路径是否正确
void check_loop(bool enable_loop, int size); 检查输入的单词集合有无环是否和-r参数匹配
void check_null(char *word); 检查传入的char *word[]里是否有空指针
void check_char(int i); 检查传入的单词列表里是否都是英文单词
void check_void(int len); 输入的单词列表的单词数量是否小于2
void check_2(); 检查搜索到的单词列表里的单词数量是否小于2
void check_same(); 检查输入的单词列表中是否有重复的单词
int find_arg(int argc, char *argv[], arg &w, arg &c, arg &h, arg &t, arg &r, char &head, char &tail); 检查传入的参数组合是否出错,如果出错,以int形式返回错误的类型以便分情况报错
十)界面模块(如果没有实现GUI,则可以描述命令行模块)的详细设计过程。
参数的定义和作业要求一致,当参数输入不符合逻辑时会报相应错误,例如-w和-c同时出现,或者-t参数错误等等。

十一)描述结对的过程,提供非摆拍的两人在讨论的结对照片。

先分开写了一部分代码和gui,然后在封装测试等部分

十二)结对编程优缺点

优点:
1.可以相互学习,不断提高
2.可以相互督促,快速完成
3.可以一起把控,提高代码质量
缺点:
容易引起矛盾和争执

我个人的优点:
1.认真好学
2.积极交流
3.有耐心

个人缺点:

我的结对对象优点:
1.代码能力强
2.很肝
3.善于思考

缺点:
急躁

原文地址:https://www.cnblogs.com/Arsenalgooner/p/10534499.html