北京电子科技学院(BESTI)

实 验 报 告

课程:程序设计与数据结构
班级: 1623
姓名: 石亚鑫
学号:20162303

成绩: 2分
指导教师:娄家鹏 王志强
实验日期:4月14日

实验密级: 非密级
预习程度: 已预习
实验时间:10:10-12:00

必修/选修: 必修
实验序号: cs_03

实验内容

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

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

  3. 初步掌握UML建模

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

  5. 了解设计模式初步掌握单元测试和TDD

实验步骤

(一)单元测试

(1) 三种代码

编程是智力活动,不是打字,编程前要把干什么、如何干想清楚才能把程序写对、写好。当想用程序解决问题时,要会写三种码:
伪代码
产品代码
测试代码

练习:

伪代码

百分制转五分制:
如果成绩小于60,转成“不及格”
如果成绩在60与70之间,转成“及格”
如果成绩在70与80之间,转成“中等”
如果成绩在80与90之间,转成“良好”
如果成绩在90与100之间,转成“优秀”
其他,转成“错误”

产品代码
public class MyUtil{
public static String percentage2fivegrade(int grade){
    //如果成绩小于60,转成“不及格”
    if (grade < 60)
        return "不及格";
        //如果成绩在60与70之间,转成“及格”
    else if (grade < 70)
        return "及格";
        //如果成绩在70与80之间,转成“中等”
    else if (grade < 80)
        return "中等";
        //如果成绩在80与90之间,转成“良好”
    else if (grade < 90)
        return "良好";
        //如果成绩在90与100之间,转成“优秀”
    else if (grade < 100)
        return "优秀";
        //其他,转成“错误”
    else
        return "错误";
}
}
测试代码

1、50分:

public class MyUtilTest {
public static void main(String[] args) {
// 百分制成绩是50时应该返回五级制的“不及格”
if(MyUtil.percentage2fivegrade(50) != "不及格")
    System.out.println("test failed!");
else
    System.out.println("test passed!");
}
}

2、一般情况:

public class MyUtilTest {
public static void main(String[] args) {
    //测试正常情况
    if(MyUtil.percentage2fivegrade(55) != "不及格")
        System.out.println("test failed!");
    else if(MyUtil.percentage2fivegrade(65) != "及格")
        System.out.println("test failed!");
    else if(MyUtil.percentage2fivegrade(75) != "中等")
        System.out.println("test failed!");
    else if(MyUtil.percentage2fivegrade(85) != "良好")
        System.out.println("test failed!");
    else if(MyUtil.percentage2fivegrade(95) != "优秀")
        System.out.println("test failed!");
    else
        System.out.println("test passed!");
}
}

在Eclipse中运行结果如下,测试结果符合预期:

3、为负分或大于100的成绩:

public class MyUtilTest {
public static void main(String[] args) {
    //测试出错情况
    if(MyUtil.percentage2fivegrade(-10) != "错误")
        System.out.println("test failed 1!");
    else if(MyUtil.percentage2fivegrade(115) != "错误")
        System.out.println("test failed 2!");
    else
        System.out.println("test passed!");
}
}

4、运行程序发现负分时与期望不一致,原因是判断不及格时没有要求成绩大于零。增加对负分的判断:

public class MyUtil{
public static String percentage2fivegrade(int grade){
   //如果成绩小于0,转成“错误”
   if ((grade < 0))
       return "错误";
   //如果成绩小于60,转成“不及格”
   else if (grade < 60)
       return "不及格";
   //如果成绩在60与70之间,转成“及格”
   else if (grade < 70)
       return "及格";
   //如果成绩在70与80之间,转成“中等”
   else if (grade < 80)
       return "中等";
   //如果成绩在80与90之间,转成“良好”
   else if (grade < 90)
       return "良好";
   //如果成绩在90与100之间,转成“优秀”
   else if (grade < 100)
       return "优秀";
   //如果成绩大于100,转成“错误”
   else
       return "错误";
}
}

再次运行测试,测试结果符合预期,成功通过。

5、测试边界情况,我们对输入为“0,60,70,80,90,100”这些边界情况进行测试:

public class MyUtilTest {
public static void main(String[] args) {
    //测试边界情况
    if(MyUtil.percentage2fivegrade(0) != "不及格")
        System.out.println("test failed 1!");
    else if(MyUtil.percentage2fivegrade(60) != "及格")
        System.out.println("test failed 2!");
    else if(MyUtil.percentage2fivegrade(70) != "中等")
        System.out.println("test failed 3!");
    else if(MyUtil.percentage2fivegrade(80) != "良好")
        System.out.println("test failed 4!");
    else if(MyUtil.percentage2fivegrade(90) != "优秀")
        System.out.println("test failed 5!");
    else if(MyUtil.percentage2fivegrade(100) != "优秀")
        System.out.println("test failed 6!");
    else
        System.out.println("test passed!");
}
}

测试结果如下:

6、我们发现边界情况中输入100时有一个Bug。把判断优秀的条件中包含输入为100的情况:

public class MyUtil{
public static String percentage2fivegrade(int grade){
   //如果成绩小于0,转成“错误”
   if ((grade < 0))
       return "错误";
   //如果成绩小于60,转成“不及格”
   else if (grade < 60)
       return "不及格";
   //如果成绩在60与70之间,转成“及格”
   else if (grade < 70)
       return "及格";
   //如果成绩在70与80之间,转成“中等”
   else if (grade < 80)
       return "中等";
   //如果成绩在80与90之间,转成“良好”
   else if (grade < 90)
       return "良好";
   //如果成绩在90与100之间,转成“优秀”
   else if (grade <= 100)
       return "优秀";
   //如果成绩大于100,转成“错误”
   else
       return "错误";
}
}

(2)TDD

先写测试代码,然后再写产品代码的开发方法叫“测试驱动开发”(TDD)。
TDD的一般步骤如下:

  • 1、明确当前要完成的功能,记录成一个测试列表

  • 2、快速完成编写针对此功能的测试用例

  • 3、测试代码编译不通过(没产品代码呢)

  • 4、编写产品代码

  • 5、测试通过

  • 6、对代码进行重构,并保证测试通过(重构下次实验练习)

  • 7、循环完成所有功能的开发

TDD的编码节奏是:

  • 1、增加测试代码,JUnit出现红条

  • 2、修改产品代码

  • 3、JUnit出现绿条,任务完成

(二)练习

(1)以 TDD的方式研究学习StringBuffer,程序及运行结果如下



(2)用UML中的类图来描述类Dog:

在UML 里,一个类的属性能显示它的名字,类型,初始化值,属性也可以显示private,public,protected。 类的方法能显示它们的方法名,参数,返回类型,以及方法的private,public,protected属性。其中:

+表示public
表示 protected
-表示 private
使用UML可以让我们不必关注细节。

Dog类和Cat类都有Color属性和相应的set和get方法,明显违反了前面提到的DRY原则,我们可以通过继承解决这个问题,把Color属性和相应方法放到父类Animal中,如以下UML较图所示:

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

伪代码:
1.输入两个复数的四个参数
2.两参数分别为实部与虚部
3.实现两复数的加法、减法、乘法、除法。

代码托管

测试结果:

(4)对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式
OCP是OOD中最重要的一个原则,OCP的内容是:
software entities (class, modules, function, etc.) should open for extension,but closed for modification.
软件实体(类,模块,函数等)应该对扩充开放,对修改封闭。
DIP的内容是:
High level modules should not depend upon low level modules. Both should depend upon abstractions
Abstractions should not depend upon details. Details should depend upon abstractions
高层模块不应该依赖于低层模块。二者都应该依赖于抽象
抽象不应该依赖于细节。细节应该依赖于抽象

(三)统计自己的PSP(Personal Software Process)时间

步骤 耗时 百分比
需求分析 30min 11.5%
设计 30min 11.5%
代码实现 130min 50%
测试 50min 19.2%
分析总结 20min 7.7%

(四)总结单元测试的好处

1.伪代码、测试代码和产品代码分开,实现了程序的逻辑清晰和设计高效
2.有利于维护和修改代码
3.编程思维更加清晰

(五)实验体会

这次实验时间还是比较紧张的,主要原因就是上次实验中没有详细理解idea 的用法,导致花费了大量的时间在研究idea上面。同时,我也理解到了,编写代码与测试代码同样重要,好的代码需要反复的调试才能准确运行。

20162303实验二 Java面向对象程序设计实验报告的更多相关文章

  1. 20145213《Java程序设计》实验二Java面向对象程序设计实验报告

    20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...

  2. 20145206《Java程序设计》实验二Java面向对象程序设计实验报告

    20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

  3. 20145308刘昊阳 《Java程序设计》实验二 Java面向对象程序设计 实验报告

    20145308刘昊阳 <Java程序设计>实验二 Java面向对象程序设计 实验报告 实验名称 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面相对象三要素:封 ...

  4. 实验二Java面向对象程序设计实验报告(2)

    实验二 Java面向对象程序设计 实验概述: 课程:程序设计与数据结构 班级:1623班 姓名: 邢天岳 学号:2309 指导老师:娄老师 王老师 实验日期:2017.4.16 实验名称: Java面 ...

  5. 实验二 Java面向对象程序设计实验报告

    实验二 Java面向对象程序设计 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 实验 ...

  6. 20145326《Java程序设计》实验二Java面向对象程序设计实验报告

    20145326<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

  7. 20155217 实验二 Java面向对象程序设计 实验报告

    20155217 实验二 Java面向对象程序设计 实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模 ...

  8. 20145219 《Java程序设计》实验二 Java面向对象程序设计实验报告

    20145219 <Java程序设计>实验二 Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S. ...

  9. 20162305 实验二 Java面向对象程序设计 实验报告

    20162305 实验二 Java面向对象程序设计 实验报告 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D ...

  10. 20145239杜文超 《Java程序设计》实验二 Java面向对象程序设计实验报告

    20145239 <Java程序设计>实验二 Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S. ...

随机推荐

  1. 【转】bmp文件格式详解

    先区分几个概念:16色和16位色一样吗? 不一样! 颜色位数,即是用多少位字节表示的值,每一位可以表示0和1两值.通常图片的颜色深度,简称色深,就是用位数来表示的,所以,我通常会看到8位色,16位色, ...

  2. 配置连接的IP、端口、以及相应的数据库

    解压后里面有:lib 源文件 .examples 例子.test测试 将lib目录拷贝到你的项目中,就可以开始你的predis操作了. //使用autoload加载相关库,这边重点就是为了requir ...

  3. windows server 2012 IIS配置之FTP站点

    原文地址:[原创]winserver2012IIS配置之FTP站点作者:hkmysterious   一.实验拓扑: 使server2012客户计算机通过ftp方式从FTP服务器上下载已上传并共享的文 ...

  4. 查询 IDE 的版本 方便安装第三方的时候选择

    TMD 很多第三方软件 的版本 定义 与 delphi是不一致的. 1.有的是以这个为准.

  5. 0,null,undefined,[],{},'',false之间的关系

    0与一些虚值的比较: 0与false 0==false true 0与'': =='' true 0与[]: ==[] true 0与NaN: 0==NaN false 0与undefined 0== ...

  6. string与int的相互转换以及把一个字符加入到string的末尾

    #include "stdafx.h" #include<sstream> #include<string> #include<iostream> ...

  7. 用ab进行POST,GET压力测试,且定义header及json的内容

    这个以前没作过,找了文档.搞定. 要求时间的单curl测试的方式如下: time curl http://xxxxx/hq/restapi/isStart curl用来用post请求,且有header ...

  8. 轻松学习LINUX系列教程推出

    本系列多媒体教程已完成的博文: 1.轻松学习Linux之入门篇 http://chenguang.blog.51cto.com/350944/449214 2.轻松学习Linux之本地安装系统 (分区 ...

  9. Foxmail 登录 qq 账号时无法登录 提示我们设置了独立密码或使用授权码登录的解决方法

    Foxmail 登录 qq 账号时无法登录  提示我们设置了独立密码或使用授权码登录的解决方法 1.首先我们设置我们邮箱的类型如下图所示 2.打开网页版的qq邮箱  在设置--->账户---&g ...

  10. Ubuntu 16.04 LTS安装Docker并使用加速器

    参考优酷:http://v.youku.com/v_show/id_XMTkxOTYwODcxNg==.html?spm=a2h0k.8191407.0.0&from=s1.8-1-1.2 首 ...