【个人项目】项目记录:github链接、设计实现、单元测试、性能分析与改进、PSP完成表格、总结反思

项目记录

一、github链接

      链接:https://github.com/LLFKirito/SudokuWork-BIT1120161918/

二、设计实现

总体设计

     程序流程图如下

【个人项目】项目记录:github链接、设计实现、单元测试、性能分析与改进、PSP完成表格、总结反思


       程序分为main、define、initial、create、solve五个文件,分别实现对外接口,数据结构定义与输入输出、初始化、创建数独终局、解数独。

       具体解题思路已经在前面的博客中完成。


函数关系图

【个人项目】项目记录:github链接、设计实现、单元测试、性能分析与改进、PSP完成表格、总结反思

代码规范

       参考教材上的注释示例:

/// <summary> ??? </summary>

       根据种方案写注释。

       函数命名采用下划线命名法。

       自定义数据类型用大写命名。


三、单元测试

       一共设计了12个单元测试:

【个人项目】项目记录:github链接、设计实现、单元测试、性能分析与改进、PSP完成表格、总结反思
       覆盖率如下:
【个人项目】项目记录:github链接、设计实现、单元测试、性能分析与改进、PSP完成表格、总结反思

四、性能分析与改进方案

      输入量为1e6的性能分析图:

【个人项目】项目记录:github链接、设计实现、单元测试、性能分析与改进、PSP完成表格、总结反思

      生成1e6的文件在本地运行大概用时为15s左右。

【个人项目】项目记录:github链接、设计实现、单元测试、性能分析与改进、PSP完成表格、总结反思

      创建数独终局主要耗时在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只是其中很小的一部分,这个工程让我深深刻刻的感受到了。