20145319 实验二

20145319 实验二 “Java面向对象程序设计”

程序设计过程

实验内容

  • 初步掌握单元测试和TDD

  • 理解并掌握面向对象三要素:封装、继承、多态

  • 初步掌握UML建模

  • 熟悉S.O.L.I.D原则

  • 使用TDD设计实现复数类

编写代码

  • 思路: 创建一个complex类,将赋值、加、减、乘、除一一封装,再编写complex test检验即可

  • 伪代码:

      设计SetApart为complex取得实数部的值
      设计SetBpart为complex取得虚数部的值
      设计toString()输出字符串
      设计函数complex add()完成加法操作并return complex q
      设计函数complex minus()完成减法return complex q
      设计函数complex multiply()完成乘法并return
    
  • 产品代码:

      public class complex {
      	private int a;
      	private int b;
    
      	public void SetApart(int a){
      		this.a=a;
      	}
    
      	public void SetBpart(int b){
      		this.b=b;
      	}
    
      	public String toString(){
      		if(b<0){
      				return a+""+b+"i";//a和b中要加入一个字符,不然输出时侯就会先输出a+b的值
      		}//问题儿童二代码中虽然输出结果看上去正确但是不利于检验
      		return a+"+"+b+"i";
      
      	}
    
      	public complex add(complex y){
      		complex q=new complex();
      		q.a=y.a+a;
      		q.b=y.b+b;
      		return q;
      	}
      
      	public complex minus(complex y){
      		complex q=new complex();
      		q.a=a-y.a;
      		q.b=b-y.b;
      		return q;
      	}
      
      	public complex multiply(complex y){
      		complex q=new complex();
      		q.a=-y.b*b+y.a*a;//虚数部之积要取反录入
      		q.b=y.a*b+y.b*a;
      		return q;
      	}
    
      	public complex devide(complex y){
      		complex q=new complex();
      		q.a/=a;
      		q.b/=b;
      		return q;
      	}
      }
    
  • 调试代码:

      import org.junit.Test;
    
      import junit.framework.TestCase;
    
    
       class complexTest extends TestCase {
    
      	@Test
      	public void test() {//b为负数时,输出以及运算
      		complex x=new complex();
      		complex y=new complex();
      		complex z=new complex();
      		complex a=new complex();
      		x.SetApart(5);
      		x.SetBpart(6);
      		y.SetApart(2);
      		y.SetBpart(-3);
      		z=x.add(y);
      		a=x.multiply(y);
      		assertEquals("2-3i",y.toString());
      		assertEquals("7+3i", z.toString());
      		assertEquals("28-3i", a.toString());
      	}
    
      	@Test
      	public void test2(){//a为0时,输出以及运算
      		complex ab=new complex();
      		complex cd=new complex();
      		complex ef=new complex();
      		complex gd=new complex();
      		ab.SetApart(0);
      		ab.SetBpart(5);
      		cd.SetApart(1);
      		cd.SetBpart(4);
      		ef=ab.minus(cd);
      		gd=ab.multiply(cd);
      		assertEquals("0+5i", ab.toString());
      		assertEquals("1+4i", cd.toString());
      		assertEquals("-1+1i", ef.toString());
      		assertEquals("-20+5i", gd.toString());
      	}	
      
      	@Test
      	public void test3(){//b为0时,输出以及运算
      		complex ab=new complex();
      		complex cd=new complex();
      		complex ef=new complex();
      		complex gt=new complex();
      		complex hi=new complex();
      		ab.SetApart(7);
      		ab.SetBpart(0);
      		cd.SetApart(5);
      		cd.SetBpart(9);
      		ef=ab.add(cd);
      		gt=ab.minus(cd);
      		hi=ab.multiply(cd);
      		assertEquals("7+0i", ab.toString());
      		assertEquals("5+9i", cd.toString());
      		assertEquals("12+9i", ef.toString());
      		assertEquals("2-9i", gt.toString());
      		assertEquals("35+63i", hi.toString());
      		}
    
      	@Test
      	public void test4(){//a为0,输出以及运算
      		complex ab=new complex();
      		complex cd=new complex();
      		complex ef=new complex();
      		complex gt=new complex();
      		complex hi=new complex();
      		ab.SetApart(0);
      		ab.SetBpart(3);
      		cd.SetApart(0);
      		cd.SetBpart(7);
      		ef=ab.add(cd);
      		gt=ab.minus(cd);
      		hi=ab.multiply(cd);
      		assertEquals("0+3i", ab.toString());
      		assertEquals("0+7i", cd.toString());
      		assertEquals("0+10i", ef.toString());
      		assertEquals("0-4i", gt.toString());
      		assertEquals("-21+0i", hi.toString());
      	}
      
      	@Test
      	public void test5(){//a、b均为负数……
      		complex ab=new complex();
      		complex cd=new complex();
      		complex ef=new complex();
      		complex gt=new complex();
      		complex hi=new complex();
      		ab.SetApart(-3);
      		ab.SetBpart(-7);
      		cd.SetApart(6);
      		cd.SetBpart(-4);
      		ef=ab.add(cd);
      		gt=ab.minus(cd);
      		hi=ab.multiply(cd);
      		assertEquals("-3-7i", ab.toString());
      		assertEquals("6-4i", cd.toString());
      		assertEquals("3-11i", ef.toString());
      		assertEquals("-9-3i", gt.toString());
      		assertEquals("-46-30i", hi.toString());
      		}
      	}
    

单元测试总结

  • 在本次试验中,我们第一次接触到了一种测试代码的方法,单元测试,相比我们自己编写complextest代码,使用一堆if ……else if语句来说,单元测试无疑简单了许多,也不用担心自己再写test程序时if……else语句出现逻辑上的问题,只需要使用assertEquals("理想结果",调用函数);而且可以测试多组数据,只需要复制第一个Test块,然后修改赋值语句即可,而且代码本身看上去也更加简洁,比较方便检查

UML使用

PSP时间统计

耗时(min) 百分比
需求分析 10 min 4
设计 10 min 4
代码设计 40 min 16
测试 120min 52
分析总结 60min 24
原文地址:https://www.cnblogs.com/20145319zk/p/5389265.html