第三周作业
第三周作业
PSP在本人个人项目中的应用
Personal Software Process (PSP)是卡内基梅隆大学提出的指导软件工程师的个人软件开发过程的模型,最新版本是PSP2.1。本人的个人项目是一个用于五子棋游戏的AI,用户可以通过鼠标在棋盘上下棋跟AI进行对弈。以下是PSP2.1所描述的各项流程及其在本项目中的具体体现:
计划
- 估计这个任务需要的时间
本项目最初的计划只是做出一个可以使用的AI,主要用于跟结对项目中的图形界面配套使用,并没有涉及GUI。在此境况下对任务需要的时间估计为7天。后来因为老师对个人项目规模的调整,而且AI编写的比较顺利,所以又计划加上了GUI,预计10天内完成整个项目的代码编写。
开发
-
分析需求
由于时间关系,并没有写出正式的需求规格说明书。由于这个项目只是用于学习开发流程与实践动手能力,该项目也没有向某个特定用户提取需求或者考虑与同类软件竞争等。该项目最初的功能性需求主要是根据用户的落子能够相应地给出有利于程序自己方胜利的落子方案,非功能性需求主要是每次计算时间在人可以接受的范围内,程序能够方便的跟其它五子棋游戏集成。后来决定添加图形界面后,增加了用户可以用鼠标进行落子,图形界面实时显示局面,胜负判断,和棋判断,重新开局,图形化AI设置等需求。 -
生成设计文档
由于时间关系没有生成设计文档。 -
设计复审
由于没有设计文档,也没有组队,所以没有进行设计复审。 -
代码规范
没有特意为本项目编写成文的代码规范,主要是按照本人以往的代码规范习惯进行编码,然后通过coding平台的质量分析功能提供的代码分析建议对不规范的地方进行修改,最终实现项目在Eclipse上无警告,coding平台质量分析0问题。 -
具体设计
由于时间关系,没有提前编写详细设计文档。 -
具体编码
具体编码情况已托管至coding平台。(项目链接) -
代码复审
由于个人项目没有团队成员,故未进行代码复审。 -
测试
由于时间关系,没有安排独立的测试环节,项目的测试主要在编码时每次新增修改代码后自行进行测试。测试的方式主要是在可以运行之后通过跟AI进行对弈观察其是否有异常情况。测试也取得了一些效果,比如测试个出了以下几个问题:- 已搜索到游戏结束的状态仍然继续向后搜索,并以之后的实际不可能发生的状况进行局面的判断;
- 逻辑错误导致运算量过大,以及AI在无法找到不输的落子方案的情况下无法落子,并产生空指针异常;
- 不按照最少步数取胜;
- 无意间递归调用导致界面不停重绘并占用大量CPU资源;
- ……
在测试中,我感到从书本上学到的一些测试上的知识,比如黑盒测试、白盒测试等对于这个项目来说比较难以下手。虽然本项目中的一些函数可以使用这些方法进行测试,但是从整体上看,其实我也并不知道对于我的落子方式,AI的期望输出结果到底应该是怎样。虽然AI的算法是确定性的,但是其计算量已经远远超出了我可以手动模拟的范围。对于AI的反应,我无法判断AI是完全正常,还是编码产生了错误,或者是虽然它的反应不是最优的,但是这个算法找到的结果就该这样。我只能通过跟它对弈时从感性的方式判断它是否有问题。关于怎么用科学的方法来测试它,这是我的一个困惑的地方。
记录用时
由于我每天都将代码上传至coding平台,其自动记录了我在这个项目上以天为单位的用时情况:从8号晚上到19号凌晨,差不多10天时间,跟估计值基本一致。今后将尝试以小时为单位进行更精确的用时记录。
测试报告
由于时间关系,并没有进行独立的测试,故无测试报告。
事后总结
本文即为事后总结。
提出过程改进计划
从总结可以看出,由于时间等原因,本项目并没有完成PSP 2.1中规定的许多开发步骤。在以后的开发实践中,我将更加注重软件开发的流程,时间允许的情况下不忽略任何步骤,加深对软件过程的认识与体验。