205315Java实验二实验报告

本文介绍了一个基于测试驱动开发(TDD)的复数类设计案例,详细展示了从需求分析到实现再到测试的全过程,并提供了完整的伪代码、产品代码及测试代码。

实验内容

  1. 初步掌握单元测试和TDD

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

  3. 初步掌握UML建模

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

  5. 了解设计模式

    实验步骤

    (一)单元测试

    用程序解决问题时,要会写三种码:

1.先按要求写出伪代码。
2.然后写出产品代码。
3.最后进行测试。
886825-20160414104328941-1882910426.png

886825-20160414104345223-1064099508.png

(二) TDD(Test Driven Devlopment, 测试驱动开发)

先根据需求写测试代码,然后再根据测试写产品代码,使产品代码通过测试。

1.先创建一个test文件夹,修改其属性用来存放测试代码。
2.在src中新建.java文件,用来编写产品代码。
3.创建产品代码中的测试类,并存放到测试文件夹text中。

886825-20160414105621207-1866630655.png

4.根据需求编写测试代码。
试验测试代码:

886825-20160414105818160-1254810802.png

输入测试代码:

886825-20160414110029332-873634970.png

5.因为没有产品代码,测试代码存在错误,接下来,输入产品代码。
886825-20160414110404379-535276901.png

此时,测试代码运行成功
886825-20160414110454098-480505145.png

(三)用UML中的类图来描述类

这个实验我是在实验楼上做的:
886825-20160414110839098-826609246.png

(四)练习

使用TDD的方式设计关实现复数类Complex。

1.PSP(Personal Software Process)

步骤耗时百分比
需求分析20分钟7.7%
设计60分钟23%
代码实现120分钟46%
测试40分钟15%
分析总结20分钟7.7%
  1. 实现要有伪代码,产品代码,测试代码。

伪代码:
ComplexNumber() 构造函数,将实部,虚部都置为0

ComplexNumber(double r, double I) 构造函数,创建复数对象的同时完成复数的实部,虚部的初始化

GetRealPart() 获取实部

GetImaginaryPart() 获取虚部

SetRealPart(double d) 设置实部

SetImaginaryPart(double d) 设置虚部

ComplexAdd(ComplexNumber c) 复数相加

ComplexAdd(double c) 复数相加

ComplexMinus(ComplexNumber c) 复数相减

ComplexMinus(double c) 复数相减

ComplexMulti(ComplexNumber c)  复数相乘

ComplexMulti(double c)  复数相乘

实现复数运算:
创建复数对象a,b,c.
设置a,b的实部和虚部。
分别计算:
c=a+b;
c=a-b;
c=a*b;

产品代码:

class Complex {
    private double m_dRealPart;//实部
    private double m_dImaginPart;//虚部
    Complex(double m_dRealPart,double m_dImaginPart){
        this.m_dImaginPart=m_dImaginPart;
        this.m_dRealPart=m_dRealPart;
    }
    public void ComplexNumber(){//将实部,虚部都置为0
        this.m_dImaginPart=0;
        this.m_dRealPart=0;

    }
    public void ComplexNumber(double R, double I){//构造函数,创建复数对象的同时完成复数的实部,虚部的初始化
        this.m_dRealPart=R;
        this.m_dImaginPart=I;
    }
    public double  GetRealPart(){//获取实部

        return this.m_dRealPart;
    }
    public double  GetImaginaryPart(){//获取虚部

        return  this.m_dImaginPart;
    }
    public void SetRealPart(double d){//设置实部
       this.m_dRealPart=d;

    }
    public void SetImaginaryPart(double d){//设置虚部
       this.m_dImaginPart=d;
    }
    public void  ComplexAdd(Complex a,Complex b){//加法

        this.m_dRealPart=a.GetRealPart()+b.GetRealPart();
        this.m_dImaginPart=a.GetImaginaryPart()+b.GetImaginaryPart();

        System.out.printf("a+b=%.2f+%.2fi%n",this.m_dRealPart,this.m_dImaginPart);



    }
    public void ComplexMinus(Complex a,Complex b){//减法

        this.m_dRealPart=a.GetRealPart()-b.GetRealPart();
        this.m_dImaginPart=a.GetImaginaryPart()-b.GetImaginaryPart();
        System.out.printf("a-b=(%.2f)+(%.2fi)%n",this.m_dRealPart,this.m_dImaginPart);

    }
    public void   CComplexMulti(Complex a,Complex b){   //乘法

        this.m_dRealPart=a.m_dRealPart*b.m_dRealPart-a.m_dImaginPart*b.m_dImaginPart;
        this.m_dImaginPart=a.m_dImaginPart*b.m_dRealPart+a.m_dRealPart*b.m_dImaginPart;
        System.out.printf("a*b=%.2f+%.2fi%n",this.m_dRealPart,this.m_dImaginPart);

    }



}

public  class ComplexCount {
    public static void main(String[] args) {

        Scanner scanner=new Scanner(System.in);
        Complex a=new Complex(0,0);                     //建立实例
        Complex b=new Complex(0,0);
        Complex c=new Complex(0,0);
        System.out.println("请输入a的实部和虚部");
        double r1=scanner.nextDouble();
        double i1=scanner.nextDouble();
        System.out.println("请输入b的实部和虚部");
        double r2=scanner.nextDouble();                      //输入实部和虚部
        double i2=scanner.nextDouble();
        a.SetRealPart(r1 );
        a.SetImaginaryPart(i1);
        b.SetRealPart(r2);
        b.SetImaginaryPart(i2);
        c. ComplexAdd(a,b);                          //加法
        c. ComplexMinus(a,b);                       //减法
        c. CComplexMulti(a,b);                      //乘法
    }
}

运行结果:
886825-20160414164910801-1901462555.png

测试代码:

public class test {
    public static void main(String[] args) {
        Complex testa = new Complex(1, 2);
        Complex testb = new Complex(3, 5);
        Complex testc = new Complex(0, 0);
        testc.ComplexAdd(testa,testb);
        if(testc.GetRealPart()==4&&testc.GetImaginaryPart()==7)
            System.out.println("test passed!");
        else
            System.out.println("test failed!");

    }
}

测试结果:
886825-20160414164936316-962156550.png

4.总结单元测试的好处
不容易遗漏细节上的设计,使问题考虑的更全面,可以使代码更友好。

转载于:https://www.cnblogs.com/5315hejialei/p/5390664.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值