20145328 《Java程序设计》实验二实验报告
20145328 《Java程序设计》实验二实验报告
实验名称
Java面向对象程序设计
实验内容
- 初步掌握单元测试和TDD
- 理解并掌握面向对象三要素:封装、继承、多态
- 初步掌握UML建模
- 熟悉S.O.L.I.D原则
- 了解设计模式
实验步骤
(一)单元测试
用程序解决问题时,要会写三种码:
- 先按要求写出伪代码。
- 然后写出产品代码。
- 最后进行测试。
伪代码如下
百分制转五分制:
如果成绩小于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 "错误";
}
}
新建一个测试类,代码如下所示
测试结果如下
测试正常情况的代码和运行结果如下所示
测试出错情况的代码和运行结果如下所示
在这里发现输入值为负时出现错误,修改原代码后测试运行便如下所示通过了
测试边界情况时也发现在当输入值为100时出现错误,修改原代码前后的测试运行结果如下所示
(二) TDD(Test Driven Devlopment, 测试驱动开发)
先根据需求写测试代码,然后再根据测试写产品代码,使产品代码通过测试。
- 先创建一个test文件夹,修改其属性用来存放测试代码。
- 在src中新建.java文件,用来编写产品代码。
- 创建产品代码中的测试类,并存放到测试文件夹text中。
- 根据需求编写测试代码。
试验测试代码:
public class MyUtility {
public static String percentage2fivegrade(int grade) {
return "错误";
}
}
输入测试代码:
package experiment_2.TDD;
import experiment_2.TDD.MyUtility;
import junit.framework.TestCase;
import org.junit.Test;
/**
* Created by Administrator on 2016/4/12.
*/
public class MyUtilityTest extends TestCase {
@Test
public void testNormal(){
assertEquals("不及格", MyUtility.percentage2fivegrade(55));
assertEquals("及格", MyUtility.percentage2fivegrade(65));
assertEquals("中等", MyUtility.percentage2fivegrade(75));
assertEquals("良好", MyUtility.percentage2fivegrade(85));
assertEquals("优秀", MyUtility.percentage2fivegrade(95));
}
@Test
public void testException(){
assertEquals("错误",MyUtility.percentage2fivegrade(105));
assertEquals("错误",MyUtility.percentage2fivegrade(-55));
}
@Test
public void testBoundary(){
assertEquals("不及格",MyUtility.percentage2fivegrade(0));
assertEquals("及格",MyUtility.percentage2fivegrade(60));
assertEquals("中等",MyUtility.percentage2fivegrade(70));
assertEquals("良好",MyUtility.percentage2fivegrade(80));
assertEquals("优秀",MyUtility.percentage2fivegrade(90));
assertEquals("优秀",MyUtility.percentage2fivegrade(100));
}
}
5.因为没有产品代码,测试代码存在错误,接下来,输入产品代码。
此时,测试代码运行成功
(三)用UML中的类图来描述类
该项实验于在实验楼上完成
(四)练习
使用TDD的方式设计关实现复数类Complex。
根据需求先写出伪代码
//ComplexNumber的属性
//m_dRealPart 实部
//m_dImaginaryPart 虚部
//ComplexNumber的方法
//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) 复数相乘
//toString()把当前复数对象的实部,虚部组合成a+bi的字符串形式
先写出预期测试代码,代码如下所示
package experiment_2.Complex;
import junit.framework.TestCase;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Created by Administrator on 2016/4/14.
*/
public class ComplexTest extends TestCase {
@Test
public void testAdd(){
Complex testa = new Complex(1, 2);
Complex testb = new Complex(3, 5);
Complex testc;
testc = testa.Add(testb);
assertEquals("4.0+7.0i",testc.toString());
}
@Test
public void testMinus(){
Complex testa = new Complex(1, 2);
Complex testb = new Complex(6, 5);
Complex testc;
testc = testa.Minus(testb);
assertEquals("-5.0-3.0i",testc.toString());
}
@Test
public void testMulti(){
Complex testa = new Complex(1, 2);
Complex testb = new Complex(4, 8);
Complex testc;
testc = testa.Multi(testb);
assertEquals("-12.0+16.0i",testc.toString());
}
}
然后根据测试代码和伪代码写出产品代码,产品代码如下所示
package experiment_2.Complex;
/**
* Created by Administrator on 2016/4/14.
*/
public class Complex {
//ComplexNumber的属性
private double m_dRealPart;//m_dRealPart 实部
private double m_dImaginaryPart;//m_dImaginaryPart 虚部
public Complex(double m_dRealPart,double m_dImaginaryPart){
this.m_dRealPart = m_dRealPart;
this.m_dImaginaryPart = m_dImaginaryPart;
}
//ComplexNumber的方法
public void Complex(){//ComplexNumber() 构造函数,将实部,虚部都置为0
this.m_dRealPart = 0;
this.m_dImaginaryPart = 0;
}
public void Complex(double r,double i){//ComplexNumber(double r,double i) 构造函数,创建复数对象的同时完成复数的实部、虚部的初始化
this.m_dRealPart = r;
this.m_dImaginaryPart = i;
}
public double GetRealPart(){//GetRealPart() 获取实部
return this.m_dRealPart;
}
public double GetImaginaryPart(){//GetImaginaryPart() 获取虚部
return this.m_dImaginaryPart;
}
public void SetRealPart(double d){//SetRealPart(double d) 设置实部
this.m_dRealPart = d;
}
public void SetImaginaryPart(double d){//SetImaginaryPart(double d) 设置虚部
this.m_dImaginaryPart = d;
}
public Complex Add(Complex c){//ComplexAdd(ComplexNumber c) 复数相加
return new Complex(m_dRealPart+c.m_dRealPart,m_dImaginaryPart+c.m_dImaginaryPart);
}
//ComplexAdd(double c) 复数相加
public Complex Minus(Complex c){//ComplexMinus(ComplexNumber c) 复数相减
return new Complex(m_dRealPart-c.m_dRealPart,m_dImaginaryPart-c.m_dImaginaryPart);
}
//ComplexMinus(double c) 复数相减
public Complex Multi(Complex c){//ComplexMulti(ComplexNumber c) 复数相乘
return new Complex(m_dRealPart*c.m_dRealPart-m_dImaginaryPart*c.m_dImaginaryPart,
m_dRealPart*c.m_dImaginaryPart+m_dImaginaryPart*c.m_dRealPart);
}
//ComplexMulti(double c) 复数相乘
public String toString(){//toString()把当前复数对象的实部,虚部组合成a+bi的字符串形式
String s;
if (m_dRealPart != 0.0){
if (m_dImaginaryPart > 0)
s = new Float(m_dRealPart).toString() + "+" + new Float(m_dImaginaryPart).toString() + "i";
else if (m_dImaginaryPart < 0)
s = new Float(m_dRealPart).toString() + "-" + new Float(-1*m_dImaginaryPart).toString() + "i";
else
s = new Float(m_dRealPart).toString();
}
else {
if (m_dImaginaryPart > 0)
s = new Float(m_dImaginaryPart).toString() + "i";
else if (m_dImaginaryPart< 0)
s = new Float(-1*m_dImaginaryPart).toString() + "i";
else
s = new Float(m_dRealPart).toString();
}
return s;
}
public void putout(Complex c){
System.out.printf("%s%n",toString());
}
}
产品代码运行结果如下
单元测试运行结果如下
心得体会
本次实验作为第二次实验,难度依旧适中,无论是单元测试还是利用UML建模,虽然原来没有接触过,感觉很新奇,但在接触过后也发现并没有预期中的那么困难,这两者从某些方面来说都算是在Java开发过程中的一种应用,更多的也是一种思想思路还有开发方法上的拓展,在练习通过TDD实现Complex类时不仅加深了对于TDD的了解,也逐渐掌握了TDD的应用,编写代码时的效率也比以前要快得多。
PSP(Personal Software Process)时间:
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 20min | 11.1% |
设计 | 20min | 11.1% |
代码实现 | 1h | 33.3% |
测试 | 1h | 33.3% |
分析总结 | 20min | 11.2% |
20145328 《Java程序设计》实验二实验报告的更多相关文章
- 20145120 《Java程序设计》实验二实验报告
20145120 <Java程序设计>实验二实验报告 实验名称:Java面向对象程序设计 实验目的与要求: 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握U ...
- 2015526 《Java程序设计》实验二实验报告
2015526 <Java程序设计>实验二实验报告 一.单元测试和TDD 用程序解决问题时,要学会写以下三种代码: 伪代码 产品代码 测试代码 正确的顺序应为:伪代码(思路)→ 测试代码( ...
- 20155301 《Java程序设计》实验二实验报告
20155301 <Java程序设计>实验二实验报告 一.单元测试和TDD 用程序解决问题时,要学会写以下三种代码: 伪代码 产品代码 测试代码 正确的顺序应为:伪代码(思路)→ 测试代码 ...
- 20145314郑凯杰 《Java程序设计》实验二 实验报告
20145314郑凯杰 <Java程序设计>实验二 实验报告 实验要求 完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用 ...
- Java实验二实验报告:java面向对象程序设计
java实验二实验报告 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式 实验 ...
- 20155235 《Java程序设计》 实验二 实验三 敏捷开发与XP实践
20155235 <Java程序设计> 实验二 实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验内容 没有Linux基础的同学建议先学习<Linux基础入 ...
- 20145240 《Java程序设计》第一次实验报告
20145240 <Java程序设计>第一次实验报告 实验内容 一.命令行下java程序开发 1.建立Code目录,输入mkdir 20145240命令建立实验目录,并使用dir命令查看目 ...
- 20145330《Java程序设计》第一次实验报告
20145330<Java程序设计>第一次实验报告 实验一Java开发环境的熟悉 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Ja ...
- 20145320《Java程序设计》第一次实验报告
20145320<Java程序设计>第一次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.08 18: ...
随机推荐
- SSH电力项目九--运行监控首页显示
需求:在首页显示出设备运行情况,并去掉<br>换行符,每隔十分钟刷新一次页面. ElecMenuAction.java 首先注入运行监控service public class ElecM ...
- 从0到1实现SourceTree连接Gitlab
见下面的链接 http://note.youdao.com/noteshare?id=3622d02a38464c524222ede1b4fb06d2 SourceTree下载地址:Windows V ...
- kibana5.6源码分析2
1.启动shell脚本:/bin/kibana; js脚本:/src/cli/cli.js; 2.服务端入口:/src/server/kbn_server.js.使用的web框架为hapi.js. ...
- iOS 9 配置HTTP
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key ...
- 更新openssl
在安装nodejs或者nginx什么的时候,有时候会报如下错误 npm: relocation error: npm: symbol SSL_set_cert_cb, version libssl.s ...
- 【c++】【常用函数】
分割字符串:https://www.cnblogs.com/zealousness/p/9971709.html 字符串比较:https://www.cnblogs.com/zealousness/p ...
- Flask的配置与路由
配置管理 flask中的配置文件是一个flask.config.Config对象(继承字典),默认配置为: { 'DEBUG': get_de ...
- 如何用 PyCharm 调试 scrapy 项目
原理: 首先 scrapy 命令其实就是一个python脚本,你可以使用 which scrapy 查看该脚本的内容: from scrapy.cmdline import execute sys.a ...
- Linux中的yum的配置以及常见报错的处理
一. 今天登录服务器的时候,误把yum所在的cache文件夹中的文件删除掉了,导致yum不能够使用,解决的方法: 显示错误如下: Loaded plugins: fastestmirror Deter ...
- 工作中发现Web服务器的磁盘满后故障分析
遇到的问题: 今天收到报警,某台线上的服务器的磁盘已满,但是登上去使用du -sh /log/* 检查, 发现文件的大小远远小于磁盘的空间,此时不知道该如何解决! 解决的方法: 其实,如果只是 ...