2018-2019-2 20175218 實驗三《敏捷開發與XP實踐》實驗報告

2018-2019-2 20175218 實驗三《敏捷開發與XP實踐》實驗報告

姓名 陳敬勇
班級 1752
學號 20175218
實驗序號 實驗三
實驗名稱 敏捷開發與XP實踐

實驗內容html

  1. XP基礎
  2. XP核心實踐
  3. 相關工具

實驗要求java

  1. 沒有Linux基礎的同窗建議先學習《Linux基礎入門(新版)》《Vim編輯器》 課程
  2. 完成實驗、撰寫實驗報告,實驗報告以博客方式發表在博客園,注意實驗報告重點是運行結果,遇到的問題(工具查找,安裝,使用,程序的編輯,調試,運行等)、解決辦法(空洞的方法如「查網絡」、「問同窗」、「看書」等一概得0分)以及分析(從中能夠獲得什麼啓示,有什麼收穫,教訓等)。報告能夠參考範飛龍老師的指導
  3. 嚴禁抄襲,有該行爲者實驗成績歸零,並附加其餘懲罰措施。

1、敏捷開發與XP實踐-1

一、實驗要求

  • http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的內容替換成IDEA
  • 參考 http://www.cnblogs.com/rocedu/p/6371315.html#SECCODESTANDARD 安裝alibaba 插件,解決代碼中的規範問題。
  • 在IDEA中使用工具(Code->Reformate Code)把下面代碼從新格式化,再研究一下Code菜單,找出一項讓本身感受最好用的功能。提交截圖,加上本身學號水印。
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));
}
}

二、實驗步驟

一、安裝 Alibaba Java Code Guidelines 插件git

  1. 首先在工具箱中打開 IntelliJ IDEA UItimate 軟件,如圖:

  1. 點擊 File,選擇其中的 Settings ,如圖:

  1. 點擊 Plugins ,在 Marketplace 欄下搜索 alibaba,如圖:

  1. 找到 Alibaba Java Code Guidelines,點擊 Install便可下載安裝 Alibaba Java Code Guidelines 插件,如圖:

二、規範代碼算法

  1. 建立項目,將要規範的代碼打上去,如圖:

  1. 右擊項目,選擇編碼規約掃描,如圖:

  1. 以後出現不規範的地方,而後依次進行更正,如圖:

  1. 規範後的代碼:
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));
        }
    }
}

三、格式化代碼安全

  1. 點擊 Code ,選擇 Reformate Code,對代碼進行格式化,如圖:

四、研究Code菜單網絡

  1. 點擊 Code ,選擇 Optimize Imports ,能夠對輸入端進行優化,如圖:

2、敏捷開發與XP實踐-2

一、實驗要求

  • 在碼雲上把本身的學習搭檔加入本身的項目中,確認搭檔的項目加入本身後,下載搭檔實驗二的Complex代碼,加入很多於三個JUnit單元測試用例,測試成功後git add .; git commit -m "本身學號 添加內容";git push;
  • 提交搭檔項目git log的截圖,包含上面git commit的信息,並加上本身的學號水印信息。app

    二、實驗步驟

    一、進入搭檔實驗二的Complex代碼的碼雲倉庫連接,找到搭檔代碼
  • 搭檔代碼以下框架

public class Complex {
    double RealPart=0;
    double ImagePart=0;
    public Complex(){}
    public Complex(double RealPart,double ImagePart){
        this.RealPart=RealPart;
        this.ImagePart=ImagePart;

    }
    public double getRealPart(){
        return RealPart;
    }
    public double getImagePart(){
        return ImagePart;
    }
    public String toString(){
        String s = "";
        double r=RealPart;
        double i=ImagePart;
        if(r==0&&i==0){
            s="0";
        }
        else if(r==0&&i!=0){
            s=i+"i";
        }
        else if(r!=0&&i==0){
            s=r+"";
        }
        else if(r!=0&&i<0){
            s=r+""+i+"i";
        }
        else
        {
            s=r+"+"+i+"i";
        }
        return s;
    }
    public boolean equals(Object obj){
        if(this==obj){
            return true;
        }
        else return false;
    }

    public Complex ComplexAdd(Complex a){
        return new Complex(RealPart+a.getRealPart(),ImagePart+a.getImagePart());
    }
    public Complex ComplexSub(Complex a){
        return new Complex(RealPart-a.getRealPart(),ImagePart-a.getImagePart());
    }
    public Complex ComplexMulti(Complex a){
        double r=RealPart*a.getRealPart()-ImagePart*a.getImagePart();
        double i =ImagePart*a.getRealPart()+RealPart*a.getImagePart();
        return new Complex(r,i);
    }
    public Complex ComplexDiv(Complex a){
        double r=(RealPart * a.ImagePart + ImagePart * a.RealPart) / (a.ImagePart * a.ImagePart + a.RealPart * a.RealPart);
        double i=(ImagePart * a.ImagePart + RealPart * a.RealPart) / (a.RealPart * a.RealPart + a.RealPart * a.RealPart);
        return new Complex(r,i);
    }


}
  • 搭檔代碼倉庫如圖

二、對搭檔的complex代碼進行測試編輯器

  • 測試代碼以下
public class Complex {
    double RealPart=0;
    double ImagePart=0;
    public Complex(){}
    public Complex(double RealPart,double ImagePart){
        this.RealPart=RealPart;
        this.ImagePart=ImagePart;

    }
    public double getRealPart(){
        return RealPart;
    }
    public double getImagePart(){
        return ImagePart;
    }
    public String toString(){
        String s = "";
        double r=RealPart;
        double i=ImagePart;
        if(r==0&&i==0){
            s="0";
        }
        else if(r==0&&i!=0){
            s=i+"i";
        }
        else if(r!=0&&i==0){
            s=r+"";
        }
        else if(r!=0&&i<0){
            s=r+""+i+"i";
        }
        else
        {
            s=r+"+"+i+"i";
        }
        return s;
    }
    public boolean equals(Object obj){
        if(this==obj){
            return true;
        }
        else return false;
    }

    public Complex ComplexAdd(Complex a){
        return new Complex(RealPart+a.getRealPart(),ImagePart+a.getImagePart());
    }
    public Complex ComplexSub(Complex a){
        return new Complex(RealPart-a.getRealPart(),ImagePart-a.getImagePart());
    }
    public Complex ComplexMulti(Complex a){
        double r=RealPart*a.getRealPart()-ImagePart*a.getImagePart();
        double i =ImagePart*a.getRealPart()+RealPart*a.getImagePart();
        return new Complex(r,i);
    }
    public Complex ComplexDiv(Complex a){
        double r=(RealPart * a.ImagePart + ImagePart * a.RealPart) / (a.ImagePart * a.ImagePart + a.RealPart * a.RealPart);
        double i=(ImagePart * a.ImagePart + RealPart * a.RealPart) / (a.RealPart * a.RealPart + a.RealPart * a.RealPart);
        return new Complex(r,i);
    }


}
  • 搭檔complex代碼測試成功如圖

三、上傳代碼ide

  • 代碼成功上傳截圖

  • git log截圖

3、敏捷開發與XP實踐-3

一、實驗要求

  • http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的內容替換成IDEA
  • 完成重構內容的練習,下載搭檔的代碼,至少進行三項重構,提交重構後代碼的截圖,加上本身的學號水印。提交搭檔的碼雲項目連接。

    二、實驗步驟

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

二、重構的動機

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

三、重構的價值

  • 第一種和第二種動機,都是源於客戶的功能需求,而第四種是源於客戶的非功能需求。軟件的外部質量,其衡量的標準就是客戶對軟件功能需求與非功能需求的滿意度。它涉及到一個企業、一個軟件的信譽度與生命力,所以爲全部軟件企業所高度重視。要提升軟件內部質量,毫無疑問就是軟件修改的第三個動機:改善原有程序的結構。它的價值是隱性的,並不體如今某一次或兩次開發中,而是逐漸體如今往後長期維護的軟件過程當中。
  • 高質量的軟件,能夠保證開發人員(即便是新手)可以輕易看懂軟件代碼,可以保證往後的每一次軟件維護均可以輕易地完成(不論軟件經歷了多少次變動,維護了多少年),可以保證往後的每一次需求變動都可以輕易地進行(而不是傷筋動骨地大動)。要作到這幾點其實並不容易,它須要咱們持續不斷地對系統內部質量進行優化與改進。

四、下載搭檔代碼並進行重構

  • 搭檔的complex代碼
public class Complex {
    double RealPart=0;
    double ImagePart=0;
    public Complex(){}
    public Complex(double RealPart,double ImagePart){
        this.RealPart=RealPart;
        this.ImagePart=ImagePart;

    }
    public double getRealPart(){
        return RealPart;
    }
    public double getImagePart(){
        return ImagePart;
    }
    public String toString(){
        String s = "";
        double r=RealPart;
        double i=ImagePart;
        if(r==0&&i==0){
            s="0";
        }
        else if(r==0&&i!=0){
            s=i+"i";
        }
        else if(r!=0&&i==0){
            s=r+"";
        }
        else if(r!=0&&i<0){
            s=r+""+i+"i";
        }
        else
        {
            s=r+"+"+i+"i";
        }
        return s;
    }
    public boolean equals(Object obj){
        if(this==obj){
            return true;
        }
        else return false;
    }

    public Complex ComplexAdd(Complex a){
        return new Complex(RealPart+a.getRealPart(),ImagePart+a.getImagePart());
    }
    public Complex ComplexSub(Complex a){
        return new Complex(RealPart-a.getRealPart(),ImagePart-a.getImagePart());
    }
    public Complex ComplexMulti(Complex a){
        double r=RealPart*a.getRealPart()-ImagePart*a.getImagePart();
        double i =ImagePart*a.getRealPart()+RealPart*a.getImagePart();
        return new Complex(r,i);
    }
    public Complex ComplexDiv(Complex a){
        double r=(RealPart * a.ImagePart + ImagePart * a.RealPart) / (a.ImagePart * a.ImagePart + a.RealPart * a.RealPart);
        double i=(ImagePart * a.ImagePart + RealPart * a.RealPart) / (a.RealPart * a.RealPart + a.RealPart * a.RealPart);
        return new Complex(r,i);
    }


}
  • 重構1:重寫搭檔代碼 toString 時,加入的@override標誌

  • 重構2:在搭檔的代碼中,添加做者和日期

  • 重構3:在搭檔的代碼中,對類中的變量和方法進行封裝

  • 重構4:在搭檔的代碼中,規範方法名,注意首字母小寫

  • 重構5:在搭檔的代碼中,應用修改精簡過長的方法

  • 對搭檔的代碼進行重構後的新代碼以下:
/**
 * @author  cjy
 * @date  2019/5/1
 */
public class Complex {
    private double RealPart=0;
    private double ImagePart=0;
    public Complex(){}
    public Complex(double RealPart,double ImagePart){
        this.RealPart=RealPart;
        this.ImagePart=ImagePart;

    }
    public double getRealPart(){
        return RealPart;
    }
    public double getImagePart(){
        return ImagePart;
    }

    @Override
    public String toString(){
        String s = "";
        double r=RealPart;
        double i=ImagePart;
        if(r==0&&i==0){
            s="0";
        }
        else if(r==0&&i!=0){
            s=i+"i";
        }
        else if(r!=0&&i==0){
            s=r+"";
        }
        else if(r!=0&&i<0){
            s=r+""+i+"i";
        }
        else
        {
            s=r+"+"+i+"i";
        }
        return s;
    }
    public boolean equals(Object obj){
        if(this==obj){
            return true;
        }
        else return false;
    }

    public Complex ComplexAdd(Complex a){
        return new Complex(RealPart+a.getRealPart(),ImagePart+a.getImagePart());
    }
    public Complex ComplexSub(Complex a){
        return new Complex(RealPart-a.getRealPart(),ImagePart-a.getImagePart());
    }
    public Complex ComplexMulti(Complex a){
        double r=RealPart*a.getRealPart()-ImagePart*a.getImagePart();
        double i =ImagePart*a.getRealPart()+RealPart*a.getImagePart();
        return new Complex(r,i);
    }
    public Complex ComplexDiv(Complex a){
        double r=(RealPart * a.ImagePart + ImagePart * a.RealPart) / (a.ImagePart * a.ImagePart + a.RealPart * a.RealPart);
        double i=(ImagePart * a.ImagePart + RealPart * a.RealPart) / (a.RealPart * a.RealPart + a.RealPart * a.RealPart);
        return new Complex(r,i);
    }


}
  • 重構後的代碼截圖

4、敏捷開發與XP實踐-4

一、實驗要求

  • 參考 http://www.cnblogs.com/rocedu/p/6683948.html,以結對的方式完成Java密碼學相關內容的學習,結合重構,git,代碼標準。
  • 提交學習成果碼雲連接和表明性成果截圖,要有學號水印。
  • Java安全體系結構總共分爲4個部分:
    • JCA( Java Cryptography Architecture, Java加密體系結構):JCA提供基本的加密框架, 如證書、 數字簽名、消息摘要和密鑰對產生器。
    • JCE( Java Cryptography Extension, Java加密擴展包):JCE在JCA的基礎上做了擴展, 提供了各類加密算法、 消息摘要算法和密鑰管理等功能。JCE的實現主要在javax.crypto包( 及其子包) 中
    • JSSE( Java Secure Sockets Extension, Java安全套接字擴展包):JSSE提供了基於SSL( Secure Sockets Layer,安全套接字層) 的加密功能。 在網絡的傳輸過程當中, 信息會通過多個主機(頗有可能其中一臺就被竊聽) , 最終傳送給接收者, 這是不安全的。這種確保網絡通訊安全的服務就是由JSSE來提供的。
    • JAAS( Java Authentication and Authentication Service, Java鑑別與安全服務):JAAS提供了在Java平臺上進行用戶身份鑑別的功能。

      二、實驗步驟

      Java對稱加密-DES算法
  1. 加密過程步驟
    • (1)從文件中獲取密鑰
    • (2)建立密碼器(Cipher對象)
    • (3)初始化密碼器
    • (4)獲取等待加密的明文
    • (5)執行加密
    • (6)處理加密結果
  2. 解密過程步驟
    • (1)獲取密文
    • (2)獲取密鑰
    • (3)建立密碼器(Cipher對象)
    • (4)初始化密碼器
    • (5)執行解密
      (其餘加密算法相似)

實驗代碼

public class Caesar {
    public static void main(String[] args) throws Exception{
        String s=args[0];
        int key=Integer.parseInt(args[1]);
        String es="";
        for(int i=0;i<s.length( );i++)
        {  char c=s.charAt(i);
            // 是小寫字母
            if(c>='a' && c<='z')
                //移動key%26位
            { c+=key%26;
                if(c<'a') {
                    //向左超界
                    c+=26;
                }
                if(c>'z') {
                    //向右超界
                    c-=26;
                }
            }
            // 是大寫字母
            else if(c>='A' && c<='Z')
            {  c+=key%26;
                if(c<'A') {
                    c+=26;
                }
                if(c>'Z') {
                    c-=26;
                }
            }
            es+=c;
        }
        System.out.println(es);
    }
}

實驗截圖

5、代碼託管

碼雲連接:點擊進入連接

  • 搭檔的碼雲連接:
    • https://gitee.com/zzm-zcc/zhang_zhi_min/tree/master/%E5%AE%9E%E9%AA%8C2
  • 個人碼雲連接:
    • https://gitee.com/cjy-123/20175218cjy/tree/master/Experiment2/test4

6、實驗心得

經過這一次的實驗,我對Java的學習更加深刻了。特別是對一個程序的理解。之前覺得只要把程序弄出來,可以實現想要的做用就能夠了。可是,作了實驗三以後,我知道了,一個程序作出來不是這麼簡單的,須要咱們考慮到不少方面。就像此次實驗,咱們寫完程序,還要學會規範程序。而後,另外一方面就是,還經過學習Java,聯繫到了其餘學科,這樣即兼顧了兩門學科的學習,還知道了兩門學科的聯繫,能把兩科都學得更好。

相關文章
相關標籤/搜索