第二次作业
GIT地址 |
|
GIT用户名 |
Mooonnnn1 |
学号后五位 |
62202 |
博客地址 |
|
作业链接 |
https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/2793 |
Part1 准备工作
1.配置环境
本次作业所用到的Visual Studio 2017已经在上学期的c#课程中安装好了。
2.下载git
由于作业中给的git安装教程下载总出问题,于是我下载了班级群上一位同学分享出来的,最终成功下载安装
Part2 代码设计
1.背景
2.设计思路
(1)编写计算算式及输出算式的函数
分为运算符是两个和运算符是三个两种情况,编写两个函数。调用函数时,只需输入算式中的每个数字及运算符,即会输出该算式及其答案。先将数字转换成string类型,和运算符一起存入字符串中,再运用DataTable里的compute函数得到计算答案。
1 string[] oper = new string[] { "+", "-", "*", "/" }; 2 DataTable dt = new DataTable(); 3 double answer = Convert.ToDouble(dt.Compute((num1.ToString() + oper[a] + num2.ToString() + oper[b] + num3.ToString()), "false")); 4 string equation = (num1.ToString() + oper[a] + num2.ToString() + oper[b] + num3.ToString() + "=" + answer.ToString() + "\n");//将生成的算式存入字符串
(2)生成随机数
运用random函数,随机生成数字及运算符个数,以0、1、2、3分别代表“+”、“-”、“*”、“/”,随机生成运算符,调用相应的函数。
1 Random rd = new Random(); 2 int oper; 3 oper=rd.Next(0,4)
(3)判断
由于题目要求不能出现小数和复数,因此在算式的函数中加入条件,如果不符合条件则返回-1。调用函数定义count计数,当函数返回值为-1时,不计入算式总个数,重新生成算式。当返回值不为-1时,输出到文件。
1 if (Convert.ToDouble(Convert.ToInt32(answer)) == answer && answer >= 0)//判断结果不含小数且不为复数 2 { 3 Console.WriteLine(equation); 4 File.AppendAllText(@"C:\Users\Mac\Desktop\subject.txt", equation + "\r\n");//输出到文件 5 return answer; 6 } 7 else 8 { 9 return -1; 10 } 11 } 12 13 14 15 16 17 if (four_num(num1, num2, num3, num4, oper1, oper2, oper3) != -1) 18 { 19 count++;// 当生成的四则运算满足条件时count + 1,否则重新生成 20 }
Part3 github克隆项目以及提交代码
1.克隆项目
将阿超的四则运算库拷贝到自己的同名仓库中
点击“clone or download”,会得到Fork后仓库的地址。
在桌面打开Git Bash,输入git clone https://github.com/Mooonnnn1/AchaoCalculator.git
得到克隆的项目AchaoCalculator
2.提交代码
根据作业提示提交代码
进入自己的仓库中可以看到提交的代码
点击creat pull request
在Jupi4ter的仓库中查看提交状态。
Part4 单元测试及回归测试
-
单元测试
首先创建一个单元测试
将program访问限制改为public,在单元测试中引用
编写测试代码并运行
测试代码如下
[TestMethod] public void TestMethod1()//测试three_num函数 { int num1=4, num2=2, num3=4, oper1=0, oper2=1; string[] oper = new string[] { "+", "-", "*", "/" }; Assert.AreEqual(Program.three_num(num1, num2, num3, oper1, oper2), Convert.ToDouble(2)); } [TestMethod] public void TestMethod2()//测试four_num函数 { int num1 = 16, num2 = 3, num3 = 2, num4 = 2, oper1 = 0, oper2 = 1, oper3 = 2; string[] oper = new string[] { "+", "-", "*", "/" }; Assert.AreEqual(Program.four_num(num1, num2, num3, num4, oper1, oper2, oper3), Convert.ToDouble(15)); }
2.回归测试
回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。自动回归测试将大幅降低系统测试、维护升级等阶段的成本。
回归测试作为软件生命周期的一个组成部分,在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试。在渐进和快速迭代开发中,新版本的连续发布使回归测试进行的更加频繁,而在极端编程方法中,更是要求每天都进行若干次回归测试。因此,通过选择正确的回归测试策略来改进回归测试的效率和有效性是很有意义的。(来自百度百科https://baike.baidu.com/item/回归测试/1925732?fr=aladdin)
3.设置断点
设置断点并调试
设置条件
Part5 效能工具
Part6 总结
首先是遇到的困难:1.最开始设计代码的时候想的是用switch来实现生成的随机四则运算的计算,但实际实现起来代码较冗杂。后来又想到用栈或者二叉树,但由于本人能力有限,认为太过复杂。在同学的提醒下,查到了compute函数,以字符串实现了四则运算的计算;2.github的界面及git的安装都是英文,深刻感受到学好英语的好处。
其次是本次作业的收获:1.学会使用git上传代码;2.简单地了解了单元测试与回归测试。
代码真的是应该每天都敲。今后写代码时,也应该要逐渐养成写单元测试的习惯了。