软件工程第三次作业

这个作业属于那个课程 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1
作业要求 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10494
作业目标 1.学会使用与创建PSP表格。
2.用Java实现代码。
3.性能分析来找出代码中性能瓶颈并改进。
4.使用单元测试对项目进行测试
作业正文 https://www.cnblogs.com/Eternity-5/p/12559842.html
其他参考文献 https://www.baidu.com https://github.com/

1.GitHub项目地址

https://github.com/Eternity-5/20177649

2.PSP表格

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

3.思路描述

①.百度百科

数独盘面是个九宫,每一宫又分为九个小格。在这八十一格中给出一定的已知数字和解题条件,利用逻辑和推理,在其他的空格上
填入1-9的数字。使1-9每个数字在每一行、每一列和每一宫中都只出现一次,所以又称“九宫格”。

②.大体思路

我们所要求是总共包含n个盘面,每两个盘面间空一行,每个盘面中,每两个小格之间有一个空格;待填入的格子用0代替。输入保证有且
仅有一个解。首先我们可以一步一步从简到难,先完成三宫格,在一步步进阶。要解决的问题首先是要创造一个盘面,以用于放置数字。
而后就是判断是否满足题目要求。最后输入文件名以命令行参数传入,调用所需函数得到相应的答案。

4.实现过程

整个代码包括Sudoku与Lib两个类。

①.Sudoku类主要实现的是对命令行参数传入的判断,在main函数中调用Lib类实现数独的解答。


②.Lib类中有box判断函数,DFS函数以及solve函数。


③.流程图(左图:Sudoku中main函数过程 右图:solve函数流程图)




5.性能分析


性能分析部分还是不太会分析,整体代码中main主函数中的char[]数组花费时间长,要改进的话也是从这方面改进吧,太难了,争取下次改进。






6.单元测试

①部分测试用例

*命令形式输入


*用例


②异常处理

*参数异常处理(在cmd中以参数形式输入时,各个参数的异常处理。目标在于实现正确的参数输入)


*文件不存在异常(文件不存在时,无法读取文件)


7.代码说明

*判断填入的数字能否填入该空(对比该空对应的行列宫是上的数字,如果相同则不能填入数字)


*DFS算法填入数字


*solve函数(在文件中读取,写入,调用DFS函数解数独)



8.心路历程

之前看到数独,觉得还不是很难,慢慢能解出来。现在看到要自己搞一个出来,刚开始的时候真的一筹莫展
找了百度,查解答过程,查代码思路等等,花了好几天无从下手。。。实在太难了!!!!!!! 怪自己以前没学好,
难受。。。在网上看了一些解答数独的过程,借鉴了好多大佬,可算是搞出来了。虽然有些还没搞出来,但是真的
尽力了!!争取下次改进。对自己最大的收获就是加深了对DFS算法的理解,以及对Java文件的输入输出等等。虽然不
是自己完完整整搞出来的,但是也付出了努力,还是挺开心的,希望以后慢慢能自己解决问题,能力慢慢提上去。


原文地址:https://www.cnblogs.com/Eternity-5/p/12559842.html