软件工程结对编程做业

1.本次做业GitHub地址

项目地址git

2. PSP表

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

3.接口设计方法

在类的内部提供若干方法,属性为类内私有,调用者调用函数的时候输入合法的参数便可。github

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

算法说明

首先是对输入文本的处理,将输入的一个个单词看成图上的一个个点进行处理,采用邻接矩阵来储存边与边之间的距离,距离为被指向单词的长度。以后先对全部的单词进行拓扑排序,排序后能够知道这个图是否是有环的(若是有环那么排序后顶点的数量将少于图自己点的数量),从而采用两种不一样的方法处理。若是图是无环的,那么就用动态规划的算法来求出最长的路径长度和路径,若是要指定首字母,那么就在选择起点的时候选择符合的首字母做为起点;若是要指定尾字母,那么就对找到的路径从头开始检查,由于是无环的图,因此当找到指定的尾字母后,至多还有其后面的单词也为一样的尾字母,这样就找到了符合要求的单词链。若是图是有环的,那么就用DFS搜索每一个点做为起点的最长路径而后排序比较便可,若是指定首字母就选择符合要求的起点;若是指定尾字母就看符合要求的尾字母的链那个最长便可。算法

5. UML图

-该图为自动生成的,和队友的差很少编程

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

咱们小组开始没有对搜索进行优化,因此说有时候进行了大量的无用搜索。咱们主要对这个拓扑排序进行了优化,减小了不少没必要要的搜索。其次就是在处理-r参数时,咱们先判断了图,若是没有环,仍然调用拓扑排序来作。这样就减小了不少时间开销。咱们这个改进大概总共花费了6个小时吧函数

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

优势:保证了双方的代码质量
缺点:并非全部程序设计语言都有断言机制。oop

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

没有封装成core接口,因此测试很差作。
TEST_METHOD(TestMethod1) { string xx = "test.txt"; ProcessNoRing p = ProcessNoRing(xx); p.init(); p.getWord(xx); Assert::AreEqual(2, p.wordNum); }
后续会改进性能

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

-输入文件不存在单元测试

例如输入111.txt,可是在这个目录下没有这个文件,会报错:open file failed!!!学习

-输入的单词数量过多测试

例如输入五百个以上不一样的单词的文件,会报错:too many words!!!

-输入了有环的指令但图中没有环

报错:topologicalSort successed! 表示能够拓扑排序,图中无环

-输入了无环的指令但图中有环

报错:topologicalSort failed! 表示不能够拓扑排序,图中有环

-输入的首字母有除了字母以外的字符出现

报错:illegimate input as first char X(表示错误的字符)

-输入的尾字母有除了字母以外的字符出现

报错:illegimate input as last char X(表示错误的字符)

-输入的某个单词自身首尾相同

不会报错,不会自身成环

-输入单个字母的单词

不会报错,视为正常单词

10.界面模块(若是没有实现GUI,则能够描述命令行模块)的详细设计过程

这个主要就是运用状态机的知识来处理这个命令行参数。
主要函数有下面三个

void FirstState(char *argv[]);
void SecondState(char *argv[]);
void ThirdState(char *argv[]);

这个主要就是识别到-r进入第一个状态,而后识别到-h或者-t进入第二个状态,最后-w,-c进入第三个状态。
在这个过程当中,咱们会把一些参数转为bool型变量。

void FirstState(char *argv[]) {
    if (strcmp(argv[ArgvCnt], "-w") == 0 || strcmp(argv[ArgvCnt], "-c") == 0) {
        process = strcmp(argv[ArgvCnt], "-w") == 0 ? 0 : 1;
        ArgvCnt++;
        ThirdState(argv);
    }
    else if (strcmp(argv[ArgvCnt], "-h") == 0 || strcmp(argv[ArgvCnt], "-t") == 0) {
        ProStart = strcmp(argv[ArgvCnt], "-h") == 0;
        ProEnd = strcmp(argv[ArgvCnt], "-t") == 0;
        ArgvCnt++;
        if (strlen(argv[ArgvCnt]) == 1 && isalpha(argv[ArgvCnt][0])) {
            StartWord = argv[ArgvCnt][0];
            EndWord = argv[ArgvCnt][0];
            ArgvCnt++;
            SecondState(argv);
        }
        else {
            ErrorPrint(argv);
        }
    }
    else {
        ErrorPrint(argv);
    }
}

部分函数如上所示。

11. 界面模块(GUI或命令行模块)与计算模块的对接

int EnalbleLoop; //是否容许单词环 (0不容许,1容许)
int process;    //处理单词的方式 (0为单词数量,1为单词字母数)
int ProStart; //是否指定首字母(0不指定,1指定)
char StartWord; //首字母
int ProEnd;   //是否指定尾字母(0不指定,1指定)
char EndWord;  //尾字母
string fileName;  //文件路径

如上所示,这个界面模块和计算模块主要就是经过这几个全局变量进行对接,命令行的参数已经彻底转化为咱们所需的参数,直接调用便可。

12. 描述结对的过程

咱们结对编程大多时候就坐在一块儿写,偶尔经过QQ共享屏幕来一块儿完成。在思考方面,主要是各自上网搜集方法,我搜了无环的状况,他搜了有环的状况。而后他写了命令行输入的部分,我写了处理输入文件的部分,以后我完成了无环的部分,他完成了有环的部分,中间也一块儿讨论并告诉对方实现的原理。在结对的过程当中,咱们的确发现了对方编程时的bug,也统一了编程的风格,而且互相了解了对方完成模块的实现过程。

13. 说明结对编程的优势和缺点;结对的每个人的优势和缺点在哪里

结对编程

结对编程的优势:可让两我的互相监督对方,使得被监督者能被迫的专一,而且能够及时发现被监督者的bug
结对编程的缺点:两我的一块儿干一件事情,使得花费的时间变多,而且可能会闲聊。

队友

-优势1:开朗有热情
-优势2:随和有耐心
-优势3:踏实且认真
-缺点0:在时间规划上过于理想

本身

-优势1:不懂就问积极上网查找方法
-优势2:积极交流
-优势3:勇敢的发现bug
-缺点0:喜欢拖沓,实现部分功能便跑去作其余事情,不能一气呵成

14.PSP表格回填

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划
.Estimate 估计这个任务须要多少时间 2000
Development 开发
.Analysis 需求分析 (包括学习新技术) 220 250
.Design Spec 生成设计文档 160 120
.Design Review 设计复审 (和同事审核设计文档) 140 120
.Coding Standard 代码规范 (为目前的开发制定合适的规范) 40 30
.Design 具体设计 400 300
.Coding 具体编码 400 500
.Code Review 代码复审 250 200
. Test 测试(自我测试,修改代码,提交修改) 220 260
Reporting 报告
.Test Report 测试报告 200 100
.Size Measurement 计算工做量 30 20
·Postmortem & Process Improvement Plan 过后总结, 并提出过程改进计划 50 30
Sum 合计 2110 1930
相关文章
相关标签/搜索