软件工程网络15结对编程(代码片段)

sakurai3104 sakurai3104     2022-10-27     618

关键词:

软件工程网络15结对编程


链接


1.需求分析

1.弱点分析:

  • 启动程序,程序窗口定位在屏幕左上角,操作不是很方便。语言切换也不是以按钮的形式,操作不明显。

  • 变量名随意,abcdefg,虽然知道是干什么的,但是进行后续扩写操作逻辑会混乱。

  • 测试过程中出现过这种bug,因为源代码没有考虑过1/1的情况。

  • 启动复习功能,只是把当前的题目重置一遍,题目不变。并且复习时错题会读入存储错题的文档,导致题目被重复读入。并且这个文档在全程代码中没有被读出(虽然写了读出程序,但是没有能够触发的条件,根本没用)。

  • 当前题目支持多符号运算,基本上不是两个数的加减乘除就是分数的加减乘除,重复的概率比较大。难度也基本上,小学初级。

  • 题目界面一定要把每个题目都进行回车提交操作才能结束计时,也就是说,即使不会做的题目,也要进行回车操作,非常不便。

2.新开发功能分析

  • 优化初始界面,将语言选择功能改为选择框。

  • 在题目界面加上“结束”功能,点击时将显示所有未做题目的答案。

  • 修改“复习”功能,将复习功能改为从错题中随机读取,并保证每次读取不重复。

  • 修改“再一次”功能,将功能设定为重回初始界面。

  • 增添括号操作符。

  • 增加平方操作。

  • 减少重复题目。这个暂时没能做到,只能保证复习题不重复出题。为了相对优化先减小重复出题的概率。

2.程序设计

1.码云提交记录

2.类图

3.覆盖率

需要测试覆盖率,要尝试把所有条件触发。但是因为某些条件触发概率太低,如下:

(1)随机分母为0,测试过程中没触发成功

(2)因为做测试,所以做题时间不长,也就没有触发下列时间的判断,特别是1小时的。

(3)关于文件存储,测试时文件已存在,下图新建文件代码没有触发。

(4)代码中存在必要的异常捕获,没有触发。

4.逻辑图,红色为修改或新增部分

5.内存分析优化


3.代码展示

以下仅暂时主要代码,调用部分可能涉及到类的传参判断,暂时省略。

  • 随机生成算式部分(部分)

         public String fra_operation()	
     
     this.t1 = new Random().nextInt(10)%(10-1+1) + 1;
     this.t2 = new Random().nextInt(10)%(10-2+1) + 2;
     this.t3 = new Random().nextInt(10)%(10-1+1) + 1;
     this.t4 = new Random().nextInt(10)%(10-2+1) + 2;
     
     int fz=1,fm=t2*t4;	
     if(k==1)
     
     	if(t2<t1||t4<t3||t2%t1==0||t4%t3==0)
     	
     		astr=fra_operation();
     		return astr;
     			
     	if(k1==0)
     	
     		fz=t1*t4+t2*t3;
     				
     	if(k1==1)
     		fz=t1*t4-t2*t3;
     		if(fz==0)
     		
     			return astr=("0");
     		
     			
     	if(k1==2)
     		fz=t1*t3;
     	if(k1==3)
     	
     		fz=t1*t4;
     		fm=t2*t3;
     	
     	int f=common_divisor(fm,fz);		
     	if(f>0)
     		fm=fm/f;
     		fz=fz/f;
     	
     	if(f<0)
     		fm=-fm/f;
     		fz=-fz/f;
     	
     	astr = (fz+"/"+fm);
     	if(astr.equals("1/1")) astr="1";
     	if(fm==1) astr = (fz+"");
     
     else if(k==0)
     
     	fm=1;
     	if(k1==0)
     	
     		if(k2==3)
     			fz=t1*(t2+t3)*t4;
     		else fz=t1*t2+t3*t4;
     	
     	if(k1==1)
     	
     		if(k2==3)
     			fz=t1*(t2-t3)*t4;
     		else fz=t1*t2-t3*t4;
     	
     	if(k1==2)
     	
     		fz=t1*t2*t3*t4;	
     		
     	if(k1==3)
     	
     		if(k2==1)
     		
     			if(t1==0||t2==0) return astr=("0");
     			else if(t3==0||t4==0)
     			
     				astr=fra_operation();
     				return astr;						
     			
     			else
     				fz=t1*t2;
     				fm=t3*t4;
     			
     					
     		else	
     		
     			if(t3==0)
     			
     				astr=fra_operation();
     				return astr;
     			
     			else if(t1==0||t2==0||t4==0) return astr=("0");
     			else
     				fz=t1*t2*t4;
     				fm=t3;	
     			
     							
     		int f=common_divisor(fm,fz);						
     		if(f>0)
     			fm=fm/f;
     			fz=fz/f;
     		
     		if(f<0)
     			fm=-fm/f;
     			fz=-fz/f;
     		
     		astr = (fz+"/"+fm);
     		
     	if(k1!=3) astr=fz+"";
     	if(fm==1) astr = (fz+"");
     
     if(astr.equals("1/1")) astr="1";	
     return astr;	
         
    
  • Answer、Question分别存储部分

          Question=new ArrayList<String>();
      Answer=new ArrayList<String>();
      System.out.println();
      for(int a=0;a<i;a++)
          		
      	Runtime.getRuntime().gc();		
              boolean flag= new Random().nextBoolean();        
              Arithmetic hh = new Arithmetic(flag);        
              String int_str = hh.int_operation();
              String fra_str = hh.fra_operation();        
              if(flag==true)
              
          	    Answer.add(int_str);
          	    Question.add(hh.toString());
              	        	
              if(flag==false)
              
          	    Answer.add(fra_str);
          	Question.add(hh.toString());
                      
         
    
  • 复习部分

      if(Number.getText().matches("\\\\d*"))
              
      	Frame.hh.i = Integer.parseInt(Number.getText());	
      	if(Frame.hh.i<=10&&Frame.hh.i>=1)
      	
      		
          	Frame.hs.Histroy_read();
              for(int a=0;a<Frame.hh.i;a++)   	
              	int b = new Random().nextInt(Frame.hs.astrlist.size()-1);
              	Frame.hh.Answer.set(a, Frame.hs.astrlist.get(b));
              	Frame.hh.Question.set(a, Frame.hs.qstrlist.get(b));
              	List<Integer> count=new ArrayList<Integer>(Arrays.asList(list));
              	if(count.contains(b)) a--;
              	else list[a]=b;	
              
              for(int a=0;a<(10-Frame.hh.i);a++)
              	Frame.hh.Answer.set(a+Frame.hh.i, "");
              	Frame.hh.Question.set(a+Frame.hh.i, "");
                 
          	
           			
          java.awt.EventQueue.invokeLater(new Runnable() 
                public void run() 
                     new Frame(true).setVisible(true);
                 
             );  	
          	this.dispose();
          	i++;
          	try 
      			Frame.hs.History_num();
      		 catch (FileNotFoundException e) 
      			e.printStackTrace();
      		
      	
    

4.程序运行


5.小结感受

  • 有幸跟原作者交流了一下,果然是万恶之源。

  • 结对编程能带来1+1>2的效果。毕竟在编程的时候,当局者迷旁观者清的情况很容易出现。交流过程中能理清思路,一个人在一个问题上纠结太久容易进入死胡同。

  • 我和我的队友,经常相隔两地,毕竟我们有不同的学习方向。所以除了在课堂上,基本靠通讯工具交流。(我相信经过Java课设合作我们已经很有默契了。)其实很多事情不需要面对面也能交流清楚。

  • 打代码时,特别是在理算法的时候,千万,不要,被打扰!惨痛的教训。(我果然是亲生的,妈妈我爱你。)

  • 技术部分还是有很多限制。比如树的最小生成树算法,基本上能看懂c++的算法,虽然只是在特定条件下的触发情况。但是换成java就下不了手,尝试写了一下,对List之类的还不是很熟悉,就暂时没用了。因为这次限制在10题,然后根据出题类里的各种条件换算,重复率算了一下,真的很低。相比之下错题重复的概率较大,所以先解决这个问题。顺便我在找资料的时候链接到了北京大学ACM,感受到了差距。。。

  • 选择这个源代码是因为看到了颜文字,感觉,比较亲和。然后,运行一遍发现很多问题,那就先修改这些bug吧,毕竟用户体验感还是很重要的。事实上我们两个可能都有强迫症吧,问题摆在面前不解决就很难受。然后理清楚了我们要做什么,虽然有的设想是在做的过程中突然想到,“这样做会不会比较好?”,但是基本上是按照原有的思路进行下去的。

  • 团队合照。附个记录吧。。。

  • PSP表格。。因为编码时间比较凌乱,大概估了个实际时间。

软件工程网络15结对编程作业(代码片段)

成员201521123060邹其元[个人博客地址:(http://www.cnblogs.com/zq1996/)]201521123075江鹭涛[个人博客地址:(http://www.cnblogs.com/tt1104/)]题目要求:1.改进现有代码分析网络14部分现有程序代码(请选择其中一个)个人博客地址1:http://www.cnblogs.c... 查看详情

软件工程网络15结对编程作业(201521123062)(代码片段)

0、结对编程成员:吴剑通博客地址:https://www.cnblogs.com/wjt960310/杨钧宇博客地址:http://www.cnblogs.com/GOB8023/码云地址:https://gitee.com/jmu201521123056/four_operations源代码:https://coding.net/u/Belong033/p/java-third/git原题目要求 查看详情

软件工程网络15结对编程作业(代码片段)

201521123036?曾艺佳博客201521123039?王兴 ?博客码云地址:四则运算选择改进的代码地址:个人博客地址2:http://www.cnblogs.com/belong033源代码:https://coding.net/u/Belong033/p/java-third/git需求分析:针对现有代码的改进分析,新开发功能的... 查看详情

软件工程网络15结对编程作业(201521123045)

一.结对编程成员:郑子熙(201521123045):陈文俊(201521123047):二.对原有程序分析:三.改进现有代码:四.代码展示:五.PSP:六.实验小节: 查看详情

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

Deadline:2018-3-2510:00PM,以提交至班级博客时间为准。请在两周时间内完成结对编程练习,注意时间的合理安排。参考来自http://www.cnblogs.com/xinz/p/7417960.html题目要求:1.改进现有代码分析网络14部分现有程序代码(请选择其中一个... 查看详情

软工网络15结对编程练习(代码片段)

 一.结对编程成员:叶金蕾(201521123085):http://www.cnblogs.com/yeei66/张文博(201521123089):http://www.cnblogs.com/Abe1/二.对原有程序分析:三.改进现有代码:四.代码展示:五.PSP:  查看详情

软工网络15结对编程练习(代码片段)

1.改进现有代码博客链接201521123017201521123015码云:使用图形界面实现四则运算四则运算优化类图JUnit单元测试运行截图四则运算优化使用图形界面实现四则运算2.功能改进与扩展乘方if(s.indexOf("^")>-1)inti=s.indexOf("^");if(s.indexOf("^",i+... 查看详情

软工网络15结对编程练习201521123056吴剑通(代码片段)

0、结对编程成员:吴剑通博客地址:https://www.cnblogs.com/wjt960310/杨均宇博客地址:http://www.cnblogs.com/GOB8023/码云地址:https://gitee.com/jmu201521123056/four_operations源代码:https://coding.net/u/Belong033/p/java-third/git原题目要求 查看详情

软件工程网络15结对作业1(代码片段)

一、需求分析1.题目需求1)除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6+1/8=7/242)运算符为+,?,×,÷3)并且要求能处理用户的输入,并判断对错,打分统计正确率。4)要求能处理用户输入的真分数,如1/2... 查看详情

软件工程结对编程博客(代码片段)

目录结对编程博客1、GitHub项目地址2、PSP表格3、看教科书和其它资料中关于InformationHiding,InterfaceDesign,LooseCoupling的章节,说明你们在结对编程中是如何利用这些方法对接口进行设计的4、计算模块接口的设计与实现过程Input类PreProc... 查看详情

软工15结对编程练习(代码片段)

1.改进现有代码本次改进选择第二组代码通过对代码的观察,总结出如下关系图并对代码覆盖率进行了测试,如下在一次运行中,createFraction、createInteger两类出现了大面积未执行的代码,这是因为出题量很少,整数加减乘除以及... 查看详情

201521123072结对编程(代码片段)

软件工程结对编程作业1.结对信息1.1结对编程成员:黄晓杨:201521123071秦贞一:2015211230721.2项目开发的码云地址:https://gitee.com/HXY071/four_operations.git1.3结对照片:1.4所选代码个人博客地址5:http://www.cnblogs.com/NianQiFeng,源代码:http... 查看详情

结对编程作业

软件工程网络15结对编程作业1.链接学号:201521123069博客链接:http://www.cnblogs.com/kzq-java-markdown/学号:201521123074博客链接:http://www.cnblogs.com/guzhiling/结对编程码云项目链接:https://gitee.com/guzhiling/software_engineering/tree/mas 查看详情

软件工程第三周结对编程(代码片段)

结对编程之四则运算1、项目成员连燕波:201521123081曾飞远:201521123080队员风采展示结对编程码云地址:https://gitee.com/Yanboooooooo/software_engineering_2015211230812、需求分析随着课余娱乐项目的增加,现在的小孩子在学习上变得越来越不... 查看详情

软工网络16结对编程(代码片段)

1、码云项目地址结对项目码云地址结对编程队友学号姓名各自项目地址201621123013侯湘宁https://www.cnblogs.com/kyrie/p/9754498.html201621123011陈瑀https://www.cnblogs.com/eshy/码云记录2、PSP表格PSP2.1个人开发流程预估耗费时间(分钟)实际耗费时... 查看详情

网络四则运算结对编程(代码片段)

一、结对信息项目组合郭炜埕201521123065郑晓丽201521123066项目地址(https://gitee.com/vicheng/four_operations/tree/master)二、结对编程1、需求分析原来的代码只实现简单的两位数之间的加减乘除,而我们为需要改进其功能,实现了三位数的计... 查看详情

现代软件工程结对编程——四则运算ui(代码片段)

结对作业              ——用户界面设计徐楠青PB16120408王馨儿PB16060765 项目简介:本次结对编程的任务是写一个能自动生成小学四则运算题目并给出答案的软件,分为core组和... 查看详情

软件工程15结对编程作业

项目成员:郑子熙201521123045博客地址:http://www.cnblogs.com/zhengizixi/码云地址:https://gitee.com/zhengzixi/four_operations陈文俊201521123047博客地址:http://www.cnblogs.com/chendajia/码云地址:https://gitee.com/chendajia/pair_pr 查看详情