第二次作业-熟悉使用工具
1. 博客开头:
GIT地址 | https://github.com/lynb1314 |
GIT用户名 | lynb1314 |
学号后五位 | 62133 |
博客地址 | https://www.cnblogs.com/illl1314 |
作业链接 | https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/2793 |
项目背景
阿超家里的孩子上小学一年级了,这个暑假老师给家长们布置了一个作业:家长每天要给孩子出一些合理的,但要有些难度的四则运算题目,并且家长要对孩子的作业打分记录。
作为程序员的阿超心想,既然每天都需要出题,那何不做一个可以自动生成小学四则运算题目与解决题目的命令行 “软件”呢。他把老师的话翻译一下,就形成了这个软件的需求:
- 程序接收一个命令行参数 n,然后随机产生
n
道加减乘除(分别使用符号+-*/
来表示)练习题,每个数字在0
和100
之间,运算符在2
个 到3
个之间。 - 由于阿超的孩子才上一年级,并不知道分数。所以软件所出的练习题在运算过程中不得出现非整数,比如不能出现
3÷5+2=2.6
这样的算式。 - 练习题生成好后,将生成的
n
道练习题及其对应的正确答案输出到一个文件“subject.txt”
中。
一、配置环境
上学期学习的面向对象程序设计,学习的是C#语言,所以已经安装了Visual Studio Community 2017,并配置好了需要的相关库文件。
下载VS2017(Community)引导安装程序途径:
1、官网下载:下载地址,点击链接后浏览器将自动弹出下载提示框。
2、百度网盘:链接:https://pan.baidu.com/s/1otlK7Z506tEscPaKLxaBWg提取码:k78s
建议:安装过程中,选择工作负载时,根据自己目前的需要勾选相关的库文件,不必全部勾选。如在日后需要其他功能时,可在控制面板>程序>程序和功能中找到“Visual Studio Community 2017”,并单击鼠标右键,选择“更改”后在弹出的界面中重新选择工作负载以取消勾选不需要的功能或勾选目前需要用到的功能。
二、克隆项目
1、注册登录自己的Github账号,进入阿超的仓库https://github.com/Jupi4ter/AchaoCalculator。
2、将阿超的四则运算库拷贝到自己的同名仓库中,若Fork变为灰色,则拷贝成功。
3、复制绿色按钮处的可克隆项目地址。
4、安装Git后,在 我的电脑 中任意找一个目录,打开 Git 命令行软件(Windows上可在空白处右键打开 Git Bash ),输入 git clone <clone url>
,其中 <clone url>
即我们刚刚复制的项目地址。
5、进入项目文件夹 AchaoCalculator ,新建一个文件夹,重命名为你的 Github
账号名。
三、项目设计
1、新建项目
2、代码设计
除去新建项目文件后本身的Main()函数,设计了两个函数,如下:
①Make_Formula(),用来随机产生式子左半部分的数字和运算符号
1 public static string Make_Formula() 2 { 3 string formula = null; 4 var seed = Guid.NewGuid().GetHashCode();//C#中默认以时间作为随机数种子,那么随机生成的运算式子很多都是相同的(伪随机)。但用这种方法生成随机数种子使随机生成的式子不相同。 5 Random random = new Random(seed); 6 int number_1 = random.Next(0, 101);//生成随机运算数字,且取值范围为[0,100] 7 int number_2 = random.Next(2, 4);//随机生成运算符个数,且个数范围为[2,4) 8 formula = number_1.ToString(); 9 for (int i = 1; i <= number_2; i++) 10 { 11 number_1 = random.Next(0, 101);//生成随机运算数字,且取值范围为[0,100] 12 int operation = random.Next(0, 4);//随机产生运算符 13 formula = formula + Operation[operation] + number_1.ToString(); 14 } 15 return formula; 16 }
②Calculate(),用来计算随机产生的式子,并检查运算过程中是否有除0操作、运算结果是否有小数或负数。
1 public static string Calculate(string formula) 2 { 3 DataTable dt = new DataTable(); 4 string result = dt.Compute(formula, "").ToString();//利用DataTable提供方法对随机产生的字符串式子进行运算 5 while (formula.Contains("/0") || result.Contains(".") || Convert.ToInt32(result) < 0)//检查运算过程中是否有除0操作、运算结果是否有小数或负数。 6 { 7 formula = Make_Formula(); 8 result = dt.Compute(formula, "").ToString(); 9 } 10 return result; 11 }
四、单元测试
1、首先新建一个测试项目,右键单击解决方案,添加一个新建项目,在类型里选择 单元测试 ,这里新建了一个名为 Calculator_UnitTest 的单元测试项目。
2、添加引用。
3、运行单元测试
五、其他的一些基本操作
1、断点
如下图在48行设置了一个断点,在48行左侧会出现一个红点
2、单步运行
设置好断点之后开始调试,这时可以看到程序已经运行到刚刚打的断点处前,且下方的自动窗口可以看到各个变量的值。
3、添加监视
4、设置条件断点
五、回归测试
单元测试不仅仅用来保证当前代码的正确性,更重要的是用来保证代码修复、改进或重构之后的正确性。也就是说,在每次修改完 Bug 之后,我们其实都需要运行一遍来看看是不是满足之前所有的单元测试样例。所以,在每次因为现有的 failed test 而修复原有代码后,最好都全部运行一遍单元测试,保证以前 passed test 仍然是可以通过的。
六、效能分析
点击 IDE 顶部菜单栏中的 分析,即可看到 性能探查器 ,勾选 CPU使用率 。
输入想生成的算术式子个数n,较大的n探测效果更好,即使程序没有执行完成,效能分析也是可以强行结束的。让程序跑几十秒之后,就可以结束。点击效能分析工具界面左上角的 停止收集 即可停止收集数据。
点击“创建详细的报告”,生成更加详细的分析报告,如下图:
七、上传代码
1、使用“git add”和“git commit”命令对本地仓库进行修改,如下图:
2、想让 Github 上也跟踪到最新的改变,则需要使用使用“git push”命令,如下图:
3、在完成 push 后,我们就可以开始向源仓库(即阿超的仓库)发起 Pull Request(简称 PR ,指发起请求给仓库贡献代码)。打开我 Fork 后的项目主页,如下图所示,并点击按钮 New pull request 。
至此完成代码上传。
八、总结与感受
1、了解了VS的单元测试、断点操作、单步运行、回归测试、效能分析。
2、了解了Github的一些基本操作,但是不是很熟悉。
3、忘记了一些C#语言的语法,通过这次作业回顾了C#的语法。
4、编写代码过程中,出现了一些逻辑上的错误,特别在循环上,错误的将一些应该放在循环体内的语句放在了循环体外,或者将应该放在循环体外的语句放在了循环体内。
5*、原本是想用栈实现四则运算的,但难度较大且过于繁琐,便采用了 Data Table 提供的现成方法,查自于CSDN(链接)。
6*、采用C#中的生成随机数方法Random random = new Random();时产生的随机数默认以时间作为随机种子,即产生的随机数为伪随机数,便采用了 var seed = Guid.NewGuid().GetHashCode(); Random random = new Random(seed); 查自于百度知道(链接)。