1. 程式人生 > >軟工實踐第五次作業

軟工實踐第五次作業

學習 單詞 工作量 多人 沖突 image 虛擬 獲取 隊友

軟工實踐第五次作業

寫在前面

  • 本次作業題目鏈接
  • 本次作業Github倉庫鏈接
  • 031602237吳傑婷博客鏈接
  • 031602636許舒玲博客鏈接

具體分工

兩個人一起在實驗室完成的,有什麽問題都當面溝通解決+使用github多人協作的形勢,一人寫一部分函數然後傳到github上面去,通過git pull更新本地倉庫

  • 吳傑婷:詞數統計部分,詞頻統計部分,代碼整合,文檔撰寫,單元測試,性能分析
  • 許舒玲:爬蟲部分,字符統計,行數統計,附加題部分,代碼整合,文檔撰寫,性能分析

PSP表格

PSP2.1 Personal Software Process Stages 預估耗時(分鐘)
Planning 計劃 10
? Estimate ? 估計這個任務需要多少時間 10
Development 開發 700
? Analysis ? 需求分析 (包括學習新技術) 30
? Design Spec ? 生成設計文檔 5
? Design Review ? 設計復審 5
? Coding Standard ? 代碼規範 (為目前的開發制定合適的規範) 10
? Design ? 具體設計 20
? Coding ? 具體編碼 500
? Code Review ? 代碼復審 70
? Test ? 測試(自我測試,修改代碼,提交修改) 60
Reporting 報告 20
? Test Repor ? 測試報告 5
? Size Measurement ? 計算工作量 5
? Postmortem & Process Improvement Plan ? 事後總結, 並提出過程改進計劃 10
合計 730 1014

解題思路描述與設計實現說明

  • 爬蟲使用

    • 使用java jsoup包,jsoup最主要用到的就是的elements類和select()方法。elements類相當於網頁元素中的標簽,而select()方法用於按一定條件選取符合條件的標簽,組成符合條件的標簽數組。element支持轉成字符串或者文本等。
    • 打開網頁查看元素-選擇代碼行-右鍵-copy-copy selector 獲取便簽
      如://#content > dl > dt:nth-child(2935)獲得鏈接
    Document document = Jsoup.connect("http://openaccess.thecvf.com/CVPR2018.py").userAgent("Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)").get();
      Element main = document.getElementById("content");
      //#content > dl > dt:nth-child(0)
      Elements url = main.select("dl").select("dt:nth-child(0)");
      for(Element question:url) {
          String URL = question.attr("abs:href");
          Document document2 = Jsoup.connect(URL).get();
          //#papertitle
          Elements title = document2.select("#papertitle");
          //#abstract
          Elements Abstract = document2.select("#abstract");
    }
  • 代碼組織與內部實現設計(類圖)

    技術分享圖片
  • 說明算法的關鍵與關鍵實現部分流程圖

    • 計算行數(linesCount.java)
      技術分享圖片
    • 獲取有效文本(HandleContent.java)

      技術分享圖片
    • 計算字符數(charsCount.java)

      技術分享圖片
    • 計算單詞數(wordsCount.java)

      技術分享圖片
    • 輸出單詞排序(WordsCount.java)

附加題設計與展示

  • 設計的創意獨到之處

  • 實現思路

  • 實現成果展示

    技術分享圖片
    技術分享圖片

關鍵代碼解釋

單元測試

  • 代碼覆蓋率

    技術分享圖片

  • 測試文本部分截圖
    技術分享圖片

  • 測試結果/時間截圖
    技術分享圖片

性能分析

  • 展示性能分析圖

    通過java虛擬機的javaConsole顯示性能分析情況
    技術分享圖片
  • 結合單元測試,可見Weighttest(權重統計)和wordtest(詞組總數統計)所耗費的時間更長,原因出在權重統計時涉及了暴力排序。

Github代碼簽入記錄

技術分享圖片

遇到的代碼模塊異常或結對困難及解決方法

  • 關於github多人協作問題

    • 問題描述:一開始在做的時候,不知道如何一起協作完成一份代碼,並且對github多人協作的功能一頭霧水。
    • 做過的嘗試:一開始我在網上找了資料,資料上采用的方法是添加contributors,然後創建分支,再合並分支到master的方法,但是步驟繁瑣,而且我們一般是把代碼整合後測試再上傳,一般不會發生沖突,然後舒玲也提出了一個方法是讓我folk她那邊的項目,然後我提交到我本地folk的倉庫再提交給她,不過本次嘗試以不知道如何同意合並結束……
    • 是否解決:已經解決。經過向大佬的請教,我們決定采用在舒玲的github倉庫上添加contributor的方式,只用一個master分支,這樣方便了我們的提交。只需要git add,git commit,git push即可
    • 有何收獲:一個人硬著頭皮找資料的做的很容易心態爆炸,兩個人一起商量顯然效率很高(而且開心),掌握了幾種github團隊協作的開發方式!
  • 關於代碼合並問題

    • 問題描述:兩個人的代碼風格不同,舒玲寫在接口裏,然後在主函數調用。我寫在Class裏,然後直接調用Class的某個函數。
    • 做過的嘗試:互相研究對方的代碼,統一在Main函數調用。本來我想寫在舒玲的接口裏,不過引用的時候總是出錯,最後直接引用我的類了……
    • 是否解決:已經解決。在Main函數裏調用舒玲的接口和我的類,不過有些地方需要統一,比如文件讀入讀出這裏。
    • 有何收獲:統一代碼規範很重要

評價你的隊友

  • 值得學習的地方

  • 代碼能力強,思路也清晰。很多我研究半天的東西一下就弄好了
  • 團隊協作能力高,是很適合結對的人選
  • 對github的使用比較熟練
  • 遇到問題很快想到解決的方法
  • 掌握的技術多
  • 需要改進的地方

  • 效率太高了= =每天都能做好多事 令人心慌

學習進度條

第 N 周 新增代碼(行) 累計代碼(行) 本周學習耗時(小時) 累計學習耗時(小時)
1 82 82 4 4
2 94 176 5 5
3 107 283 5.6 5.6

軟工實踐第五次作業