软件工程(2019)结对编程第二次作业——小学四则运算自动生成

1.题目要求

能够自动生成四则运算练习题
可以定制题目数量
用户可以选择运算符
用户设置最大数(如十以内、百以内等)
用户选择是否有括号、是否有小数
用户选择输出方式(如输出到文件、打印机等)
最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)

2.角色分配及代码

结对小伙伴——张浩宇
在此次项目中,我担任“领航员”的角色,张浩宇担任“驾驶员”的角色。
此次项目的作业已上传至Coding.net

3.测试分析

可视化界面的一些测试,这个测试直接展示结果即可。
(1)容错处理测试(包括最大值、题目数、运算符的选择、文件的生成)




(2)正常测试(包括最大值、题目数是否正确,打印是否正常以及能否导出文件)




由于功能函数都为随机数的生成,无法进行测试。

4.代码审查表

C#代码审查表
审查人 王宗波 审查日期 2019.5.4
代码名称 Auto_Setting_Questions 代码作者 张浩宇
重要性 审查项 结论
命名    
重要 是否采用Pascal Casing + Camel Casing规范?
重要 布尔型属性名称前缀是否具有二值性?(如:has/can/is/enable等)
注释    
  注释是否较清晰且必要?
重要 复杂的分支流程是否已经被注释?
  距离较远的}是否已经被注释?
重要 方法、属性、事件是否已经有文档注释?(功能、输入、返回及其他可选)
  特殊用法是否被注释?
声明、空白、缩进    
  每行是否只声明了一个变量?(特别是那些可能出错的类型)
重要 类属性是否都执行了初始化?
  代码段落是否被合适地以空行分隔?
  是否合理地使用了空格使程序更清晰?
语句/功能分布    
  包含复合语句的{}是否成对出现并符合规范?
  是否给单个的循环、条件语句也加了{}?
  if/if-else/if-else if-else/do-while/switch-case语句的格式是否符合规范?
  单个变量是否只做单个用途?
  单行是否只有单个功能?(不要使用;进行多行合并)
重要 单个方法是否执行了单个功能并与其命名相符?
  操作符++和— —操作符的应用是否复合规范?
规模    
重要 单个方法是否不超过100行?
  单个方法内超过10行以上执行单一功能的代码块是否使用#region分块?
重要 判断和循环的缩进层数是否不超过3层? 
可靠性(总则/变量和语句)    
重要 IO、网络连接、GDI等资源是否采用Using块管理Dispose?
重要 对数组的访问是否是安全的?(合法的index取值为[0, MAX_SIZE-1])。
  程序中是否只使用了简单的表达式?
重要 是否已经用()使操作符优先级明确化?
重要 是否每个if-else if-else语句都有最后一个else以确保处理了全集?
重要 是否每个switch-case语句都有最后一个default以确保处理了全集?
  for循环是否都使用了包含下限不包含上限的形式?(k=0; k<MAX)
重要 XML标记书写是否完整,字符串的拼写是否正确?
  对于流操作代码的异常捕获是否有finally操作以关闭流对象?
重要 是否使用Single.Equals()判断浮点数值是否相等? 
重要 是否使用String.IsNullOrEmpty()判断字符串是否为空?
可靠性(方法)    
重要 是否确认在对Map对象使用迭代遍历过程中没有做增减元素操作?
重要 线程处理方法循环内部是否有异常捕获处理,防止线程抛出异常而退出? 
  原子操作代码异常中断,使用的相关外部变量是否恢复先前状态?
可维护性    
重要 实现代码中是否消除了直接常量?(用于计数起点的简单常数例外)
  是否消除了导致结构模糊的连续赋值?(如a= (b=d+c ))
  是否有冗余判断语句?(如:if (b) return true; else return false;)
  是否把方法中的重复代码抽象成私有方法?
安全性    
  是否去除了用户字符串输入中多余的空格?
重要 是否对用户输入数据进行了必要的合法性验证?
重要 如不得不去除了.NET页面验证功能,是否采用了必要的预防措施?
重要 对限制字符数的节选性内容调用,是否对Html标签不配套的情况采取了预防措施?
重要 SQL查询是否优先采用存储过程?
重要 连接字符串是否保存在.config文件中?
重要 是否有可能引起死锁或死循环的可能?
  是否有长时间占用有限资源的情况?
##5.对驾驶员的评价   本次我们这个和项目的驾驶员是[张浩宇](https://www.cnblogs.com/martinzhang98)同学。   所谓驾驶员呢,就是控制键盘输入,顾名思义就是主要负责编写代码。由于我们之前所选定的环境都是C++,但是这个题目要求最好设计用户可视化界面,所以我们得选择用别的语言。由于自己在五一之前那段时间忙于运动会,所以我的小伙伴张浩宇主动担任起了驾驶员的职责,最终他选择了C#。   在编程开始之前,他已经写好了设计文档,并找时间与我探讨了他的想法,以及就他的想法让我给出一点建议,以及对他的不足之处及时指正。   在进行程序设计时,它有着自己明确的思路,小到变量的定义,大到函数的设计,每一步都进行的井然有序,而且完成每一个题目要求的功能。   编程结束之后,又主动找我展示运行结果,以及让我看看有没有他考虑不周的地方,并为我下一步的测试指明了方向。   但是在此次项目中驾驶员也有着一点点小瑕疵,代码中存在着一些不影响运行结果的小问题,这可能是两人在合作过程中沟通不足,以及没有对每一步进行复审的结果。   总体来说,这次项目驾驶员对于自己的角色扮演的非常出色,对于自己的任务尽职尽责,而且还能给领航员在一些方面指明方向。对于这样一个优秀的伙伴,他身上有许多值得我去学习的地方。 结对作业时的照片 ![](https://img2018.cnblogs.com/blog/1644656/201905/1644656-20190504150807826-1577041709.jpg) ##6.项目总结   此次项目我们选择了小学四则运算自动生成程序,相比于电梯项目,这个项目的难度是要小一点。但是刚开始的时候我们也是遇到了瓶颈,设计用户可视化界面,之前所有的编程我们都是在小黑框里实现还没有接触过可视化界面。所以首先我们得选择一种别的语言,JAVA,WEB,PYTHON,还是C#呢,考虑到诸多因素之后最终我们选择了C#,选定语言之后我们又进行了简单的学习。   在编程之前,我们俩就一些功能的实现、出错处理、界面的美观的程度、用户需求等方面进行了讨论,最终敲定了一个令彼此都满意的方案。   在进行测试时,有好多功能都是生成随机数,无法进行测试,所以我就一些特定的功能运行后进行了验证。   对于第一次可视化界面的完成,让我们从一个小白变成了有个入门者,三年来第一次告别了小黑框,对于我们的学习有很大的激励,从而也鼓励我们在今后一些自己没接触过的东西有着一颗勇于探索的心。   但是在这次项目中也有着或多或少还有点瑕疵,最开始设计时我们考虑到可以设计让用户看到题目的答案,并进行纠错。但是在编程是发现这与我们所实现已要求的功能有些冲突,而且比较复杂,受制于时间,所以我们就没有设计这个功能。但我们在设计时预留了这两个函数的位置,今后有时间我们会进行完善。   总结一下这次项目吧,学习了新得语言,完成了可视化界面,与小伙伴开心的结对,收获不亚于做一门课设。
posted @ 2019-05-05 08:55  wangzongbo  阅读(239)  评论(0编辑  收藏  举报