【个人项目】项目记录:github链接、设计实现、单元测试、性能分析与改进、PSP完成表格、总结反思
项目记录
一、github链接
链接:https://github.com/LLFKirito/SudokuWork-BIT1120161918/
二、设计实现
总体设计
程序流程图如下
程序分为main、define、initial、create、solve五个文件,分别实现对外接口,数据结构定义与输入输出、初始化、创建数独终局、解数独。
具体解题思路已经在前面的博客中完成。
函数关系图
代码规范
参考教材上的注释示例:
/// <summary> ??? </summary>
根据种方案写注释。
函数命名采用下划线命名法。
自定义数据类型用大写命名。
三、单元测试
一共设计了12个单元测试:
覆盖率如下:
四、性能分析与改进方案
输入量为1e6的性能分析图:
生成1e6的文件在本地运行大概用时为15s左右。
创建数独终局主要耗时在print上,改用输出流进行有效提升效率。
解数独主要消耗在反复调用程序上,将程序改为内联函数,以及通过位运算提升了效率。对于各行格列各九宫格必须1-9出现一次仅一次,采用一个int型的数的一bit来表示,位运算效率是很高的。
五、PSP表格总结
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
Planning | 计划 | ||
Estimate | 估计这个任务需要多少时间 | 30 | 30 |
Development | 开发 | ||
Analysis | 需求分析 (包括学习新技术) | 180 | 300 |
Design Spec | 生成设计文档 | 90 | 90 |
Design Review | 设计复审 | 30 | 30 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 20 | 20 |
Design | 具体设计 | 120 | 180 |
Coding | 具体编码 | 900 | 1100 |
Code Review | 代码复审 | 360 | 360 |
Test | 测试(自我测试,修改代码,提交修改) | 200 | 200 |
Reporting | 报告 | ||
Test Report | 测试报告 | 150 | 160 |
Size Measurement | 计算工作量 | 90 | 90 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 90 | 90 |
合计 | 2260 | 2650 |
六、总结与反思
短短三周完成一个项目,难度其实挺大的。说来最难得部分可能不是写代码,代码部分实现还算比较简单,主要难在测试和分析上,这些都是第一次使用,很多东西都是现学现用。
这也是我第一次使用GITHUB,虽然以前也有账号,但这是我第一次上传文件。上传文件可能花费的时间比想象中的多得多,在本地用git指令克隆到指定文件夹这种操作太诡异了,一时半会儿根本hold不住。
测试分析用的那些软件真的是以前没有用过,完全需要自学。这个过程是相当懵逼的,不过收获确实蛮大的。
这次编写代码也不像以前就一个源文件,分了多个源文件最终来编写这个项目。写代码的时候也参考了书上的一些要求,为了方便测试,专门减少循环的嵌套,对于多重循环有意更改程序结构,减少循环嵌套。写注释也按照书上的要求来写,第一次写这么规规整整的代码吧。
简而言之,个人项目的完成提升了自己各个方面的能力。尤其是结构化编程,如何做一个项目,前前后后要做的事情,软件工程不只只是编写代码,Code只是其中很小的一部分,这个工程让我深深刻刻的感受到了。
这次编写代码也不像以前就一个源文件,分了多个源文件最终来编写这个项目。写代码的时候也参考了书上的一些要求,为了方便测试,专门减少循环的嵌套,对于多重循环有意更改程序结构,减少循环嵌套。写注释也按照书上的要求来写,第一次写这么规规整整的代码吧。
简而言之,个人项目的完成提升了自己各个方面的能力。尤其是结构化编程,如何做一个项目,前前后后要做的事情,软件工程不只只是编写代码,Code只是其中很小的一部分,这个工程让我深深刻刻的感受到了。