软件工程网络15结对编程作业1

基本信息

1109237-20180325212408584-313750911.jpg

  • 码云提交记录及代码规范

1109237-20180325213852248-305401972.png

1.改进现有代码

分析网络14部分现有程序代码(请选择其中一个)

个人博客地址5:http://www.cnblogs.com/NianQiFeng
源代码:https://git.coding.net/qwx_hh/java-szys.git

所谓大泥球,是指杂乱无章、错综复杂、邋遢不堪、随意拼贴的大堆代码。这些年来,为了对付这个泥球,多种指导方法一起出现,然而实际情形没多大变化,“大泥球”看起来仍然是设计软件架构的最常见方法。我们现在惯用的敏捷性开发的很多方面会直接导致泥球,包括:缺少前期设计、应对需求变化过晚、应对架构变化过晚、碎片式增长。

1109237-20180325213116939-377670037.png

1109237-20180325213127505-516125850.png

参考资料:
软件工程的瀑布, 大泥球, 教堂,集市,和银弹

(1)需求分析:

针对现有代码的改进分析,新开发功能的分析;

答:

    ①计时功能:
    随着课余娱乐项目的增加,现在的小孩子在学习上变得越来越不自觉,需要老师、家长在背后催着才会做作业,因此需要实现一个计时功能 。将做题过程进行计时可以解决这个问题,从花费时间的长短就可以看出是否取得进步。
    
    ②语言切换功能:
  为了让这个四则运算自动生成器的使用人群跨越国界,就需要我们实现语言切换功能。不仅让中国大陆的小孩可以简单上手这个小程序,同时还能让中国台湾以及外国的小孩同样可以使用。
    
    ③增量计算:
  大多数的时候我们都不能要求这些小孩子在一个时间段内持续不断地做计算题,而是让他们分次来完成。因此就需要我们能够记录用户做题的总数,即使在用户退出又再次启动时,可以做到把以前的对错数量保存并在此基础上进行增量计算。

    ④增加运算符:
   仅含加减乘除的四则运算往往解决不了较高年级的需求,对于高年级的同学,题目需要更复杂的题目来锻炼他们的做题能力和提高解题正确性,需要增加括号,乘方这些更复杂的运算符进去更能满足高年级同学的需求。

    ⑤减少重复率:
    如果每次测试都会出现一些重复的题目,那么有何必浪费时间去做同一道题,学生需要掌握的是各种计算方式而不是及答案,因此,需要给出题程序进行改善减少出题的重复率。

(2)程序设计:

针对新开发功能做设计,建议使用思维导图。

克隆源代码的思维导图

1109237-20180325210256498-1751623.png

新功能的思维导图

1109237-20180325210142541-118546565.png

  • 增加括号操作符: 计算步骤: 1.中辍表达式转后缀; 2.计算后缀表达式 ;

将中缀表达式转换成后缀表达式 (eg:中缀表达式8+(9-1)8+7/2 ),后缀表达式8 9 1 - 8 + 7 2 / +,元素之间之间用空格分隔。从左到右遍历中缀表达式的每一个数字和运算符 ,如果数字就输出(即存入后缀表达式) ,如果是右括号,则弹出左括号之前的运算符 ,如果优先级低于栈顶运算符,则弹出栈顶运算符,并将当前运算符进栈 ,遍历结束后,将栈则剩余运算符弹出。

  • 减少重复题目

将Arithmetic函数产生的算式拆开放入list中,然后分别与已显示的算式题比较,若contain则表示重复题,出题数减一,继续出下一道算式,知道测试者要求的题目数全部输出结束,关于重复题目,感觉比较复杂,只能基于原有的代码进行比较粗略的改进,虽然方法不是很精准,但是是能避免重复题的。

(3)代码展示:

展示每个功能的核心代码。

  • 出题代码:可以出整数题和分数题

1109237-20180325184650630-1072861388.png

  • 随机数据出题

1109237-20180325184907608-2034214521.png

  • 增加运算符

1109237-20180325184929061-893906709.png

  • 避免重复

1109237-20180325210521431-1125623533.png

  • 分式计算

1109237-20180325211347298-1168822143.png

(4)程序运行:

程序运行及每个功能的使用截图。

  • 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24

1109237-20180325182435073-924241320.png

  • 并且要求能处理用户的输入,并判断对错,打分统计正确率;

1109237-20180325181827956-1060137325.png

  • 要求能处理用户输入的真分数, 如 1/2, 5/12 等;

1109237-20180325182059023-1998203667.png

  • 使用 -n 参数控制生成题目的个数;

1109237-20180325182226341-1427087111.png

1109237-20180325182234275-1423065026.png

  • 记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算;

1109237-20180325183400241-2100026898.png

  • 有计时功能,能显示用户开始答题后的消耗时间;

1109237-20180325182449305-1218230882.png

  • 界面支持中文简体/中文繁体/英语,用户可以选择一种;

1109237-20180325182632763-540407214.png

1109237-20180325182644152-825150522.png

1109237-20180325182654172-2091168141.png

  • 记录保存题目和答案和答题情况

1109237-20180325211445969-620815591.png

  • 增加括号操作符

1109237-20180325182812254-1277414675.png

  • 减少重复题目

这个可能需要好几次才能充分证明题目的重复率几乎为0,具体代码在上一题。

(5)测试:

单元测试:

1109237-20180325210618129-129635502.png

1109237-20180325210658387-2049722515.png

覆盖率测试:

1109237-20180325210720672-707074984.png

1109237-20180325214230161-1393900740.png

1109237-20180325210800780-1782818164.png

1109237-20180325210749487-392231748.png

1109237-20180325210816866-590416024.png

效能分析:

(6)小结感受:

结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会。

这次结对编程仿佛又经历了一次课设,我们这次选择的代码本身就挺好的,计时语言选择都有,但是随机出题的难度比较低而且代码有点乱,看起来有点累,在弄懂代码的过程中耗费了不少时间。通过读别人的代码,真的能收获很多,了解了怎么用更简单的方法来解决问题。这次是两个人的合作,虽然我们最终的代码没有很完美,但是的确在原来的代码上做了一些改善,包括增加了运算符,减少出题重复率等,1+1有没有>2我不知道,但是对于我这个能力不太好的人来说确实是有很大的收获。,编程的过程中很累,但是因为是两个人,感觉不是自己一个人在战斗,而且,还可以互相讨论怎么解决难题。在后期的测试过程中,get到了一些测试工具也学到了更多的测试方法,很开心能学到新的东西。不过说实话,真的太累人了。

PSP

PSP2.1个人开发流程预估耗费时间(分钟)实际耗费时间(分钟)
Planning计划3045
· Estimate明确需求和其他相关因素,估计每个阶段的时间成本68
Development开发320400
· Analysis需求分析 (包括学习新技术)4530
· Design Spec生成设计文档1515
· Design Review设计复审3045
· Coding Standard代码规范58
· Design具体设计120180
· Coding具体编码100120
· Code Review代码复审8090
· Test测试(自我测试,修改代码,提交修改)3040
Reporting报告3028
·测试报告68
·计算工作量58
·并提出过程改进计划812

转载于:https://www.cnblogs.com/dabaolyr/p/8644152.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值