结对做业

一)项目GitHub地址

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

二)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.松耦合:核心能够单独调用github

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

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

五)UML图


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

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

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

优势:契约式设计可以使设计更加优秀;
缺点:耗时较大;函数

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

单元测试获得的测试覆盖率截图
oop

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

异常处理函数 功能
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.善于思考

缺点: 急躁

相关文章
相关标签/搜索