1. 程式人生 > >201671010454張琳-實驗四軟件工程結對項目

201671010454張琳-實驗四軟件工程結對項目

rds sco 分享圖片 easyu pro 協作能力 view measure new

課程名稱:2016級計算機科學與工程學院軟件工程(西北師範大學)
所屬課程:軟件工程
課程要求:實驗四 軟件工程結對項目
實驗目標:

(1)體驗軟件項目開發中的兩人合作,練習結對編程(Pair programming)熟悉軟件開發整體流程。
(2)掌握Github上增量發布軟件的操作方法。

實驗內容:

(一)任務一:互評

  1. 博客點評內容:
  2. 技術分享圖片
  3. GitHub中源碼點評:
  4. 軟件結構清晰,代碼規範,每個模塊實現一個確定的功能,但是人機交互界面對於用戶來講不夠直觀,還需繼續完善。

  5. 點評心得:
  6. 想要完成一個項目,除了要會分析,會設計,還要會實現。這就需要我去掌握更多的開發技術,學會積累經驗並提高自己的開發能力。 對比結對夥伴的編程能力,我還有很多需要學習和補充的地方。

  7. 結對夥伴:博客以及GitHub
  8. 技術分享圖片

(二)任務二:結對項目源碼:GitHub

  1. 需求分析:
    • 程序可以讀入任意英文文本文件,能讀取容納10萬詞以上的文章,程序需要很壯健。
    • 指定單詞詞頻統計功能:用戶可輸入從該文本中想要查找詞頻的一個或任意多個英文單詞,可顯示對應單詞在文本中出現的次數和柱狀圖,由柱狀圖顯示單詞出現的頻率 的高低。
    • 高頻詞統計功能:用戶從鍵盤輸入高頻詞輸出的個數k,運行程序統計功能,可按文本中詞頻數降序顯示前k個單詞的詞頻及單詞。
    • 統計該文本所有單詞數量及詞頻數,並能將單詞及詞頻數按字典順序輸出到文件result.txt。
    • 統計該文本行數以及字符數。
    • 各種統計功能提供計時功能,顯示程序統計所消耗的時間(單位:ms)。
    • 處理任意用戶導入的任意英文文本。
    • 實現良好的人機交互界面。
  2. 程序設計:本程序共包含5個類,9個jsp頁面。
    • founction.java類:實現讀入文本的功能。
    • wordServlet.java類:實現指定單詞詞頻統計功能,並通過柱狀圖顯示出來。
    • highCountServlet.java類:實現高頻詞統計並按降序排序。
    • outServlet.java類:實現按字典順序輸出到result.txt的功能。
    • allCountSevlet.java類:實現文本行數以及字符數的統計功能。
  3. 核心功能代碼展示:

本段代碼為統計文本行數以及字符數的代碼,在之前的項目中未實現,所以展示出來。

public Map<String, Integer> allCount(String fileName) throws IOException {
        Map<String, Integer> Map2 = new TreeMap<String, Integer>();
        String line = fileName;
        File file = new File(line);
        InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf-8");
        BufferedReader br = new BufferedReader(isr);
        int charNum = 0;// 字符數
        int wordsNum = 0;// 單詞數
        int lineNum = 0;// 行數
        // 以流的形式讀入文件
        while (br.read() != -1) {
            String s = br.readLine();
            charNum += s.length();
            wordsNum += s.split(" ").length;
            lineNum++;
        }
        isr.close();// 關閉
        Map2.put("字符數", charNum);
        Map2.put("單詞數", wordsNum);
        Map2.put("行數", lineNum);
        return Map2;
    }

這段代碼實現了計時功能。

founction f = new founction();
        long st = System.currentTimeMillis();
        Map<String, Integer> wordsCount = f.allCount(fileName);
        long end = System.currentTimeMillis();
        Long time = end-st;
        HttpSession  session = request.getSession();
        session.setAttribute("wordsCount", wordsCount);
        session.setAttribute("time", time);
  • 程序運行:
  • 高頻單詞數統計


    技術分享圖片

    指定單詞詞頻統計


    技術分享圖片

    按字典順序輸出到result.txt


    技術分享圖片

    統計文本行數字符數


    技術分享圖片
  • 結對過程描述:
    1. 首先,我們對項目整體要求進行了分析和理解,並根據要求對實驗二進行補充和完善。同時,我們草擬了一份計劃 (包括未實現的功能、需要進一步完善的功能、要用到的技術、具體分工等)。
    2. 關於具體分工,我們是根據各自的能力進行了任務分配,我主要負責測試工作和交互界面的實現,結對小夥伴主要負責核心 功能的開發和異常處理。當然,在此基礎上,我們也會對彼此的工作根據實際情況提出小的意見和建議。
    3. 關於技術實現,我們分為前臺和後臺。前臺主要用到了EasyUI和JSP技術,後臺主要用到了servlet。
    4. 在前期的準備工作(功能模塊設計、代碼規範<百度“java代碼規範”> 了解等)結束後,我們開始編程。首先我們對實驗二中已經完成的功能進行了完善,然後根據前期草擬的計劃對未實現的功能進 行初步設計(核心模塊設計主要由結對小夥伴完成),同時設計合理清晰的人機交互界面(該部分主要由我完成設計)。
    5. 雙方工作基本完成後,進行對接,實現前臺後臺交互。由於設計過程中比較仔細,且溝通較好,在對接時沒有浪費不必要的 時間。
    6. 最後,我們進行了幾輪叠代,完善各功能模塊。通過單元測試和回歸測試保證了模塊的正確性。然後進行文檔編寫。
  • PSP:
  • PSP2.1任務內容計劃共完成需要的時間(min)實際完成需要的時間(min)
    Planning計劃1010
    Estimate估計這個任務需要多少時間,並規劃大致工作步驟1010
    Development開發250300
    Analysis需求分析 (包括學習新技術)1515
    Design Spec生成設計文檔1517
    Design Review設計復審 (和同事審核設計文檔)24
    Coding Standard代碼規範 (為目前的開發制定合適的規範)88
    Design具體設計2023
    Coding具體編碼200260
    Code Review代碼復審1010
    Test測試(自我測試,修改代碼,提交修改)1515
    Reporting報告2020
    Test Report測試報告55
    Size Measurement計算工作量55
    Postmortem & Process Improvement Plan事後總結 ,並提出過程改進計劃58
  • 小結感受:
  • 閱讀關於結對編程的闡述http://www.cnblogs.com/xinz/archive/2011/08/07/2130332.html
    之前我們做過的項目大都是以個人或者在老師的帶領下完成的,這次的結對編程是一個新的體驗。“在結對編程中,任何一段代碼都至少被兩雙眼睛看過, 兩個腦袋思考過。”真正實現了“1+1>2”。結對是一個互相促進、互相監督、互相完善的過程,這種形式的編程不但可以提高代碼質量減少程序錯誤,而且 在一定程度上也提高了自己的團隊協作能力,在結對過程中也能從對方身上學到好的編程思想和行為。

201671010454張琳-實驗四軟件工程結對項目