Github项目地址:数独
本次博客记录代码功能测试结果及代码性能分析和改进。
测试结果
生成测试
在cmd界面输入sudoku.exe -c 20 生成结果如下:输入 sudoku.exe -c 1000生成1000个数独终局:
可以看到生成时间为118ms,在项目要求的60s范围内。
解题测试
cmd终端输入sudoku.exe -s problem.txt。problem.txt中有8个数独题面:
性能分析
vs自带性能分析工具显示:
可以看到输出函数占用时间最多。很多同学在做这个项目时都遇到了这个问题,我也询问了其他同学有没有什么好的方法改进。经过改进我将输出部分改为如下:
FILE* fp;
//ofstream OutputFileSolveSudoku("solve.txt",ios::app);
int pos = 0;
if (Is_First_Task == true) //如果是第一个问题,就在求解之前输出一行空行
{
fp = fopen("solve.txt", "w");
}
else
fp = fopen("solve.txt", "a+");
if (Is_First_Task == false)
fprintf(fp, "\n");
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
char x = sudoku[i][j];
fputc(x, fp);
if (j != 9)
{
fprintf(fp, " ");
}
}
fprintf(fp, "\n");//存入换行符
}
fclose(fp);
if (Is_First_Task == true)
Is_First_Task = false;
改进后的性能分析:
感悟总结
这次项目前期节奏过慢,因为各种复习等因素一直拖到最后才做完,时间的把控上没有做到位。但进行项目的过程中我的的确确感受到上课时老师讲述的软件工程的实现过程,并自己实践了一番。在这个过程中我体会到软件工程的确是一个需要综合考虑的过程,而不仅仅是写完代码这么简单。比如我考试前写了大部分代码,但是没有养成仔细写注释的习惯,导致我考完试想要继续进行时花费了很多时间研究我之前的代码。而且之前写的时候思路很混乱,bug百出,最后只能重新写。
除此之外这个项目由于时间原因一些更细化的测试也还没有做到位,比如代码覆盖率测试;优化的代码仍有改进的余地,虽然到了ddl但之后还是要将这个项目进行修正完善。
完整PSP表格
PSP2.1 | Personal Software Process Stages | 计划用时(min) | 实际用时(min) |
---|---|---|---|
Planning | 计划 | / | |
Estimate | 估计任务运行时长 | 10 | 5 |
Development | 开发 | 60 | 120 |
Analysis | 需求分析(包括学习新技术) | 90 | 80 |
Design spec | 生成设计文档 | 120 | 60 |
Design Review | 设计复审(和同事复审设计文档) | 30 | 90 |
Coding Standard | 设置代码规范 | 30 | 20 |
Design | 具体设计 | 180 | 360 |
Coding | 具体编码 | 1440 | 1500 |
Code Review | 代码复审 | 120 | 180 |
Test | 测试 | 300 | 300 |
Reporting | 报告 | 60 | 60 |
Test Report | 测试报告 | 240 | 180 |
Size Measurement | 计算工作量 | 30 | 20 |
Postmortem &Process Improvement Plan | 回顾总结 | 60 | 30 |
/ | 合计 | 2770 | 3005 |