HansBug/pair_program_word_chain
PSP2.1 | Personal Software Process Stages | 预估耗时(小时) | 实际耗时(小时) |
---|---|---|---|
Planning | 计划 | 0.5 | 0.4 |
· Estimate | · 估计这个任务需要多少时间 | 0.1 | 0.2 |
Development | 开发 | 20 | 22.7 |
· Analysis | · 需求分析 (包括学习新技术) | 6 | 5 |
· Design Spec | · 生成设计文档 | 0.5 | 0.1 |
· Design Review | · 设计复审 (和同事审核设计文档) | 0.5 | 0.1 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 0.5 | 0.4 |
· Design | · 具体设计 | 0.5 | 0.3 |
· Coding | · 具体编码 | 10 | 13 |
· Code Review | · 代码复审 | 1 | 0.8 |
· Test | · 测试(自我测试,修改代码,提交修改) | 1 | 3 |
Reporting | 报告 | 1 | 0.4 |
· Test Report | · 测试报告 | 0.3 | 0.1 |
· Size Measurement | · 计算工作量 | 0.2 | 0.1 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 0.5 | 0.2 |
合计 | 21.5 | 23.5 |
在本次结对编程中,我们一共分为几个模块:
文件core.h
EXPORT int TEST_LIB_PLUS(int a, int b);
EXPORT int gen_chain_word(char *words[], int len, char *result[], char head, char tail, bool enable_loop);
EXPORT int gen_chain_char(char *words[], int len, char *result[], char head, char tail, bool enable_loop);
计算模块对外接口即为上面所述的core.h
内的接口。
内部包含functions.h
,为顶层功能。
// check if words is valid
int words_precheck(const std::vector<std::string> &words);
// check if there is word circle
int words_circle_check(const std::vector<std::string> &words);
// get longest word chain with word count
int get_chain_with_word(const std::vector<std::string> &words, std::vector<std::string> *&link,
const char &start_with, const char &end_with);
// get longest word chain with word length
int get_chain_with_char(const std::vector<std::string> &words, std::vector<std::string> *&link,
const char &start_with, const char &end_with);
int get_chain_with_word_allow_same(const std::vector<std::string> &words, std::vector<std::string> *&link,
const char &start_with, const char &end_with);
int get_chain_with_char_allow_same(const std::vector<std::string> &words, std::vector<std::string> *&link,
const char &start_with, const char &end_with);
在此之下,我们共同实现了Graph
类,用于支持所有的图论计算。
在Graph类上,我们封装了SimpleChainModel
和WordChainModel
两个类,用于对图论的构图,计算,数据调度等行为进行底层封装。
即流程为:
core.h
调用functions.h
(因为用指针传递字符串数组实在太难受了)functions.h
调用SimpleChainModel
和WordChainModel
,进行逻辑层面的运算。SimpleChainModel
和WordChainModel
调用Graph
,进行底层数据结构层面的运算。说来尴尬,其实我们一开始就对于1、2、3需求设计成了最优解,通过建立虚节点,进行构图,将整个问题抽象为无环图的最长路径。
可以大概看出,我们的程序中,尤其是计算模块,大量使用了stl进行运算。
不过整体的性能瓶颈基本上依然集中于graph和Model的计算方法。
契约式设计。即当程序满足一些约定好的最基本需求时才进行运行,否则直接拒绝运行。
优点:
缺点:
画界面用的是 QT 自带的 QT Designer 设计工具。这个工具灰常好用,所见即所得,操作又略略繁琐,虽然耗费了我们大量的时间来熟悉这个鬼东西,但最终还是取得了不错的效果。
QT Designer 设计的界面是保存在一个名字为.ui
文件中的,这个文件采用 xml 语言描述了界面设计。在编译QT App时,QT会自动将这个 .ui 文件转换成一个 .h 文件,我们可以直接在代码中使用这个文件,特别方便。
我们的 GUI 是采用 QT
框架实现的,它具有以下特色:
界面模块与计算模块的对接最后进行的几个步骤,此时我们已经完成了核心模块的编写,因此,直接在代码中调用核心模块的头文件即可正常编写代码,再配合上cmake
,就能自动进行动态链接。
所以,对接就这样完成啦。
袁勤 | 我 | |
---|---|---|
优点 | 1、认真负责,守时2、代码水平不错3、自学能力强4、钻研探索的精神很不错5、总而言之感觉是个很令人觉得靠得住的队友 | 1、写代码不算太慢,ddl当天大改需求半小时莽完200+行代码2、写代码准确性不算太低,半小时莽完后零debug一遍全部通过3、会用git,知道如何自建gitlab |
缺点 | 1、让他的队友在填写这一栏的时候很是为难 | 1、其懒无比,拖延症,大鸽子一只2、不好好看需求,ddl当天发现需求错误 |