第二次作业--熟悉使用工具

GIT地址 https://github.com/Foreverux
GIT用户名 Foreverux
学号后五位 62117
博客地址 https://www.cnblogs.com/JQloveJX/
 作业链接 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/2793

 

 

 

 

 

 

 

 

声明:部分内容摘自@ChildishChange

 

Part 0. 背景

 

阿超家里的孩子上小学一年级了,这个暑假老师给家长们布置了一个作业:家长每天要给孩子出一些合理的,但要有些难度的四则运算题目,并且家长要对孩子的作业打分记录。

作为程序员的阿超心想,既然每天都需要出题,那何不做一个可以自动生成小学四则运算题目与解决题目的命令行 “软件”呢。他把老师的话翻译一下,就形成了这个软件的需求:

  • 程序接收一个命令行参数 n,然后随机产生 n 道加减乘除(分别使用符号+-*/来表示)练习题,每个数字在 0 和 100 之间,运算符在 2 个 到 3 个之间。
  • 由于阿超的孩子才上一年级,并不知道分数。所以软件所出的练习题在运算过程中不得出现非整数,比如不能出现 3÷5+2=2.6 这样的算式。
  • 练习题生成好后,将生成的 n 道练习题及其对应的正确答案输出到一个文件 subject.txt 中。

 

Part 1. 配置环境

Visual Studio 2017 有着宇宙最强 IDE 的美称,它对 C++ 的支持也很好,在本教程中,为简化学员的开发难度,我们选择使用 VS2017 社区版(社区版(Community)指的是可免费提供给单个开发人员,给予初学者及大部分程序员支持,可以无任何经济负担、合法地使用的版本。)

下面提供三种安装方法:

  1. 官网下载:点击下载链接,浏览器将自动开始下载
  2. 下载迅雷,输入以下ed2k链接:

    ed2k://|file|mu_visual_studio_community_2017_version_15.3_x86_x64_11100062.exe|1069960|5984B3CD547F9F213DE21EFE5887F08D|/
  3. 百度网盘:链接: https://pan.baidu.com/s/1jJXyRMA 密码: ub6c

安装教程,双击打开下载的exe文件,一直继续到如下图,选择.net桌面开发(这里我以前安装过,所以是这样的),由于vs体积较大,建议修改目录到非系统盘

较长时间的下载文件安装后重启即可。

 

 

 

 遇到的问题:

安装过程基本没遇到什么问题,因为安装过程本来就很简单,一直下一步下一步就行。

 

Part 2. 克隆项目

 

  1. 在 https://github.com/join 这个网址处申请注册一个 Github 账号,申请成功后可在 https://github.com/login 处利用刚刚注册的账号进行登录,才能开始在 Github 上进行开发。
  2. 成功登录后,输入阿超仓库的网址https://github.com/Jupi4ter/AchaoCalculator(这个为我们班级所指定的仓库地址),点击右上角的 Fork ,将阿超的四则运算库拷贝到自己的同名仓库中,如下图所示:(PS:点击fork后需要进入自己的账号的仓,然后在clone)

 

 

          3、安装 Git 软件,Git 的安装教程 在这里。(考虑到目前大多数人都是64位windows,故放一个git-windows-64位下载地址)。

    4、新建一个文件夹,在空白处右键打开 Git Bash,输入 git clone <clone url> ,其中 <clone url>即刚才复制的项目地址。

    5、clone完以后,可在当前目录下看到一个与仓库同名的文件夹Calculator,进入Calculator,新建一个文件夹,重命名为你的 Github 账号名。

    6、以 Github 账号命名的文件夹作为项目目录,同时项目建立在Calculator文件夹。

   

   7、接下来接连使用 git add,git commit -m "Message"(Message是你要写的内容)即可利用 Git 记录下所有的改动。如果是第一次使用 Git,

请需要在git命令行中使用如下两条命令配置自己的个人邮箱与 Commit 时的用户名,这里的邮箱和用户名最好与 Github 账号保持一致。

           git config --global user.name "你的用户名"

           git config --global user.email 你的邮箱号

 

          下面是一些常见的Git操作

          $ git clone [url]--下载一个项目以及它所有的版本历史
           $ git add [file]--将文件进行快照处理用于版本控制            $ git commit -m"[descriptive message]"--将文件快照永久地记录在版本历史中 
          $ git push--上传当前本地分支commit到GitHub上           $ git pull--下载服务器上最新的本部并合并更改到本地           $ git reset [commit hash]--撤销所有[commit hash]后的的commit,在本地保存更改           $ git log--列出当前分支的版本历史

 

 

 

遇到的问题:

github是英文的,网站上很多地方都看不懂,通过网页翻译解决,但是翻译有很多不准确的地方,只有自己尝试性摸索,最后渐渐地了解了github。

 

 

Part 3.代码设计

1、代码设计思路:先随机生成n个四则表达式,然后计算表达式的值,最后保存。

 

<1>、生成四则表达式包括:

生成2-3个运算符,生成随机数字(判断是否符合要求,不能为小数,不能除0等),最后将运算符和数字拼接成表达式。

  生成运算符:

 

 

   

   生成随机数以及合成四则表达式:

 

  

 

<2>、计算结果并显示。

  

 

<3>、保存文件。

 

 

 

2、运行结果:

 

 

3、文件保存情况:

 

 

 

 

遇到的问题:

1、不知道怎么计算字符串表达式,通过百度解决;

2、忘记了这么保存文件,通过看书解决。

 

 

 

Part 4. 单元测试

1、创建单元测试:右键单击解决方案,可以添加一个新建项目,在类型里选择 单元测试,新建一个名为 CalculatorUnitTest 的单元测试项目。(值得注意的需要选择对应的语言的单元测试)

(对于单元测试具体步骤,可以参考LoveSna的《C# 之在VS 中实现单元测试》)

 

 2、单元测试

1)编写测试代码,测试代码的功能就是去调用被测试的类的方法;

2)编写期望测试代码返回的结果;

3)比较测试代码返回的结果与我们人工编写的期望的结果,在单元测试运行完毕后,VS 的左侧会弹出一个测试结果窗口。绿色代表通过,红色代表失败。

 

 

 遇到的问题:

1、开始创建单元测试时选了(windows通用),一直引用不了项目,后来仔细检查发现;

2、单元测试代码不会写,通过百度查资料解决。

 

 

 

Part 5. 基本操作

 

1、断点的设置:左键单击代码行左边的灰色区域。

 

 

 2、单步执行:调试->逐语句(F11)

 

 

3、条件断点:将鼠标移动到断点,弹出设置,进入并开启条件断点。

 

Part 6. 回归测试

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

Part 7. 效能工具介绍

vs2017性能探查器,点击分析->性能探查器,

 

进入以后,我们只需要勾选CPU使用率即可。

 

效能分析报告如图:

 

详细报告如图(部分):

 

 

 

  效能分析会帮助程序员从机器的运行角度方面去思考程序的运行效率,对程序的优化有着重要作用。

 

Part 8. 提交代码

在完成 Debug 与 单元测试 之后,我们现在来学习一下如何提交代码到 Github 上,并利用 Github 进行团队协作。之前我们已经介绍过了 git add 与 git commit 命令,

但这两条命令只会对本地的仓库进行修改,也就是说之前的所有操作都是离线的。我们要想让 Github 上也跟踪到最新的改变,就需要使用 git push 命令。

 

在使用该命令前,请确保所有本地的改动都已经 add 并 commit 了。可以用 git status 来检查:

 

然后 git push,出现登录框,登录等待即可。

 

在完成 push 后,我们就可以开始向源仓库(即阿超的仓库)发起 Pull Request(指发起请求给仓库贡献代码)。打开你 Fork 后的项目主页,如图所示,点击按钮New pull request

(由于之前更改了分支,所以要切换才能看到push的文件)

请求结果如下图:

 

 

Part 9. 心得体会

通过此次作业,熟悉了github、git的使用,回顾了以前学过的C#(忘得都差不多了,过程中一直翻书,百度),初次了解了单元测试和回归测试,

之前都是挺老实讲,很空洞,不知道具体该怎么做,现在知道了,还有就是学会了能效分析工具的使用,体会到了软件工程真真的含义,不仅仅是

敲代码,还有其他一系列工作,这次作业虽然很累,但是确确实实学到了很多东西,有很大收获,还是很开心的。

 

转载于:https://www.cnblogs.com/JQloveJX/p/10622612.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351017.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是javax.ws.rs.core.context? [ 第2部分 ]

如何使用Context批注 在什么是javax.ws.rs.core.context&#xff1f; 您学习了如何使用Context批注从HttpHeaders类的注入实例中检索HTTP标头信息&#xff0c;以及如何从UriInfo实例中检索URI信息&#xff0c;例如URI参数和变量。 在本文中&#xff0c;您将学习如何将Context批…

【题解】Luogu P2347 砝码称重

正经DP题解 一道非常好的背包练手题&#xff08; sto&#xff08;注&#xff1a;原思路来源 SLYZ_0120 的题解&#xff09;orz 开始这道题 1.输入六个数&#xff0c;存进数组中 2.初始化 f 数组为0。 f [ i ] 表示重量为 i 的情况是否出现过&#xff08;下面代码使用的是 int 数…

matlab 获取视频图像的信息

获取视频图像的信息可以通过get函数来获取&#xff0c;如get(vid)或者get(getselectedsource(vid))。使用set函数可以设置摄像头获取的图像的一些属性值&#xff0c;也可以直接使用结构数组的“点”来赋值&#xff0c;比如&#xff0c;要持续通过摄像头获取图像&#xff0c;则可…

tomcat使用ssl_使用SSL和Spring Security保护Tomcat应用程序的安全

tomcat使用ssl如果您看过我的上一个博客&#xff0c;您会知道我列出了Spring Security可以做的十件事 。 但是&#xff0c;在开始认真使用Spring Security之前&#xff0c;您真正要做的第一件事就是确保您的Web应用使用正确的传输协议&#xff0c;在这种情况下为HTTPS –毕竟&a…

matlab delete、clf、cla、close、closereq删除对象

matlab中删除对象 删除对象 &#xff08;1&#xff09;delete&#xff1a;删除文件或对象图形 删除文件对象h的格式为&#xff1a;delete(filename)或delete filename 删除图形对象h的格式为&#xff1a;delete(h); 若要无条件删除所有的图形对象&#xff0c;则&#xff1a;set…

Linux系统调用过程分析

参考&#xff1a; 《Linux内核设计与实现》 0 摘要 linux的系统调用过程&#xff1a; 层次如下&#xff1a; 用户程序------>C库&#xff08;即API&#xff09;&#xff1a;INT 0x80 ----->system_call------->系统调用服务例程-------->内核程序 先说明一下&#…

Spring Boot和应用程序上下文层次结构

Spring Boot支持一种指定Spring应用程序上下文层次结构的简单方法。 这篇文章只是演示了此功能&#xff0c;我尚未在我从事的项目中很好地使用它。 Spring Cloud使用此功能来创建引导上下文 &#xff0c;在该上下文中&#xff0c;如果需要&#xff0c;可以从外部配置服务器加载…

drf 解析器,响应器,路由控制

解析器 作用: 根据请求头 content-type 选择对应的解析器对请求体内容进行处理。 有application/json&#xff0c;x-www-form-urlencoded&#xff0c;form-data等格式使用:局部使用:from rest_framework.parsers import JSONParser,FormParseparser_classes [JSONParser, ]全局…

matlab max与min获取矩阵最大最小值函数

1.matlab中Max的用法1&#xff08;Min类似&#xff09; Matlab中max函数在矩阵中求函数大小的实例如下: C max(A) 1&#xff09;返回一个数组各不同维中的最大元素。 2&#xff09;如果A是一个向量&#xff0c;max(A)返回A中的最大元素。 3&#xff09;如果A是一个矩阵&…

shell中exec解析

参考&#xff1a;《linux命令、编辑器与shell编程》 《unix环境高级编程》exec和source都属于bash内部命令&#xff08;builtins commands&#xff09;&#xff0c;在bash下输入man exec或man source可以查看所有的内部命令信息。 bash shell的命令分为两类&#xff1a;外部命…

今天敢用OSS放视频,明天阿里云就敢收你房子

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 请教各位大佬&#xff1a;如果网站里&#xff0c;视频多的话&#xff0c;有什么加速的办法&#xff0c;使用CDN可以嘛? 今天群友king王咨询了这个问题&#xff1a;他的客户网站在美国&#xff0c;用美国节点的服务…

matlab meshgrid

meshgrid用于从数组a和b产生网格。生成的网格矩阵A和B大小是相同的。它也可以是更高维的。 用法: [A,B]Meshgrid(a,b) 生成size(b)Xsize(a)大小的矩阵A和B。它相当于a从一行重复增加到size(b)行&#xff0c;把b转置成一列再重复增加到size(a)列。因此命令等效于&#xff1a; …

连续锁定2个不同的锁会死锁_研究死锁–第5部分:使用显式锁定

连续锁定2个不同的锁会死锁在我的上一个博客中&#xff0c;我研究了使用Java的传统synchronized关键字和锁排序来修复破碎的&#xff0c;死锁的余额转移示例代码。 但是&#xff0c;有另一种方法称为显式锁定。 在这里&#xff0c;将锁定机制称为显式而非隐式的想法是&#xf…

fork source exec区别差异

fork 使用 fork 方式运行 script 时, 就是让 shell(parent process) 产生一个 child process 去执行该 script, 当 child process 结束后, 会返回 parent process, 但 parent process 的环境是不会因 child process 的改变而改变的. source 使用 source 方式运行 scrip…

LOJ2980 THUSC2017大魔法师(线段树+矩阵乘法)

线段树每个节点维护(A,B,C,len)向量&#xff0c;操作即是将其乘上一个矩阵。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define ll long lo…

在ECR上推送Spring Boot Docker映像

在先前的博客中&#xff0c;我们将Spring Boot应用程序与EC2集成在一起。 它是您可以在Amazon Web Services上进行的最原始的部署形式之一。 在本教程中&#xff0c;我们将使用我们的应用程序创建一个docker映像&#xff0c;该映像将存储到Amazon EC2容器注册表中 。 您需要安…

Linux信号处理机制

在Linux中&#xff0c;信号是进程间通讯的一种方式&#xff0c;它采用的是异步机制。当信号发送到某个进程中时&#xff0c;操作系统会中断该进程的正常流程&#xff0c;并进入相应的信号处理函数执行操作&#xff0c;完成后再回到中断的地方继续执行。 需要说明的是&#xff0…

pyspider爬虫框架

特点&#xff1a; 去重处理&#xff0c;结果监控&#xff0c;多进程处理&#xff0c;pyquery提取&#xff0c;错误重试&#xff0c;webUI管理&#xff0c;代码简洁&#xff0c;JS渲染 安装&#xff1a; anaconda里边没搜到pyspider&#xff0c;所以手动安装 查看pyspider的命令…

matlab subplot同时显示多幅图像

subplot是MATLAB中的函数。 使用方法&#xff1a;subplot&#xff08;m,n,p&#xff09;或者subplot&#xff08;m n p&#xff09;。 subplot是将多个图画到一个平面上的工具。其中&#xff0c;m表示是图排成m行&#xff0c;n表示图排成n列&#xff0c;也就是整个figure中有n个…