Java敏捷開發與XP實踐html
XP基礎java
XP核心實踐git
相關工具程序員
敏捷開發(Agile Development)是一種以人爲核心、迭代、按部就班的開發方法。「敏捷流程」是一系列價值觀和方法論的集合。算法
極限編程(eXtreme Programming,XP)是一種全新而快捷的軟件開發方法。XP團隊使用現場客戶、特殊計劃方法
和持續測試來提供快速的反饋和全面的交流:編程
XP準則vim
Java中的通常的命名規則有:數組
實驗三 敏捷開發與XP實踐-1app
public class CodeStandard { public static void main(String [] args){ StringBuffer buffer = new StringBuffer(); buffer.append('S'); buffer.append("tringBuffer"); System.out.println(buffer.charAt(1)); System.out.println(buffer.capacity()); System.out.println(buffer.indexOf("tring")); System.out.println("buffer = " + buffer.toString()); if(buffer.capacity()<20) buffer.append("1234567"); for(int i=0; i<buffer.length();i++) System.out.println(buffer.charAt(i)); } }
實驗三 敏捷開發與XP實踐-2編輯器
在碼雲上把本身的學習搭檔加入本身的項目中,確認搭檔的項目加入本身後,下載搭檔實驗二的Complex代碼,加入很多於三個JUnit單元測試用例,測試成功後git add .; git commit -m "本身學號 添加內容";git push;
提交搭檔項目git log的截圖,包含上面git commit的信息,並加上本身的學號水印信息。
圖一是將搭檔20155232宣言加入本身的項目中,在碼雲上的顯示。
圖二是使用
git clone
將搭檔的代碼克隆下來,由於咱們兩個都是用虛擬機vim上傳代碼,因此我進入搭檔的根目錄中使用
find -name Complex.java
找到ComplexTest.java將代碼拷貝到idea中進行JUnit測試。
圖三是本來的測試用例經過的截圖。
圖四是我添加進去的測試用例成功的截圖,出現green bar。
圖五是將代碼粘貼到vim中,使用
git add . git commmit -m " " git push origin master
進行上傳以後,使用
git log
的截圖。
重構(Refactor),就是在不改變軟件外部行爲的基礎上,改變軟件內部的結構,使其更加易於閱讀、易於維護和易於變動 。
將結對夥伴添加到項目中,個人結對夥伴的博客是20155215宣言
實驗三 敏捷開發與XP實踐-3
參考 , Eclipse的內容替換成IDEA
完成重構內容的練習,下載搭檔的代碼,至少進行三項重構,提交重構後代碼的截圖,加上本身的學號水印。提交搭檔的碼雲項目連接。
在vim中進入搭檔的目錄中,找到須要改寫的原始代碼:
將其複製粘貼到idea中,進行重構:
Refactor
中的Rname
2.用Refactor
中的Encapsulate Field...
再次重構。
3.繼續用Extract Method...
對最後輸出信息的語句進行重構
4.在Code
中選擇Generate
,給Role類產生一個toString方法
5.重構後的代碼及運行結果以下:
6.運行以下:
7.在搭檔的項目下,進行git push 上傳
8.在熙搭檔的項目下,運行git log
查看上傳記錄:
參考以結對的方式完成Java密碼學相關內容的學習,結合重構,git,代碼標準。
提交學習成果碼雲連接和表明性成果截圖,要有學號水印。
1.體驗加解密---凱撒密碼
加密過程:c≡m+k mod n (其中n爲基本字符個數)
一樣,解密過程可表示爲:
m≡c+k mod n (其中n爲基本字符個數)
該程序既可用於加密又可用於解密。只要執行:
java Caesar 明文(要加密的字符串) 密鑰(移動的位數)
在密鑰前面加上負號,將運行解密。
加密:
解密:
加密Helloworld
解密Helloworld
2.Java對稱加密-DES算法
本實例給出Java中建立對稱密鑰的步驟,並經過對象序列化方式保存在文件中。
運行java Skey_DES,在當前目錄下將生成文件key1.dat,其中包含的密鑰能夠用於使用Triple-DES算法的加密和解密。
先建立文件輸出流對象,在其參數中指定文件名,如keykb1.dat。而後執行文件輸出流的write( )方法將第2步中獲得的字節數組中的內容寫入文件。
import java.io.*; import java.security.*; public class Skey_kb{ public static void main(String args[]) throws Exception{ FileInputStream f=new FileInputStream("key1.dat"); ObjectInputStream b=new ObjectInputStream(f); Key k=(Key)b.readObject( ); byte[ ] kb=k.getEncoded( ); FileOutputStream f2=new FileOutputStream("keykb1.dat"); f2.write(kb); // 打印密鑰編碼中的內容 for(int i=0;i<kb.length;i++){ System.out.print(kb[i]+","); } } }
輸入java Skey_kb 運行程序,在程序的當前目錄中將產生文件名爲keykb1.dat的文件,屏幕輸出以下:
此即程序中建立的密鑰的編碼內容,若是用文本編輯器打開keykb1.dat,看到的不是上面的數字而是相似下面的字符:
棄2 ?&驊 馤禖??僪*
3.Java非對稱加密-RSA算法
輸入java Skey_RSA運行程序,當前目錄下將生成兩個文件:Skey_RSA_pub.dat和Skey_RSA_priv.dat,前者保存着公鑰,後者保存着私鑰。
import java.security.*; import java.security.spec.*; import javax.crypto.*; import javax.crypto.spec.*; import javax.crypto.interfaces.*; import java.security.interfaces.*; import java.math.*; import java.io.*; public class Enc_RSA{ public static void main(String args[]) throws Exception{ String s="Hello World!"; // 獲取公鑰及參數e,n FileInputStream f=new FileInputStream("Skey_RSA_pub.dat"); ObjectInputStream b=new ObjectInputStream(f); RSAPublicKey pbk=(RSAPublicKey)b.readObject( ); BigInteger e=pbk.getPublicExponent(); BigInteger n=pbk.getModulus(); System.out.println("e= "+e); System.out.println("n= "+n); // 明文 m byte ptext[]=s.getBytes("UTF8"); BigInteger m=new BigInteger(ptext); // 計算密文c,打印 BigInteger c=m.modPow(e,n); System.out.println("c= "+c); // 保存密文 String cs=c.toString( ); BufferedWriter out= new BufferedWriter(new OutputStreamWriter( new FileOutputStream("Enc_RSA.dat"))); out.write(cs,0,cs.length( )); out.close( ); } }
程序最後將密文c打印出來,並以字符串形式保存在文件中。
運行程序
輸入java Enc_RSA運行程序,獲得以下結果:
中顯示了公鑰中的參數以及加密的結果c,這些都是很大的整數,n和c多達上百位。程序運行後密文c以字符串形式保存在文件Enc_RSA.dat中。
RSA算法解密的結果m是一個很大的整數,爲了計算出其對應的字符串的值,先使用BigInteger類的toByteArray( )方法獲得表明該整型數的字節數組,而後將數組中每一個元素轉換爲字符,組成字符串。
import java.security.*; import java.security.spec.*; import javax.crypto.*; import javax.crypto.spec.*; import javax.crypto.interfaces.*; import java.security.interfaces.*; import java.math.*; import java.io.*; public class Dec_RSA{ public static void main(String args[]) throws Exception{ //讀取密文 BufferedReader in= new BufferedReader(new InputStreamReader( new FileInputStream("Enc_RSA.dat"))); String ctext=in.readLine(); BigInteger c=new BigInteger(ctext); //讀取私鑰 FileInputStream f=new FileInputStream("Skey_RSA_priv.dat"); ObjectInputStream b=new ObjectInputStream(f); RSAPrivateKey prk=(RSAPrivateKey)b.readObject( ); BigInteger d=prk.getPrivateExponent(); //獲取私鑰參數及解密 BigInteger n=prk.getModulus(); System.out.println("d= "+d); System.out.println("n= "+n); BigInteger m=c.modPow(d,n); //顯示解密結果 System.out.println("m= "+m); byte[] mt=m.toByteArray(); System.out.println("PlainText is "); for(int i=0;i<mt.length;i++){ System.out.print((char) mt[i]); } } }
運行程序輸入java Dec_RSA運行程序,獲得以下結果:
其中顯示了私鑰中的參數以及解密的結果,其中整型的明文轉換後顯示出字符串「Hello World!」。
4.和結對的搭檔一塊兒將SEnc.java進行了一些修改:
步驟 | 耗時 | 百分比 |
---|---|---|
需求分析 | 50分鐘 | 25.00% |
設計 | 50分鐘 | 25.00% |
代碼實現 | 60分鐘 | 30.00% |
測試 | 20分鐘 | 10.00% |
分析總結 | 20分鐘 | 10.00% |