實驗報告html
課程:java |
Java程序設計程序員 |
班級:編程 |
1353windows |
姓名:設計模式 |
蘇正生單元測試 |
學號:測試 |
2015333優化 |
|||||||||
成績:this |
|
指導教師: |
婁家鵬 |
實驗日期: |
2015.5.6 |
|||||||||||
實驗密級: |
|
預習程度: |
|
實驗時間: |
3:20~5:00 |
|||||||||||
儀器組次: |
|
必修/選修: |
必修 |
實驗序號: |
實驗二 |
|||||||||||
實驗名稱: |
Java面向對象程序設計 |
|||||||||||||||
實驗目的: 1.掌握單元測試和TDD 2. 理解並掌握面向對象三要素:封裝、繼承、多態 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原則 5. 瞭解設計模式
|
||||||||||||||||
實驗儀器:
|
||||||||||||||||
1、 單元測試和TDD
源代碼1:
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:
import org.junit.Test;
import junit.framework.TestCase;
public class MyUtilTest extends TestCase {
@Test
public void testNormal() {
assertEquals("不及格", MyUtil.percentage2fivegrade(55));
assertEquals("及格", MyUtil.percentage2fivegrade(65));
assertEquals("中等", MyUtil.percentage2fivegrade(75));
assertEquals("良好", MyUtil.percentage2fivegrade(85));
assertEquals("優秀", MyUtil.percentage2fivegrade(95));
}
}
2、 面向對象三要素
(1)抽象(2)封裝、繼承與多態
實驗記錄:
實驗代碼1:
public class AnimalTest {
public static void main(String[]args){
Dog d=new Dog();
d.setColor("Yellow");
getInfo(d);
Cat c=new Cat();
c.setColor("Black");
getInfo(c);
}
public static void getInfo(Dog d){
System.out.println(d.toString());
}
public static void getInfo(Cat c){
System.out.println(c.toString());
}
}
實驗代碼2:
package dog;
public class DogTest {
public static void main(String[] args){
Dog g=new Dog();
g.setColor("Yellow");
getInfo();
}
public static void getInfo(Dog d){
System.out.println(d.toString());
}
}
實驗代碼3:
public abstract class Animal {
private String color;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public abstract String shout();
}
public class Dog extends Animal{
public String shout(){
return "汪汪";
}
public String toString(){
return "The Dog's color is " + this.getColor() +", and it shouts "+ this.shout() + "!";
}
}
public class Cat extends Animal{
public String shout(){
return "喵喵";
}
public String toString(){
return "The Cat's color is " + this.getColor() +", and it shouts "+ this.shout() + "!";
}
}
3、設計模式初步
設計模式(design pattern)提供一個用於細化軟件系統的子系統或組件,或它們之間的關係圖,它描述通訊組件的公共再現結構,通訊組件能夠解決特定語境中的一個設計問題。
實驗過程:
實驗代碼:
// Server Classes abstract class Data { abstract public void DisplayValue(); } class Integer extends Data { int value; Integer() { value=100; } public void DisplayValue(){ System.out.println (value); } } // Pattern Classes abstract class Factory { abstract public Data CreateDataObject(); } class IntFactory extends Factory { public Data CreateDataObject(){ return new Integer(); } } //Client classes class Document { Data pd; Document(Factory pf){ pd = pf.CreateDataObject(); } public void DisplayData(){ pd.DisplayValue(); } } //Test class public class MyDoc { static Document d; public static void main(String[] args) { d = new Document(new IntFactory()); d.DisplayData(); } }
四.使用TDD的方式設計並實現複數類Complex
總結
步驟 | 耗時 | 百分比 |
需求分析 | 15分鐘 | 5.5% |
設計 | 15分鐘 | 5.5% |
代碼實現 | 90分鐘 | 33.3% |
測試 | 120分鐘 | 44.4% |
分析總結 | 30分鐘 | 12% |
「軟件的不少錯誤都來源於程序員對模塊功能的誤解、疏忽或不瞭解模塊的變化。如何能讓本身負責的模塊功能定義儘可能明確,模塊內部的改變不會影響其餘模塊,並且模塊的質量能獲得穩定的、量化的保證?單元測試就是一個頗有效的解決方案。」
沒錯,經過單元測試,不只能夠完善本身的編程邏輯和細節,並且對於代碼的完善性和可靠性有了更好的提升。特別是編程過程當中,代碼模塊和測試模塊共同成長起來的過程,讓整個編程更有邏輯性和嚴密性。
總結:本次實驗,從單元測試,工程——包——類,封裝、繼承、接口等多方面對java編程能力進行了提升,不只對於相關軟件有了全新的認識,並且對於本身的編程習慣有了更好的優化。雖然從實驗樓轉戰windows平臺,再經過虛擬機最終完成,耗時有點過長,可是在編程能力的提升的同時,也鍛鍊了本身的耐性和韌勁。實驗過程當中,和老師、同窗交流,也對於java有了新的認識。
20135333蘇正生
2015年5月7日