第2次作业 双人结对项目—四则运算小程序(王迪 汪绍航)
1、代码仓库
代码仓库中项目地址 https://github.com/GitHubw-b/cunku
2、PSP图
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
|
|
·Estimate |
·估计这个任务需要多少时间 |
30 |
40 |
Development |
开发 |
|
|
·Analysis |
·需求分析 (包括学习新技术) |
30 |
120 |
·Design Spec |
·生成设计文档 |
90 |
120 |
·Design Review |
·设计复审 |
60 |
90 |
Coding Standard |
代码规范 (为目前的开发制定合适的规范 |
|
|
·Design |
·具体设计 |
60 |
90 |
·Coding |
·具体编码 |
180 |
200 |
·Code Review |
·代码复审 |
60 |
60 |
·Test |
·测试(自我测试,修改代码,提交修改) |
60 |
60 |
Reporting |
报告 |
|
|
·Test Repor |
·测试报告 |
40 |
40 |
·Size Measurement |
·计算工作量 |
20 |
40 |
Postmortem&Process Improvement Plan |
·事后总结, 并提出过程改进计划 |
60 |
60 |
|
总结 |
630 |
860 |
3、工程学习日志
学习时间: 2019.10.2 0800-0950;1900-2100;
学习内容:上午学习内容主要是学习了课堂知识如何结对编程,了解到结对编程中有领航员和驾驶员,驾驶员负责写设计文档,进行编码和单元测试等方面的内容。领航员主要负责审阅驾驶员的文档;监督驾驶员对编码等开发流程的执行;考虑单元测试的覆盖率,帮助驾驶员解决具体的技术问题。当然,驾驶员和领航员是不断变换角色的,尽量两个人干同一个工作不超过1小时。在晚上1700-2100期间,我们进行了编程项目的讨论和编程需求分析,一开始打算编写黄金点小游戏,需求就是可以设计难度即进行房间的选择,后来有人选择了这个项目,我们进行更换,选择使用一点的小程序,图书管理录入和查询系统,并且进行需求分析。我们的面对群体为小县城或者小城镇的书店,为了更好帮助顾客查询自己想要的书籍,可以按照书名、作者、出版社等进行排序,当然往后可以根据顾客的需求继续更新程序。初步的项目基本确定。
自我效率评价:主要进行书上科目的学习,初步了解结对编程是什么,以及如何进行结对编程,效率一般。
学习时间:2019.10.25 1900-2100
学习内容:今天主要是对图书管理系统代码进行了初步编写,代码一开始在网上查找,没有查到合适的代码,便从有关教材中进行查找,代码编写进行了书名和作者排序的编写,我们每个人编写一段代码,然后进行合并。最后成功进行了编译。
自我效率评价: 主要我们进行了初定项目程序的编写,两个人分工合作,并成功进行编译。对于算是初学者的我们来说效率比较高。
学习时间:2019 10.29-1900-2100
学习内容:课上对自己的项目进行了详细的需求分析,老师进行了的点评,发现我们做的程序就类似于Excel表格,不能进行库存管理,也不能进行文字扫描,对于这个情况我们两个再次进行了反思,课上的我们继续讨论,打算加入这个文字扫描功能。
学习时间:2019 10.30 1930-2100
学习内容:我们开始对文字扫描功能如何实现进行搜索,如何实现OCR识别技术,搜索之后发现,我们即便做了出来还得需要一个扫描工具,不太现实,然后就果断放弃了。并且进行了其他相关程序的搜索,同类的学生管理系统,需求分析,同样可以进行搜寻,可进行同名搜寻,同龄搜寻,同一生日搜寻,可以帮助管理员更好的了解学生,后来一想,这个和Excel 表也一样。
自我效率评价:这段时间对基本项目都没确定下来,看似效率低下,但是对每一个项目都做了需求分析,效率也没有想象的低。这段时间我们同样进行了需求分析
学习时间:2019 10.31 1900-2300
学习内容:这段时间我们同样进行了需求分析,最后选定了四则运算,计划初步实现功能为能选择题目,是否有乘除,是否有负数。这个可以针对小学1-3年级的学生。并且在网上进行了程序搜索。搜索到之后我们进行了编译,在编译过程中出现了问题. 问题如截图所示
我们充分运用搜索引擎,在CSDN上搜索处理方案,尝试了很多办法才解决一个问题,另外一个错误也是通过CSDN搜索,网上的解决办法同样很多,不过在找到适合自己的方法之前花了很大功夫。在这个过程中,我们两个都在找解决方案,不过确实找不到适合自己的解决方案。最后,我们两个各自向自己的同学寻求帮助,终于使得问题得到解决,程序得以运行。
自我效率评价:解决了初始问题,可以进行后续处理,不过解决问题时间太长,效率一般。
学习时间:2019 11.2 900-1200
学习内容:本次准备新加入的功能为是否有负数出现,因为小学生刚开始学习的时候可能不学习负数,随着年级的增长,我们增加了负数功能,使得该软件能够面向更多的用户。
自我效率评价:新加入功能有效,效率较高。
学习时间:2019 11.3 900-1200
学习内容:在初始编译过后,我们两个进行了讨论,认为会有相同的题目出现,于是想进行如何使得该程序不出现重复题目出现,于是通过上网和书本查找相关代码,进而将代码进行新的功能编译,准备加加入的功能为不产生重复的题目。同时我们准备加入是否有分数计算功能,由于上传代码会将原始代码覆盖,只是保留了修改比较截图。如下
自我效率评价: 本次修改新加入的功能为不产生重复题目以及加入了是否有分数选择功能。效率较高。
学习时间: 2019 11.4 1900-2100
学习内容:准备把输出的题目进行排列,加入排列功能,并且把代码进行规范,两个人进行讨论最后修改过程,并且撰写博客。
自我效率评价: 效率一般。
4.解题思路描述。即刚开始拿到题目后,如何思考,如何找资料的过程。
解题思路:在刚开始有结对编程这个项目,以及老师举了几个可以编程的例子的时候,我们两个最初的选择为黄金点游戏,并且在网上进行了源程序的查询,查得的程序是可以完美运行的,不过在需求分析这块想到的是分房间进行,与另外一个组装上,迫不得已更换题目。我们两个又进行了图书管理项目和学生信息管理项目的探索,需求分析这块也不过关。最后选择了这个四则运算。关于资料,基本就是通过搜索引擎,对于我们两个小白来说基础代码只能在CSDN进行搜索,附加的代码可以照葫芦画瓢,一点一点的改善,增加复杂程度。在CSDN上找到的四则运算程序比较单一,功能也比较单一。我们要达到我们的最终目的就是在源代码上更改。
5.设计实现过程。设计包括代码如何组织,比如会有几个类,几个函数,他们之间关系如何,关键函数是否需要画出流程图?单元测试是怎么设计的?分析单元测试的合理性与充分性
我们最初的代码是从网上下载下来的,代码组织主要是在原来的代码上进行修改。最初的代码主要有2类,它们分别是if-else函数和scwitch函数,在if-else函数中嵌套着scwitch函数和If-else函数。
单元测试的设计是分模块进行,就是一个一个功能的实现,把整体分为测试有无分数,有无负数,以及有无乘除这几个模块分别测试,在VS2019上先写出各个模块的代码,然后建立新的项目为单元测试选择本机单元测试项目然后测试自己的各个模块。
单元测试的合理性分别对有分数和无分数,有负数和无负数有乘除和无乘除进行测试,测试出现的情况,并且测试相对比较充分。
6、记录在改进程序性能上所花费的时间,描述你改进的思路,并展示一张性能分析图(由性能分析工具自动生成),并展示你程序中消耗最大的函数。
我们一共分四次完成了这次工作,每次在前一次的基础上添加了一个功能。因为四则运算分不同难度,所以围绕是否有负数, 是否有乘除,是否有分数我们分别添加了相应功能。又考虑到美观,我们又添加了打印行数这一功能,最后完成了该项程序的设计。性能分析图如下:
7、代码说明。展示出项目关键代码,并解释思路与注释说明。
(1)以上是本程序实现的功能:
1.输入数字确定出题数目a[0],
2.a[1]输入的值为1时有乘除运算,输入0的时候为无乘除运算,
3.a[2]输入的值决定输入出的数值范围,
4.a[3]为0时没有分数运算,为1时有
5.a[4]输入1的时候有分数运算,0时则无,
6.a[5]为将题目分为几列。
2)a[0]为用户决定打印的题目数量。如果a[4]=0的时候,则运算中没有分数,随机生成a[2]范围以内的数
(3)如果a[3]=0,即运算中没有负数的时候,将大的数字置于运算首个数字,防止出现负数;如果a[3]不等于0时,则正常生成两个随机数字。
(4)如果a[1]=1的时候随机生成4以内的数,0,1对应加减,2,3对应乘除,所以有加减乘除四种运算;如果a[1]=0的时候则只生成0,1两个数字,只有加减两种运算。
(5)a[5]为打印的列数,打印的题号对a[5]的余数为0的时候为该列末尾,以此来决定算式的位置
(6)对a[1]进行判断时生成的数字,对其进行选择,若果为0打印出加法算式,1打印减法算式,2打印乘法算式,3打印除法算式。
(7)如果a[3]=1的时候,则产生分数运算,随机生成20以内的数。与上面相同,通过a[1]的值判断是否包含乘除运算,然后打印出包含分数运算的算式。
8、结合在构建之法中学习到的相关内容与个人项目的实践经历,撰写解决项目的心路历程与收获。
在构建之法中学到在一个软件设计过程中,不知有编写代码这种工作,还进行代码风格规范、代码设计规范和代码复审等环节。
在我们刚刚打算做项目的时候,要先对项目整体做下分析,了解项目的需求分析,如果项目庞大,我们可以将其分为几个小项目进行,同样用这几个小项目做单元测试,最后整合在一起进行测试。
对于我们编程基础差的人,找到一个源代码是很重要的。在编写程序过程中出现问题查询网上相关问题解答,却找不到适合自己的解决方案时是十分痛苦的,而且在上传自己的项目的时候上传了一次之后就不能上传了,在一番更改之后,再次上传可以成功,但是上传几次发现把原来的代码覆盖了,并没有体现出自己做了哪些修改,当时的心态很糟糕。搜索引擎是一个很好的工具,无论是在我们做这个项目编程源代码还是在解决代码出现错误的解决办法,以及如何进行项目测试,如何进行性能分析等等,我们都是通过搜索引擎去解决的。运用好搜索引擎,可以对工作起到事半功倍的作用。
一个系统工程任务是很庞大的,一个人完成需要很多时间,在本次作业中,我们学习了结对编程,两个人分工合作,一个人先编写代码,另外一个人进行测试,可以进行审查工作。同时我们也明白了和别人交流的重要性,应该学会善于去学习和借鉴他人的想法,能很快解决一些问题。
当然,我们程序编写完成后,我们还需要对程序分析,不断完善代码,降低代码的冗余度,不断修改代码以提高程序的运行效率。
---恢复内容结束---