1. 程式人生 > >2018-2019-2 20175235 實驗三《敏捷開發與XP實踐》實驗報告

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

指導 htm 步驟 因此 ctrl+s 重載 actor app 依靠

一、實驗報告封面

課程:Java程序設計 班級:1752 姓名:澤仁拉措 學號:20175235

指導教師:婁嘉鵬 實驗日期:2019年4月30日

實驗時間: 。 實驗序號:實驗三

實驗名稱:敏捷開發與XP實踐

二、實驗內容

  1. XP基礎

  2. XP核心實踐

  3. 相關工具

三、實驗要求

1.沒有Linux基礎的同學建議先學習《Linux基礎入門(新版)》《Vim編輯器》 課程

2.完成實驗、撰寫實驗報告,實驗報告以博客方式發表在博客園,註意實驗報告重點是運行結果,遇到的問題(工具查找,安裝,使用,程序的編輯,調試,運行等)、解決辦法(空洞的方法如“查網絡”、“問同學”、“看書”等一律得0分)以及分析(從中可以得到什麽啟示,有什麽收獲,教訓等)。報告可以參考範飛龍老師的指導

  1. 嚴禁抄襲,有該行為者實驗成績歸零,並附加其他懲罰措施。

四、實驗步驟

1.①代碼規範

下載插件:通過Jetbrains官方倉庫安裝:打開Setting->Plugins->搜索框輸入alibaba->下載即可
技術分享圖片

②編碼規約掃描:在文件上點擊右鍵找到即可
技術分享圖片
不規範的地方,有中文提示並且定位到了行,alibaba把問題分為block/critical/major三個等級,有些規則可以一鍵修復。

2.編碼標準

①Java中的一般的命名規則有
要體現各自的含義
包、類、變量用名詞
方法名用動賓
包名全部小寫,如:io,awt
類名第一個字母要大寫,如:HelloWorldApp
變量名第一個字母要小寫,如:userName

方法名第一個字母要小寫:setName
②.作業1:把下面代碼重新格式化,再研究一下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));
}
}

③·Ctrl+/或Ctrl+Shift+/`添加註釋
技術分享圖片

Ctrl+O重載基本類
技術分享圖片

④.Java中的一般的命名規則有:

要體現各自的含義
包、類、變量用名詞
方法名用動賓
包名全部小寫,如:io,awt
類名第一個字母要大寫,如:HelloWorldApp
變量名第一個字母要小寫,如:userName
方法名第一個字母要小寫:setName

3.敏捷開發與XP

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

public class Complex {
    private double RealPart;//復數的實部
    private double ImagePart;//復數的虛部
    public Complex() {}
    public Complex(double a, double b) {
        setRealPart(a);
        setImagePart(b);
    }
    public void setRealPart(double a) {
        RealPart = a;
    }
    public void setImagePart(double b) {
        ImagePart = b;
    }
    public double getRealPart() {//返回復數的實部
        return RealPart;
    }
    public double getImagePart() {
        return ImagePart;
    }
    Complex ComplexAdd(Complex a) {//(a+bi)+(c+di)=(a+c)+(b+d)i
        Complex complex = new Complex();
        complex.RealPart = this.RealPart + a.RealPart;
        complex.ImagePart = this.ImagePart + a.ImagePart;
        return complex;
    }
    Complex ComplexSub(Complex a) {//(a+bi)-(c+di)=(a-c)+(b-d)i
        Complex complex=new Complex();
        complex.RealPart=this.RealPart-a.RealPart;
        complex.ImagePart=this.ImagePart-a.ImagePart;
        return complex;
    }
    Complex ComplexMulti(Complex a) {//(a+bi)*(c+di)=(ac-bd)+(ad+bc)i
        Complex complex =new Complex();
        complex.RealPart=this.RealPart*a.RealPart-this.ImagePart*a.ImagePart;
        complex.ImagePart=this.RealPart*a.ImagePart+this.ImagePart*a.RealPart;
        return complex;
    }
    Complex ComplexDiv(Complex a) {//(a+bi)/(c+di)=(a+bi)(c-di)/(c^2+d^2)
        Complex complex=new Complex();
        complex.RealPart=(this.RealPart*a.ImagePart+this.ImagePart*a.RealPart)/(a.ImagePart*a.ImagePart+a.RealPart*a.RealPart);
        complex.ImagePart=(this.ImagePart*a.ImagePart+this.RealPart*a.RealPart)/(a.ImagePart*a.ImagePart+a.RealPart*a.RealPart);
        return complex;
    }
    public String toString() {
        if (ImagePart==0) {
            String str = String.valueOf(RealPart);
            return str;
        }
        else if (RealPart==0) {
            String str = String.valueOf(ImagePart)+"i";
            return  str;
        }
        else {
            if (ImagePart>0) {
                String str = String.valueOf(RealPart) + "+" + String.valueOf(ImagePart) + "i";
                return str;
            }
            else {
                String str = String.valueOf(RealPart) + String.valueOf(ImagePart) + "i";
                return str;
            }
        }
    }
}

要測試的類有ComplexAddComplexSubComplexMultiComplexDiv
②測試代碼如下
技術分享圖片

技術分享圖片

③然後將測試代碼傳到搭檔的碼雲裏,git log如下:
技術分享圖片

4.重構

①要求:參考http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的內容替換成IDEA
完成重構內容的練習,下載搭檔的代碼,至少進行三項重構,提交重構後代碼的截圖,加上自己的學號水印。提交搭檔的碼雲項目鏈接。
②實驗步驟
重構的概念:
重構(Refactor),就是在不改變軟件外部行為的基礎上,改變軟件內部的結構,使其更加易於閱讀、易於維護和易於變更 。
重構中一個非常關鍵的前提就是“不改變軟件外部行為”,它保證了我們在重構原有系統的同時,不會為原系統帶來新的BUG,以確保重構的安全。如何保證不改變軟件外部行為?重構後的代碼要能通過單元測試。如何使其更加易於閱讀、易於維護和易於變更 ?設計模式給出了重構的目標。

我們要修改軟件,萬變不離其宗,無非就是四種動機:
增加新功能;
原有功能有BUG;
改善原有程序的結構;
優化原有系統的性能 。

第一種和第二種動機,都是源於客戶的功能需求,而第四種是源於客戶的非功能需求。軟件的外部質量,其衡量的標準就是客戶對軟件功能需求與非功能需求的滿意度。它涉及到一個企業、一個軟件的信譽度與生命力,因此為所有軟件企業所高度重視。要提高軟件內部質量,毫無疑問就是軟件修改的第三個動機:改善原有程序的結構。它的價值是隱性的,並不體現在某一次或兩次開發中,而是逐漸體現在日後長期維護的軟件過程中。

而一個完整的重構流程包括:
從版本控制系統代碼庫中Check out code
讀懂代碼(包括測試代碼)
發現bad smell
efactoring
運行所有的Unit Tests
往代碼庫中Check in code

下面就是下載搭檔的代碼,至少進行三項重構:

搭檔的代碼:
技術分享圖片

重構1:重寫toString時的@override標誌
技術分享圖片

重構2:添加作者和日期
技術分享圖片

重構3:規範方法名(首字母小寫)
技術分享圖片

規範後的代碼
技術分享圖片

5.我的碼雲鏈接:

https://gitee.com/drpkgj/Besti.Java/blob/master/TEST/ComplexTest.java

五.實驗總結:

這次實驗的大部分都是依靠實驗二所學,重新復習實驗二部分操作,剛在Windows上git才發現自己Windows既然沒安裝git,平時都用虛擬機,然後連忙又下載git

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