20155225 實驗三《敏捷開發與XP實踐》實驗報告


20155225 實驗三《敏捷開發與XP實踐》實驗報告

一、使用工具(Code->Reformate Code)把代碼重新格式化

IDEA里的Code菜單有很多實用的功能可以幫助我們讓代碼更簡潔可觀。我還學習了Code菜單里的其它功能,比如整行移動代碼,優化imports

二、克隆搭檔代碼

首先在碼雲上加入搭檔到自己的項目,然后復制搭檔項目代碼,在IDEA里VOC->git,即可將搭檔代碼克隆下來。

三、代碼重構

重構(Refactor),就是在不改變軟件外部行為的基礎上,改變軟件內部的結構,使其更加易於閱讀、易於維護和易於變更 。

重構中一個非常關鍵的前提就是“不改變軟件外部行為”,它保證了我們在重構原有系統的同時,不會為原系統帶來新的BUG,以確保重構的安全。

  • 如何保證不改變軟件外部行為:重構后的代碼要能通過單元測試。
  • 如何使其更加易於閱讀、易於維護和易於變更:設計模式給出了重構的目標。

修改軟件的四種動機:

  • 增加新功能
  • 原有功能有BUG
  • 改善原有程序的結構
  • 優化原有系統的性能

需要重構的地方:有臭味道(Bad Smell)的代碼——Duplicated Code(重復的代碼)

  • 最單純的Duplicated Code就是[同一個class內的兩個方法含有相同表達式(expression)]。這時候你需要做的就是采用Extract Method提煉出重復的代碼,然后讓這兩個地點都調用被提煉出來的那一段代碼。

  • 另一種常見情況就是[兩個互為兄弟(sibling)的subclasses內含有相同表達式]。要避免這種情況,只需要對兩個classes都使用Extract Method,然后再對被提煉出的代碼使用Pull Up Method,將它推入superclass內。

  • 如果代碼之間只是類似,並非完全相同,那么就得運用Extract Method將相似部分和差異部分割開,構成單獨一個方法。然后你可能發現或許可以運用Form Template Method獲得一個Template Method設計模式。

  • 如果有些方法以不同的算法做相同的事,你可以擇定其中較清晰的一個,並使用Substitute Algorithm將其它方法的算法替換掉。

  • 如果兩個毫不相關的classes內出現Duplicaded Code,你應該考慮對其中一個使用Extract Class,將重復代碼提煉到一個獨立class中,然后在另一個class內使用這個新class。但是,重復代碼所在的方法也可能的確只應該屬於某個class,另一個class只能調用它,抑或這個方法可能屬於第三個class,而另兩個classes應該引用這第三個class。你必須決定這個方法放在哪兒最合適,並確保它被安置后就不會再在其它任何地方出現。

一個完整的重構流程:

  • 從版本控制系統代碼庫中Check out code
  • 讀懂代碼(包括測試代碼)
  • 發現bad smell
  • Refactoring
  • 運行所有的Unit Tests
  • 往代碼庫中Check in code

image

四、結對學習密碼學

我們實現了凱撒密碼,代碼如下:

import java.util.Scanner;
import java.lang.Integer;

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

System.out.println("請輸入明文:");
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
System.out.println("請輸入密鑰:");
Scanner sc1=new Scanner(System.in);
int key=sc1.nextInt();//將下一個輸入項轉換成int類型
Encryption(s, key);
}
public static void Encryption(String str,int k){//加密
String string="";
for (int i = 0; i < str.length(); i++) {
char c=str.charAt(i);
if(c>='a'&&c<='z'){//如果字符串中的某個字符是小寫字母
c+=k%26;//移動key%26;
if(c<'a')
c+=26;
if(c>'z')
c-=26;

}else if(c>='A'&&c<='Z'){//如果字符串中的某個字符是大寫字母
c+=k%26;//移動key%26;
if(c<'A')
c+=26;
if(c>'Z')
c-=26;
}
string+=c;//將加密后的字符串連成字符串
}
System.out.println(str+" 加密后為: "+string);
}

}

image

PSP時間

步驟 耗時 百分比
需求分析 5 10%
設計 5 10%
代碼實現 30 60%
測試 5 10%
分析總結 5 10%

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com