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

    结对作业

    开发耗时

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

    接口设计

    在设计之初,考虑到为降低代码单元的耦合度,我们将需求简单拆分为3个类,分别是输入,输出,和单词处理。使各个代码单元之间的耦合度尽量最低,不需要与其他代码纠缠不清。将类封装,数据以接口的形式传入。

    计算模块接口的设计和实现过程

    • 在最初分析需求时,我们将代码分成4个类,分别是负责输入数据的input,输出需要数据的output,对需求处理的wordHandler,和统合的main。
      input类含函数:FIleInput(); 用于提取文件中的单词信息。
      output类含函数:_output(); 用于输出要求的计算结果数据。
      wordHandler类含函数:get_chain_word(); 用于寻找最多单词数的最长链。
      get_chain_char(); 用于寻找最多字母数的最长链。
      这三个类每个类都是很独立的代码单元,三者间并没有什么关系,使得程序的耦合度很低。

    • 算法的关键是:蛮力求解。

    • UML图

    • 计算模块接口部分的性能改进
      因为查找的最长链为无序数组,所以在进行查找比较时并无优化可说,查找的时间复杂度仍未O(n)。

    Design by Contract, Code Contract对结对作业的影响

    这促使我们组在结对工作时按时按点准时开始工作,每次工作都尽量不拖延按时完成计划好的工作进度。

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

    • 测试代码
    TEST_METHOD(TestMethod1)
    		{
    			FileInput fin;
    			fin.readFile("D:\word_chain\01.txt");
    			wordHandler wh(fin);
    			char *words[20];
    			vector<string> result;
    			wh.gen_chain_word(words, 0, result, 0, 0, false);
    			Assert::IsTrue(result.at(0) == "apple");
    			Assert::IsTrue(result.at(1) == "elephant");
    			Assert::IsTrue(result.at(2) == "toad");
    		}
    
    		TEST_METHOD(TestMethod2) {
    			FileInput fin;
    			fin.readFile("D:\word_chain\02.txt");
    			wordHandler wh(fin);
    			char *words[20];
    			vector<string> result;
    			wh.gen_chain_char(words, 0, result, 0, 0, false);
    			Assert::IsTrue(result.at(0) == "pseudonym");
    			Assert::IsTrue(result.at(1) == "moon");
    		}
    
    • 测试数据
      在测试数据上,我们除了边界数据和错误数据外,还测试了以同一单词重复出现的情况

    • 测试覆盖率截图

    计算模块部分异常说明

    • FINException:检测用户输入文件不合法时,抛出异常,main中捕获直接退出。

    命令行设计过程

    按指导书中的命令行参数,设计了解释程序。如出现'-r',则将对应的bool型变量置为true,'-h'则按顺序读入下一个命令行参数,将其复制给char型变量,'-t'同上。'-w'先按顺序读入下一命令行参数作为文件路径,调用gen_chain_word()接口;'-c'同上,不同在于调用gen_chain_char()接口。读到文件路径后完成对命令行的解析。

    while (true)
    	{
    		con = false;
    		switch (ptr[1])
    		{
    		case 'r':
    			recur = true;
    			con = true;
    			break;
    		case 'h':
    			ptr++;
    			head = *ptr;
    			con = true;
    			break;
    		case 't':
    			ptr++;
    			tail = *ptr;
    			con = true;
    			break;
    		case 'w':
    			fun = 'w';
    			break;
    		case 'c':
    			fun = 'c';
    			break;
    		default:
    			break;
    		}
    		if (con)
    		{
    			i++;
    			ptr = argv[i];
    			continue;
    		}
    		else
    		{
    			break;
    		}
    	}
    	try
    	{
    		fin.readFile(argv[i + 1]);
    	}
    	catch (FINException& fine)
    	{
    		fine.what();
    		return 0;
    	}
    	if (fun == 'w')
    	{
    		wordHandler whword(fin);
    		whword.gen_chain_word(_words, _len, result, head, tail, recur);
    	}
    	else if (fun == 'c')
    	{
    		wordHandler whchar(fin);
    		whchar.gen_chain_char(_words, _len, result, head, tail, recur);
    	}
    	else
    	{
    		cout << "Invalid command!" << endl;
    	}
    
    

    结对体验

    两个人结对编程有助于提升代码质量,随时复审,能尽早发现和解决一些问题,两个人可以拓宽思路,避免一个人陷入死胡同。

    对结对作业的优缺点

    • 优点

      • 能随时复审,能够及时发现逻辑错误
      • 能在发现问题是互相交流拓宽思路
      • 双方适时的交换角色能改变角度审视自己的逻辑和代码细节
    • 缺点

      • 在发现bug交流时容易打断个人的思路
  • 相关阅读:
    BZOJ 4033: [HAOI2015]树上染色 (树形DP)
    BZOJ 1820: [JSOI2010]Express Service 快递服务 DP
    BZOJ 4664: Count 插块DP
    BZOJ 1899: [Zjoi2004]Lunch 午餐 DP
    BZOJ 4559 [JLoi2016]成绩比较 (DP+拉格朗日插值)
    BZOJ1485 [HNOI2009] 有趣的数列 (卡特兰数)
    BZOJ 2111 / Luogu P2606 [ZJOI2010]排列计数
    20190915模拟赛
    深海机器人问题
    太空飞行计划问题
  • 原文地址:https://www.cnblogs.com/sakura1234/p/10534159.html
Copyright © 2011-2022 走看看