GIT地址 | https://github.com/sparrowstar11 |
GIT用户名 | sparrowstar11 |
学号后五位 | 62405 |
博客地址 | https://www.cnblogs.com/sparrowchengyu/ |
作业链接 | https://www.cnblogs.com/harry240/p/11515697.html |
项目背景
阿超家里的孩子上小学一年级了,这个暑假老师给家长们布置了一个作业:家长每天要给孩子出一些合理的,但要有些难度的四则运算题目,并且家长要对孩子的作业打分记录。
作为程序员的阿超心想,既然每天都需要出题,那何不做一个可以自动生成小学四则运算题目与解决题目的命令行 “软件”呢。他把老师的话翻译一下,就形成了这个软件的需求:
-
程序接收一个命令行参数 n,然后随机产生
n
道加减乘除(分别使用符号+-*/
来表示)练习题,每个数字在0
和100
之间,运算符在2
个 到3
个之间。 -
由于阿超的孩子才上一年级,并不知道分数。所以软件所出的练习题在运算过程中不得出现非整数,比如不能出现
3÷5+2=2.6
这样的算式。 -
练习题生成好后,将生成的
n
道练习题及其对应的正确答案输出到一个文件subject.txt
中。 -
当程序接收的参数为4时,以下为一个输出文件示例。
项目过程
一、VS安装及环境配置
暑假学习C#的时候,就已经安装了VS。暑假在安装的时候跟着网上的安装教程一步步安装也没出现什么大问题(十分感谢网上有很多热心的网友分享的安装教程,不然自己弄真的头秃)。
二、使用GitHub克隆项目
1.之前因为需要,注册了git账号。所以此步将班级的仓库地址拷贝到我自己的同名仓库中。
首先进入班级的仓库地址,接着点击fork:
2.之前也安装过Git这个工具。所以接下来要在电脑的某个地方新建一个文件夹来保存仓库中的文件,接着空白处右键,点击“Git Bash Here”,再输入git clone + 仓库地址,如下图:
3.打开上面这个文件夹,新建一个文件夹,命名为我的github用户名
4.接下来就可以在这个文件(sparrowstar11)里建立C#代码文件啦。
克隆项目的过程遇到的问题:虽然之前接触过一点github,但很久没用已经有些生疏了。
在第3步.git文件是被隐藏了的,通过百度查询如何将它显示出来,解决了此文件不显示的问题。
三、代码设计思路
在阅读了题目要求之后,我发现需要解决的问题有:要随机生成题目,需要随机生成数字以及运算符,还要计算他们的结果。所以我想要有一个Connect类,这个类负责生成随机运算符以及运算数,并将他们连接起来;其次还有一个Calculate类,这个类用来做计算;还有一个program类,相当于一个实现类。
1.Connect类
主要负责生成随机运算符以及运算数,并将他们连接起来
我将写入文件的操作也放在这个类里了
2.Calculate类
因为在运算的时候需要考虑到优先级的问题,所以想到了使用数据结构中的栈来实现
这里先实现加减的运算
最终的运算栈,写入了乘除的判断,并在最后调用刚刚那个实现加减的方法
3.Program类
这就是最终实现的类了
最后附上运行结果:
(PS:以上均为部分代码,详细代码见git)
设计编写代码过程遇到的问题:
1.首先,已经有一段时间没有接触C#了,所以刚开始写的时候有些生疏了(真是"三天不练手生"啊,敲代码也一样!);
2.其次就是在解决运算符优先级的时候开始没有想到办法,忘记了以前数据结构讲过的判断运算符优先级使用栈比较方便,通过百度查询相关的资料知道了使用栈来解决这个问题;
3.当然对于数据结构的知识也是忘得很多了,又去看以前的学习资料以及练习来熟悉这些知识。
四、单元测试
1.首先对Calculate类中的方法进行测试
i.鼠标在想要测试的方法处,点击右键,接着点击创建单元测试,操作如图
此处会提示只能在公共类或公共方法中创建单元测试,所以将类前面加上public
ii.第二步需要编写测试代码
iii.第三步通过运行测试看是否通过测试
测试通过啦(^-^)
2.接下来对Connect类中的方法进行测试
接下来创建单元测试的步骤如上,就不重复截图了,直接附测试代码及测试结果的图
i.对随机产生的数进行测试,看其是否符合题目要求在[1,100)内
测试代码
测试结果
ii.对随机产生的运算符进行测试
测试代码
测试结果
iii.对产生算式的函数进行测试
测试代码
测试结果
测试过程中遇到的问题:
1.以前没有做过类似的单元测试,所以才开始的时候有点不太会,通过百度看了一些简单的函数的测试就慢慢会了。
2.其次,断言有很多种,需要做合理的选择。
测试过程参考了这位朋友的博客https://www.cnblogs.com/adamgq/p/8419395.html,懂了这些断言的含义。
五、基本操作(断点和监视器的使用)
1.断点
双击左边即可出现红色的点,即设置断点成功;除此之外,还可以在想要设置断点的地方点击右键,就会出现“断点”,点击“插入断点”即可成功设置断点了。
2.单步运行
点击这里的调试图标即可对程序进行调试
通过逐语句,就可以对程序执行过程中某些变量值的变化有迹可循,也能帮助我们更好地理解程序执行的过程,也能很好发现程序出错的地方
3.监视器
通过添加监视,可只显示监控变量的值,这样可以更清楚观察某个变量的变化过程,如下图:
4.条件断点
当只希望断点在某些条件下才成立时,可以通过设置变量的值满足某条件时才触发断点,这样可以提高测试的效率。
基本操作过程中遇到的问题:
1.之前的课程中接触过断点,所以还不算太难理解,只是在什么位置设置断点还存在一定困惑。
2.条件断点之前没有接触到,同样在什么地方设置比较合理,还不十分明白。
六、回归测试
因为最开始对回归测试不太理解,所以我百度了一下。
这是百度对回归测试的定义:回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。自动回归测试将大幅降低系统测试、维护升级等阶段的成本。
对部分代码进行了修改,再重新测试
这是再次测试的结果
回归测试过程中遇到的问题:
1.最开始觉得既然测试了,为什么还要回归测试,就去查询了回归测试的相关资料,理解了这是一个修改代码,再重新测试的过程。
2.由于之前写代码就是写好了运行不通过,再通过错误提示找错,所以这次回归测试算是一个通过测试来弥补代码的不足,以后需要多加运用。
七、效能分析
我理解的效能分析就是代码写得好不好,好不好不是运行成功,而是效率高不高。
首先通过按键盘的Alt+F2就可以出现下面这个界面,然后选择CPU使用率
这里让它跑几十秒之后,就可以点击停止收集
再点击创建详细的报告,就能得到效能分析报告,如下图:
八、代码提交
终于快写完了(~*~)
现在开始提交代码了
1.首先去到自己一开始以自己git用户名命名的这个文件夹,右键点击这个文件夹,再点击"Git Bash Here"
2.输命令 git add . 回车后,再输 git commit -m "First Commit"
3.出现下面这个界面输入自己git的用户名以及密码登录即可
再git push
4.接着打开最开始fork后的项目主页,再发起pull的请求(具体操作如下图)
代码提交过程中遇到的问题:
1.一开始输命令的时候,看掉了git add . 后面这个点,需要注意,还有空格;输错了,就重新仔细跟着教程再次输入这个命令。
2.在commit的时候出现了问题,导致有两次commit,但是第一次出了错误,所以又重新commit了一次(在输命令的时候要仔细一些,避免出错)
九、总结
终于到总结的部分了,这次作业写得也是很久的了。首先在代码设计的部分就花了很多时间,需要考虑到一些特殊的情况,还有就是有一些时间没写C#的代码了,有些生疏了,所以这也导致了速度比较慢。也学习了工具的使用,虽然需要一点点地去看,但是学到了新的东西:单元测试、回归测试、效能分析;对以前有一点接触的代码调试、git的使用的学习也更进一步了,所以这就是成长的过程吧。还有就是作业要求太密集了,总害怕遗漏,需要静下心去看清这些要求再一一实现。当然了,此次博客作业最深的感受就是,学过的知识如果不及时去回顾,就会很生疏,等想用的时候就需要花很多时间去重新熟悉,所以平时还是需要多看以前学过的知识啊!最后,激励自己一下,继续加油吧!