结对作业
1、代码地址:
2、PSP:
PSP |
任务内容 |
计划完成需要的时间(min) |
Planning |
计划 |
10 |
Estimate |
明确需求和其他相关因素 |
5 |
Development |
开发 |
10 |
Design spec |
生成设计文档 |
10 |
Design review |
设计复审 |
11 |
Coding standard |
代码规范 |
10 |
Design |
具体设计 |
20 |
Coding |
具体编码 |
300 |
Code review |
代码复审 |
20 |
Test |
测试 |
10 |
Record time spent |
记录用时 |
10 |
Test report |
测试报告 |
50 |
Size measurement |
计算工作量 |
1 |
Postmortem |
事后总结 |
30
|
3、Information Hiding:信息隐藏是结构化设计与面向对象设计的基础。在结构化中函数的概念和面向对象的封装思想都来源于信息隐藏。代码模块应该采用定义良好的接口来封装,这些模块的内部结构应该是程序员的私有财产,外部是不可见的。
Interface Design:接口设计是描述软件内部、软件和操作系统之间及软件和人之间如何通信。
Loose Coupling:松耦合的目标是最小化依赖。松耦合这个概念主要用来处理可伸缩性、灵活性和容错这些需求。想让对象与对象间松耦合,通过增加抽象类(Abstract Class)或者接口来做到。
4、计算模块采用command类,和之前的个人项目差别不大。
import java.io.IOException; public class Command { public static void main(String[] args) { int sum = 0, sumZF = 1, min = 1, max = 100; boolean cc = false; try { for(int i=0; i<args.length; i++) { if(args[i].equals("-n") ) { sum = Integer.parseInt(args[++i]); } else if(args[i].equals("-m")) { min = Integer.parseInt(args[++i]); max = Integer.parseInt(args[++i]); if(min>max) { System.out.println("设置的最小值 :" + min + "大于设置的最大值" + max); return; } } else if(args[i].equals("-o")) { sumZF = Integer.parseInt(args[++i]); } else if(args[i].equals("-c")) { cc = true; } else { System.out.println(args[i] + "不是一个有效的命令,请输入有效的命令(-n, -m, -o, -c)"); return; } } } catch (Exception e) { System.out.println("请输入有效的命令及其对应的参数"); } Lib.setSumZF(sumZF); Lib.setNum(min, max); Lib.setcc(cc); String[] list = new String[sum+3]; for(int i=0; i<sum; i++){ list[i] = Lib.makeAndCalQuestion(); } try{ Lib.print(list, sum); } catch(IOException ioe) { ioe.printStackTrace(); } } }
5、计算模块运用的最快速和简便的方法,效率和性能比较好所以不做修改。
6、单元测试Lib类
import java.io.IOException; import org.junit.Test; public class LibTest { Lib lib = new Lib(); @Test public void testLib() { } @Test public void testSetSumZF() { Lib.setSumZF(5); Lib.setSumZF(-1); } @Test public void testSetcc() { Lib.setcc(false); Lib.setcc(true); } @Test public void testSetNum() { Lib.setNum(1, 5); Lib.setNum(2, 100); } @Test public void testMakeAndCalQuestion() { Lib.setcc(true); Lib.setNum(1, 20); Lib.setSumZF(5); Lib.makeAndCalQuestion(); Lib.setcc(false); Lib.setNum(5, 100); Lib.setSumZF(4); Lib.makeAndCalQuestion(); } @Test public void testPrint() { String[] list = new String[10]; for(int i=0; i< 5; i++) list[i] = Lib.makeAndCalQuestion(); try{ Lib.print(list, 5); } catch(IOException ioe) { ioe.printStackTrace(); } } }
代码覆盖率为
8、界面设计采用gui类
import javax.swing.*; import java.awt.*; public class GUI extends JFrame{ /** * */ private static final long serialVersionUID = 1L; public GUI() { Color color = new Color(200,200,200); Font font = new Font("SansSerif",Font.BOLD,18); Font font2 = new Font("SansSerif",Font.CENTER_BASELINE,26); JPanel p1 = new JPanel(); p1.setLayout(new GridLayout(5,3)); JLabel NOQ= new JLabel("需要的题目数量(1~10000):"); NOQ.setFont(font); p1.add(NOQ); p1.add(new JTextField(4)); p1.add(new JLabel(" ")); JLabel RON = new JLabel("题目的数值范围(下界1~100,上界50~1000):"); RON.setFont(font); p1.add(RON); p1.add(new JTextField(2)); p1.add(new JTextField(2)); JLabel NOO = new JLabel("题目中最多存在运算符数量:"); NOO.setFont(font); p1.add(NOO); p1.add(new JTextField(2)); p1.add(new JLabel(" ")); JLabel isMul = new JLabel("题目中是否有乘除法(默认为无):"); isMul.setFont(font); p1.add(isMul); JRadioButton b2 = new JRadioButton(); p1.add(b2); b2.setBackground(new Color (200,200,200)); p1.add(new JLabel(" ")); JLabel isBracket = new JLabel("题目中是否有括号(默认为无):"); isBracket.setFont(font); p1.add(isBracket); JRadioButton b1 = new JRadioButton(); b1.setBackground(new Color(200,200,200)); p1.add(b1); p1.add(new JLabel(" ")); p1.setFont(font); JPanel p2 = new JPanel(); JButton Cre = new JButton("开始生成!"); Cre.setFont(font); Cre.setBackground(color); p2.add(Cre,BorderLayout.WEST); JButton exit = new JButton("退出系统"); p2.add(exit,BorderLayout.EAST); exit.setFont(font); exit.setBackground(new Color(200,200,200)); p2.add(exit,BorderLayout.EAST); add(p1,BorderLayout.CENTER); JLabel title = new JLabel("欢迎来到四则运算题目生成系统!"); title.setFont(font2); JPanel p3 = new JPanel(); p3.add(title,BorderLayout.CENTER); add(p3,BorderLayout.NORTH); add(p2,BorderLayout.SOUTH); setBackground(Color.cyan); p1.setBackground(new Color(200,200,200)); p2.setBackground(new Color (200,200,200)); p3.setBackground(new Color (100,100,100)); } public static void main(String[] args) { GUI frame = new GUI(); frame.setTitle("四则运算题目生成系统"); frame.setSize(1250, 500); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }
界面样式
9、界面模块与计算模块通过Java事件驱动完成连接。
10、
11、结对编程既有优点又有缺点。
优点:
- 增强代码和产品质量,并有效的减少BUG。
- 降低学习成本。一边编程,一边共享知识和经验,有效地在实践中进行学习。
- 在编程中,相互讨论,可能更快更有效地解决问题
缺点:
1.有经验的人更喜欢单兵作战,找个人来站在他背后看着他可能会让他感到非常的不爽,最终导致编程时受到情绪影响,反而出现反作用
2.面对新手,有经验的老手可能会觉得非常的烦躁。不合适的沟通会导到团队的不和谐
队员优缺点:
肖遥:做事认真,执着,技术比较好,能很好的融入团队并帮助其他队员。缺点:有时候比较马虎,不顾小节。
自己:为人处事比较宽容,能很好的和别人交流,能认真做一件事。缺点:做事比较拖沓,散漫。