PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
Planning | 计划 | 70 | 30 |
· Analysis | · 需求分析 (包括学习新技术) | 240 | 160 |
· Design Spec | · 生成设计文档 | 70 | 30 |
· Design Review | · 设计复审 (和同事审核设计文档) | 20 | 10 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 20 | 10 |
· Design | · 具体设计 | 120 | 70 |
· Coding | · 具体编码 | 360 | 480 |
· Code Review | · 代码复审 | 120 | 60 |
· Test | · 测试(自我测试,修改代码,提交修改) | 120 | 160 |
· Test Report | · 测试报告 | 120 | 360(生成测试覆盖率找了很久) |
· Size Measurement | · 计算工做量 | 40 | 25 |
· Postmortem & Process Improvement Plan | · 过后总结, 并提出过程改进计划 | 40 | 20 |
合计 | 1340 | 1415 |
information hidinggit
信息隐藏,有利于程序编写过程当中,设计决策相应的改变。经过信息隐藏,防止类或者其他的软件组件被客户端所访问到,提供稳定的接口进行交互。github
interface design算法
用户界面设计,经过用户界面设计,使得用户在完成本身的任务时与被设计对象之间的交流尽量地简单高效,经过图形设计能够提升界面的可用性。编程
loose coupling数据结构
松耦合,在计算机运算和系统设计中,一个松耦合的系统中的每个组件对其余独立组件的定义所知甚少或一无所知。子范围包括类、接口、数据和服务之间的耦合。[1] 松耦合是紧耦合的对立面。app
计算模块的接口主要就是提供两个要求的接口,其中分别为oop
gen_chain_word(char* words[], int len, char* result[], char head, char tail, bool enable_loop)
gen_chain_char(char* words[], int len, char* result[], char head, char tail, bool enable_loop)布局
Path *LongestPathFrom(char start, bool isWeighted); (用于计算已知起点的最长路径) Path *LongestPathBetween(char start, char end, bool isWeighted);(用于计算已知起点和终点的最长路径) Path *LongestPathTo(char end, bool isWeighted);(用于计算已知终点的最长路径) Path *LongestPath(bool isWeighted); (用于计算图中最长路径) bool IsCyclic(); (判断是否含有相应的环)
契约式设计(英语:Design by Contract,缩写为 DbC),一种设计计算机软件的方法。这种方法要求软件设计者为软件组件定义正式的,精确的而且可验证的接口,这样,为传统的抽象数据类型又增长了先验条件、后验条件和不变式。这种方法的名字里用到的“契约”或者说“契约”是一种比喻,由于它和商业契约的状况有点相似。性能
TEST_METHOD(TestMethod1) { TEST_INIT(11, "Algebra", "Apple", "Zoo", "Elephant", "Under", "Fox", "Dog", "Moon", "Leaf", "Trick", "Pseudopseudohypoparathyroidism"); GEN_CHAIN_WORD(0, 0, false); ASSERT_RESULT_LEN(4); ASSERT_RESULT("algebra", 0); ASSERT_RESULT("apple", 1); ASSERT_RESULT("elephant", 2); ASSERT_RESULT("trick", 3); GEN_CHAIN_CHAR(0, 0, false); ASSERT_RESULT_LEN(2); ASSERT_RESULT("pseudopseudohypoparathyroidism", 0); ASSERT_RESULT("moon", 1); GEN_CHAIN_WORD('e', 0, false); ASSERT_RESULT_LEN(2); ASSERT_RESULT("elephant", 0); ASSERT_RESULT("trick", 1); GEN_CHAIN_WORD(0, 't', false); ASSERT_RESULT_LEN(3); ASSERT_RESULT("algebra", 0); ASSERT_RESULT("apple", 1); ASSERT_RESULT("elephant", 2); }
计算模块的单元测试展现如上图所示,其中主要用到的方法为TEST_INIT , ASSERT_RESULT_LEN , ASSERT_RESULT , 其中TEST_INIT主要是经过对输入的单词进行初始化,存入相应的数据结构之中。ASSERT_RESULT_LEN为对结果的长度的检验。ASSERT_RESULT则是对最后结果的检测,检测结果是否为响应的正确内容。单元测试
测试覆盖率图片
一张为核心计算模块的覆盖率测试报告,一张为命令行程序的覆盖率测试报告
// pre.command 异常测试 TEST_METHOD(TestMethod6) { try { Preprocess pre; int argc = 1; char ** argv = new char *[argc]; argv[0] = new char[10]; strcpy(argv[0], "Wordlist.exe"); pre.command(argc, argv); Assert::Fail(); } catch (std::exception e) { } }
// 有环但enable_loop是false,应该抛出异常 TEST_METHOD(TestMethod1) { TEST_INIT(7, "gag", "fag", "glitz", "zaf", "jof", "fij", "lkkj"); Assert::ExpectException<std::exception>([&] { GEN_CHAIN_WORD(0, 0, false); }); }
界面模块是咱们组后来推动的内容,主要由个人搭档编码。
gui部分主体为两个单词框,其中一个用于输入,另外一个用于输出,对于单词链首字母与单词链尾字母等相关内容,在右侧经过复选框等内容进行选择。同时要从文件读取的话,能够经过下拉选单实现相应功能。
部分代码示例以下:
leftLayout = new QVBoxLayout; rightLayout = new QVBoxLayout; topRightLayout = new QHBoxLayout; bottomRightLayout = new QHBoxLayout; mainLayout = new QHBoxLayout; // 左边的输入输出框 leftLayout->addWidget(inputLabel); leftLayout->addWidget(inputTextEdit); leftLayout->addWidget(outputLabel); leftLayout->addWidget(outputTextEdit); // 右上角的单词数最多和字母数最多单选框 topRightLayout->addWidget(maxLabel); topRightLayout->addWidget(wordRadioButton); topRightLayout->addWidget(charRadioButton); // 右下角查找和导出按钮 bottomRightLayout->addWidget(findButton); bottomRightLayout->addWidget(exportButton); // 右边布局 rightLayout->addLayout(topRightLayout); rightLayout->addLayout(headLayout); rightLayout->addLayout(tailLayout); rightLayout->addWidget(loopCheckBox); rightLayout->addWidget(extractButton); rightLayout->addLayout(bottomRightLayout); mainLayout->addLayout(leftLayout); mainLayout->addLayout(rightLayout);
合做小组的学号:16061011,16061152
咱们两个小组对于dll的使用方式有所不一样,致使一开始,双方都不能跑对方的程序,最后咱们各自做出了相应的调整,解决了相应问题。
咱们将对方组的core模块添加了相应的def文件以后,最后成功运行出了相应的结果。
对方组用咱们组的core模块之时,程序没法正确运行,最后咱们将源码合在一块儿后找出相应问题并修正,同时在core模块中添加了相应的去重处理。
缺点就是这样的编码方式可能不少同窗不是很习惯,同时两我的都有本身的想法,须要花费较多的时间达成共识才能够进行相应的编码
编码风格不太一致
该格式内容的文字表示引用网上相关内容,