第二次作业
1. 博客开头:
GIT地址 | https://github.com/wangli20173106 |
GIT用户名 | wangli20173106 |
学号后五位 | 062318 |
博客地址 | https://www.cnblogs.com/wang20173/ |
作业链接 | https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/2793 |
2. 博客内容:
请以博客记录的方式,体现环境配置过程(包括遇到了哪些问题,你是如何解决的)
Part 0. 背景
阿超家里的孩子上小学一年级了,这个暑假老师给家长们布置了一个作业:家长每天要给孩子出一些合理的,但要有些难度的四则运算题目,并且家长要对孩子的作业打分记录。
作为程序员的阿超心想,既然每天都需要出题,那何不做一个可以自动生成小学四则运算题目与解决题目的命令行 “软件”呢。他把老师的话翻译一下,就形成了这个软件的需求:
- 程序接收一个命令行参数 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
这次阿超选择使用他最拿手的 C++
语言来完成这样的需求,工欲善其事必先利其器,第一步就需要先安装一个好用的 IDE ,在这里我们推荐使用 Visual Studio 2017
。
Part 1. 配置环境
配置环境过程:
VS2017是我在去年学《面向对象编程》的时候安装的,为了体现这个过程,我从新安装了一遍,整个过程比较顺利,用了这么久VS,这个编译器给我
的的感觉是它太强大了。
Part 2. 克隆项目
阿超的项目放在了当下最流行的源代码管理平台 Github
上,仓库地址。那么,我们如何在阿超项目的基础上进行开发呢?
- 在 https://github.com/join 这个网址处申请注册一个 Github 账号,申请成功后可在 https://github.com/login 处利用刚刚注册的账号进行登录,才能开始在 Github 上进行开发。
-
成功登录后,输入阿超仓库的网址 https://github.com/ChildishChange/Calculator ,点击右上角的
Fork
,将阿超的四则运算库拷贝到自己的同名仓库中,如下图所示:
克隆过程:
2.1:注册账号并克隆
2.2:安装配置Git
过程和问题:不知道为什么,在浏览器,里面下载的速度非常非常慢,大约40kb/s,多谢好心人把安装包传到了QQ,很快就下载安装好了。
克隆完成,感觉很开心,开始还是很茫然,慢慢的就会了。
Part 3. 代码设计
体现你代码设计的思路(注意:请保证代码能够运行通过)
1.使用面向对象语言C#
2.使用随机函数生成数据,运算符随机控制到2~3个。
3.通过条件语句和求余,使得运算过程不会出现小数,负数。比如运算结果小于0时,重新生成题目。或者4/3这种运算,首先判断
4%3是否对于0,否则重新生成被除数,直到求余为0。
4.通过for循环生成四则运算题目,再通过函数写入记事本。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace progress2 { public class Problem { public int a, b, c, d,n,sum; char[] s = { '+', '-', '*', '/' }; public Problem(int n) { } public void Print() { Random random = new Random(); Console.WriteLine("请输入四则运算题目个数:"); n = int.Parse(Console.ReadLine()); for (int i=0; i<n; i++) { // char s1 = s[t]; int t = random.Next(1, 9); //char s2 = s[t]; a = random.Next(1, 100); //生成1-100之间的随机数 b = random.Next(1, 100); c = random.Next(1, 100); d = random.Next(1, 100); if (t == 1) { sum = a + b + c; Console.WriteLine(a + "+" + b + "+" + c + "=" + sum); } else if (t == 2) { c = random.Next(1, a + b); for (; a + b - c < 0;) c = random.Next(1, a + b); sum = a + b - c; Console.WriteLine(a + "+" + b + "-" + c + "=" + sum); } else if (t == 3) { sum = a + b * c; Console.WriteLine(a + "+" + b + "*" + c + "=" + sum); } else if (t == 4) { for (;b%c !=0; c = random.Next(1, b)) c = random.Next(2, b); sum = a + b / c; Console.WriteLine(a + "+" + b + "/" + c + "=" + sum); } else if (t == 5) { for (; b % c != 0; ) c = random.Next(2, b); sum = a*d + b / c; Console.WriteLine(a +"*"+d + "+" + b + "/" + c + "=" + sum); } else if (t == 6) { for (; b % c != 0;c = random.Next(1, b) ) d = random.Next(2, a); sum = a + b / c - d; Console.WriteLine(a + "+" + b + "/" + c + "-" + d + "=" + sum); } else if (t == 7) { for (; b % c != 0; ) c = random.Next(1, b); sum = a + b / c*d; Console.WriteLine(a + "+" + b + "/" + c +"*"+d+ "=" + sum); } else if (t == 8) { sum = a * b + c*d; Console.WriteLine(a + "*" + b + "+" + c +"*"+d+ "=" + sum); } else if (t == 9) { for (; c%d != 0; ) d = random.Next(1, c); sum = a * b + c/d; Console.WriteLine(a + "*" + b + "+" + c +"/"+d+ "=" + sum); } } } public void Writew() { string fileName = @"F:\\Temp.txt"; StreamWriter sa = new StreamWriter(fileName ); sa.WriteLine(); sa.Flush(); } } class Program { static void Main(string[] args) { Problem v = new Problem (1); v.Print(); Console.Read(); } } }
Part 4. 测试
创建测试,点击鼠标右键即可看到创建单元测试这个选项。
右键运行测试即可
刚开始不怎么熟悉,就简单的运行测试,结果全部失败,感到非常迷惑,如何看来网上的一些经验,
修改了一些内容。
看到了测试通过,柳暗花明又一村。
这里是创建断点测试,在相应的代码行出,右键选择创建断点就可以了。
这里可以设置一些条件,提高效率。
Part 5. 回归测试
1、回归测试是指重复以前的全部或部分的相同功能测试
2、新加入测试的模块,可能对其他模块产生副作用,因此要进行某些程度的回归测试
3、回归测试的重心,是以关键性模块为核心
Part 6. 效能工具介绍
在分析里面有一个性能探测器,之前写代码从来没有用过这个,现在尝试了一下,结果大吃一惊,接下来慢慢看。
我选择了CPU使用率,其他的有空慢慢试。
可以清晰看到main函数,print函数,随机函数占用率最高。
这里是最令我惊叹的地方,这个循环和随机函数占用率最大,每一句执行次数清清楚楚,以前没有用过,现在可以
根据执行次数来优化相应的代码,提高运行效率。
测试总结:
第一次使用IDE的这些功能,还比较生疏,不过亲自尝试了一遍之后,收获真的很大,
在以后写代码的时候,不仅仅会考虑怎么才能够执行,而且执行效率更高。
Part 7. 提交代码
在完成 Debug
与 单元测试
之后,我们现在来学习一下如何提交代码到 Github 上,并利用 Github 进行团队协作。之前我们已经介绍过了 git add
与 git commit
命令,但这两条命令只会对本地的仓库进行修改,也就是说之前的所有操作都是离线的。我们要想让 Github 上也跟踪到最新的改变,就需要使用 git push
命令。
在使用该命令前,请确保所有本地的改动都已经 add
并 commit
了。可以用 git status
来检查
提交代码过程的问题和感想:
最开始用git配置好之后,怎么都不成功,然后用vs推送,但也是失败,在这里陷入了困境,最后还是用GitHub;
反反复复试验了一个多小时,点击没有反应,最后发现是浏览器的问题,我用的uc浏览器,但推送代码是并不会弹
出窗口来,如何用IE浏览器,一下子就成功了。同时感觉英语很重要,全部是英语,第一次使用还是有些吃力。
你对本次工具的熟悉过程,有什么感想?分享你学习到的新知识
Part 8. 感想
这次作业花费了很多时间和功夫,从配置环境到代码构思,测试并分析代码,提交到码,每一步都受益匪浅,
作为这个专业的学生。一定要经常敲代码,并且熟练掌握一门语言,久了没有写代码,在写程序时一下就暴
露了问题,刚好符合改了又改模型。在测试代码和效能分析这个过程中,我明白了代码不仅仅要可以运行,
而且要高效,对于反复运行的代码,可以尽量优化一下,尽管第一次用这些,遇到了各种困难,但最后成功
了,学到了很多很多。提交代码也是第一次接触,上手比较困难,但多次试验,不懂就百度,最终学会了用
GitHub提交管理代码。收获很大。最后我感觉英语尤其重要,在GitHub遇到问题时,可以直接读懂原因。