第二次作业

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 上,仓库地址。那么,我们如何在阿超项目的基础上进行开发呢?

  1. 在 https://github.com/join 这个网址处申请注册一个 Github 账号,申请成功后可在 https://github.com/login 处利用刚刚注册的账号进行登录,才能开始在 Github 上进行开发。
  2. 成功登录后,输入阿超仓库的网址 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. 回归测试

回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。自动回归测试将大幅降低系统测试、维护升级等阶段的成本。
回归测试作为软件生命周期的一个组成部分,在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试。在渐进和快速迭代开发中,
新版本的连续发布使回归测试进行的更加频繁,而在极端编程方法中,更是要求每天都进行若干次回归测试。因此,通过选择正确的回归测试策略来改进回归测试的
效率和有效性是很有意义的。                                                ps:摘自百度百科

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遇到问题时,可以直接读懂原因。

原文地址:https://www.cnblogs.com/wang20173/p/10617461.html