世上无难事,只要肯攀登
Git地址 | 我的Git |
---|---|
Git用户名 | dwyy666 |
学号后五位 | 62307 |
博客地址 | 我的博客 |
作业链接 | 个人第2次作业:熟悉使用工具 |
作业背景简介
阿超家里的孩子上小学一年级了,这个暑假老师给家长们布置了一个作业:家长每天要给孩子出一些合理的,但要有些难度的四则运算题目,并且家长要对孩子的作业打分记录。
作为程序员的阿超心想,既然每天都需要出题,那何不做一个可以自动生成小学四则运算题目与解决题目的命令行 “软件”呢。他把老师的话翻译一下,就形成了这个软件的需求:
程序接收一个命令行参数 n,然后随机产生 n 道加减乘除(分别使用符号+-*/来表示)练习题,每个数字在 0 和 100 之间,运算符在 2 个 到 3 个之间。由于阿超的孩子才上一年级,并不知道分数。所以软件所出的练习题在运算过程中不得出现非整数,比如不能出现 3÷5+2=2.6 这样的算式。
练习题生成好后,将生成的 n 道练习题及其对应的正确答案输出到一个文件 subject.txt 中。当程序接收的参数为4时,以下为一个输出文件示例。
13+17-1=29
11*15-5=160
3+10+4-16=1
15÷5+3-2=4
Part1、配置环境
1. VS2017安装与配置
由于之前的学习过程中已经安装过VS2017,这里就不再展示安装过程,除了安装比较耗时之外(它太庞大了),安装起来应该没有什么难度。
2. Git安装
由于之前没有操作过Git,所以每一步都是走的小心翼翼,参考ChildishChange助教的教程一步步操作。没想到,上来就遇到了让我抓狂的问题!!在下载Git的时候,从官网给定的链接下载巨慢,而且还下载失败!!在这里耽误了很久很久,最后通过面向百度解决问题,终于找到一种可行的办法。
即通过浏览器f12查看网页源代码,找到下载链接网址,直接复制网址到迅雷新建下载任务,十秒钟搞定!接下来就傻瓜式安装疯狂next就完事儿了!Git安装成功!
3. Github项目克隆
虽然之前使用过Github,但是仅限于在上面学习前辈的代码,从没使用Github的仓库上传代码,所以,这次就体验了代码仓库的拷贝以及代码上传管理。首先,进入阿超的仓库,点击右上角的Fork,将阿超的四则运算库拷贝到自己的同名仓库,如下图所示
可以看到,自己也拥有了一个同名仓库
再利用Git将项目克隆到本地,在这里最好是在一个新目录下创建一个文件夹
体验完从Github上克隆项目,就准备开始新建自己的项目吧!
Part2、代码设计
-
大概思路:产生随机数,拼接算式,打印文件
-
首先创建一个getNum类,来产生随机数,这里需要产生四组随机数,两组作为数值,一组作为运算符数组的标记下标,一组作为运算符个数。
private static char[] size = { '+', '-', '*', '/' }; public string getnum() { int x, y, z, t; Random random = new Random(); z = random.Next(2, 4); //作为随机运算符个数 string str; x = random.Next(0, 100); //作为随机数值 str = Convert.ToString(x); for (int i = 0; i < z; i++) { t = random.Next(0, 4); //作为随机运算符下标 y = random.Next(0, 100); str += size[t] + Convert.ToString(y); //拼接字符串 System.Threading.Thread.Sleep(50); //由于时间间隔太短,需要设置程序睡眠 } return str; }
-
然后创建一个写入文件writeFile类,调用StreamWriter方法,在这里加入一个容错判断机制,如果成功,则写入文件,否则写入失败。
public void writefile(string str) { try { StreamWriter sw = new StreamWriter("e:\\test.txt", true); sw.WriteLine(str); sw.Close(); } catch (Exception e) { Console.WriteLine("文件写入失败!"); } }
-
最后写的是调用方法主函数,在这里判断除数为0以及结果为负数的时候,重新生成
//如果结果含有小数点,或者表达式中有除以0,或者结果为负数则再次获取一个计算式 if (result.ToString().Contains(".") || str.Contains("/0") || int.Parse(result.ToString()) < 0) continue;
-
运行结果如图所示
Part3、单元测试
-
首先创建一个单元测试项目,通过在现在项目的解决方案右键—>添加—>新建项目选择单元测试项目。如图
-
在单元测试项目里,还需要添加对被测试项目的引用
-
在这里通过学习书上内容,需要将所有的类写成public共有类,才可以进行单元测试
-
开始测试,如图
Part4、断点调试及回归测试
1. 断点调试
-
设断点调程序应该是从我们开始编程就在使用了,刚开始可能用的编译器是vc++,后面到vs2017,这里就不得不提vs2017这个IDE,虽然他非常庞大,但是整体的使用体验真的很棒!断点调试功能非常强大(稍微感慨了一下,言归正传)
-
首先设置起始断点,在对应代码行左边栏轻轻一点,断点就设置好了!可以选择快捷键F5进入调试界面,如图
-
下一步,根据逻辑可以选择逐语句、逐过程进行调试
-
这里还可以调出很多监视器,可以查看内存、cpu使用、监视变量等等
2.回归测试
-
回归测试是一种系统范围的测试,旨在确保系统某个部分的微小变化不会破坏系统中其他地方的现有功能。这很重要,因为没有回归测试,很有可能将预期的修复程序引入到一个系统中,这个系统会产生比他们解决的问题更多的问题。——百度
-
在我看来,就是在单元测试优化程序过后再次进行的单元测试,所以,在我修改完代码之后再次运行单元测试程序,步骤与上文一致,就不再贴图了(贴图好难)
Part5、效能分析
-
VS 自带性能分析工具,可以执行直接在VS中执行书写的项目,也可以追踪生成的可执行文件(需要其它文件,如pdb),两者的操作差不多,主要在执行分析时有点区别。
-
性能分析首先要执行分析并生成分析报告。VS开始性能分析的快捷键为 ALT+F2,也可以使用菜单工具栏,有两处入口,如下图所示:
-
“分析” -> “性能探查器”
-
开始分析
-
诊断报告
-
这里我们还可以生成详细诊断报告
-
点击函数,可以查看函数内方法被调用占CPU的效率
Part6、上传代码
-
首先通过Git输入git add .和git commit -m "魏家田201731062307"命令对本地仓库进行修改,如图
-
利用git push上传Git hub,在这里需要登录一下Git hub的账号
-
push完之后,登录Git hub账号可以看到我的仓库已经有了刚刚上传的文件,然后我们就可以向源仓库发起Pull Request,如图,上传成功,到这里,阿超的四则运算项目告一段落。
Part7、总结感悟
终于写完了,说实话,c#有点生涩了。编程测试上传再加写博客,耗费了我所有的课余时间,通宵写代码,开始掉头发??
收获:
1.再一次锻炼我的心理承受能力,下载Git、程序调不通,尤其是当百度寻求解决办法无解的时候,心态是真的爆炸,不过还好,耐着凌晨3:00实验室空无一人的孤独总算是写完了。
2.初步了解了程序的测试流程,以及根据测试结果调整代码优化的作用,但是距离熟练利用还需要深入学习,
3.近一年没写c#了,通过这次学习,又一次加深了对语言理解,不论是java还是c#,思想都是一样的,就是需要一点时间去适应c#和vs,get到了一个非常强大的dataTable.compute()方法,它可以用来计算传递筛选条件的当前行上的给定表达式,免去了手写算法的困难。