201671010428沙沙-實驗四軟件工程結對項目

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

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

實驗內容:

(一)任務一:互評java

  1. 博客點評內容:
  2. GitHub中源碼點評:
  3. 軟件結構清晰,代碼規範,每一個模塊實現一個肯定的功能(雖然功能要求並未徹底實現),可是人機交互界面對於用戶來說不夠直觀,還需繼續完善。git

  4. 點評心得:
  5. 項目開發過程當中,需求分析和功能設計階段對於項目經驗少的人來講須要花費更多的時間,同時代碼規範和文檔編寫 規範一樣也很重要。github

  6. 結對夥伴:博客以及GitHub

(二)任務二:結對項目源碼: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. 核心功能代碼展現:

本段代碼爲統計文本行數以及字符數的代碼,在以前的項目中未實現,因此展現出來。
session

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;
    }

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

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 計劃 10 10
    Estimate 估計這個任務須要多少時間,並規劃大體工做步驟 10 10
    Development 開發 250 300
    Analysis 需求分析 (包括學習新技術) 15 15
    Design Spec 生成設計文檔 15 17
    Design Review 設計複審 (和同事審覈設計文檔) 2 4
    Coding Standard 代碼規範 (爲目前的開發制定合適的規範) 8 8
    Design 具體設計 20 23
    Coding 具體編碼 200 260
    Code Review 代碼複審 10 10
    Test 測試(自我測試,修改代碼,提交修改) 15 15
    Reporting 報告 20 20
    Test Report 測試報告 5 5
    Size Measurement 計算工做量 5 5
    Postmortem & Process Improvement Plan 過後總結 ,並提出過程改進計劃 5 8
  • 小結感覺:
  • 閱讀關於結對編程的闡述http://www.cnblogs.com/xinz/archive/2011/08/07/2130332.html 結對編程對我來講是一次新的體驗,在結對過程當中,能夠充分發揮本身的編程優點,進一步提升本身的編程能力。結對編程是由兩我的進行,因此功能的 實現也是彙集了兩我的的能力,實現了「1+1>2」。此次結對項目的實現爲我之後進行團隊協做奠基了良好的基礎,學會了如何作到最大限度的發揮彼此的能 力,使得程序更加完善。

相關文章
相關標籤/搜索