201671010447楊露露 實驗四軟件工程結對項目

一:做業點評

點評內容:

評價博文連接:http://www.javashuo.com/article/p-whaerzlf-kn.html
1.缺點:博文結構不太清晰,排版能夠在美化一些,博文的內容中對程序功能的描述不太齊全,能夠在加一下本身作的軟件功能的截圖,博文結構設計凌亂,對一些功能的描述比較的淺。因爲咱們之間沒有養成對細緻軟件書寫規範,在對PSP的設計與時間的掌握有着很大差異。
2.優勢:功能實現的比較完整,對柱形圖的實現也比較的完美。在博客中基體現了軟件的各類需求,軟件實現過程當中人機交互書寫的比較的好。
評價源代碼連接:https://github.com/runju/WordCount
1.優勢:最值得表揚的是代碼的規範,該同窗有着良好的書寫代碼的習慣,各類類與方法命名見名思意,有着良好書寫代碼的習慣
2.缺點:在代碼方面須要注意的是功能模塊的強化,對代碼質量的提升,例如在封裝類的時候注意封裝的方法。html

評價心得

在閱讀完改同窗的代碼與博客以後,值得我學習的地方是該同窗書寫代碼的習慣,對項目功能可以見名思意,因爲是咱們結對須要完成的做業,也在評價該同窗代碼的時候向改同窗請教了一些我本身不足的問題。

GitHub的使用過程當中存在的一些問題:
對GitHub的不熟悉,練習了好幾回才學會對GitHub的克隆、Pull request、Merge pull reques等一些操做,對結對方的代碼進行下載與修改的時候也存在過一些問題,在網上查找一些資料解決問題。java

二:結對項目實施過程

一.需求分析

爲了練習軟件的我的開發流程,設計一個關於詞頻統計的小程序,在詞頻統計的小程序中須要實現的功能具體有:git

  • 1.1:程序可讀入任意英文文本文件,該文件中英文詞數大於等於1個。
  • 1.2:指定單詞的查找與所須要的時間
  • 1.3:在對指定單詞統計作一個柱狀圖
  • 1.4:高頻詞統計功能:用戶從鍵盤輸入高頻詞輸出的個數k,運行程序統計功能,可按文本中詞頻數降序顯示前k個單詞的詞頻及單詞。
  • 1.5 :對統計的文件進行行數和字符的統計
  • 1.6:.統計該文本全部單詞數量及詞頻數,並能將單詞及詞頻數按字典順序輸出到文件result.txt。

二.軟件設計

咱們組主要是利用web網頁的方式來實現這次項目的功能,服務器是經過Tomcat來支撐項目的實現。採用的是最簡單的servlet來傳遞參數,將全部的方法封裝在一個WordCount類,在這個類裏面每一個功能的核心實現存放在不一樣的方法裏面,將此類進行封裝。在servlet中直接調用封裝好的方法,經過請求(request)與響應(response)的方式來與jsp頁面進行傳遞。
這次的項目一共有三個類
2.1 WordCount.java 類:對全部功能的方法的一個封裝
2.2 WordCountServlet.java :與web頁面相聯繫的servlet類,是java內容與web交互的一個java封裝好的類
2.3 WordCount.jsp:一個前臺頁面,須要在網頁中展現的頁面
項目類圖:github

三:核心代碼:

3.1:經過servlet來實現前臺與後天的交互,servlet是java封裝好的交互類,經過請求(request)與響應(response)的方式來傳遞數據,實現先後臺的交互。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //請求與響應的編碼格式
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out=response.getWriter();
        String id=null;
        //接受頁面數據
        fileName = request.getParameter("fileName");//文件名
        String  words = request.getParameter("word");//指定單詞
        String wordnum = request.getParameter("wordnum");//高頻數
        String wordlines = request.getParameter("wordlines");//行數
        String result = request.getParameter("result");//存放
        id=request.getParameter("id");//功能編號的獲取
        if(id.equals("0")){
            //文件的上傳
            WordCount wordCount = new WordCount();
            map=wordCount.count(fileName);
            out.print("<script>alert('上傳成功!!');location.href='html/WordCount.jsp'</script>");   
        }else if(id.equals("1")){
            //指定單詞的查找
            //開始時間
            long startTime=System.currentTimeMillis();
            TreeMap<String,Integer> map1 = new TreeMap<String, Integer>(); 
            WordCount wordCount = new WordCount();
            map1= wordCount.bijiao(map, words);
            //結束時間
            long endTime=System.currentTimeMillis();
            float excTime=(float)((endTime-startTime)/1000)*1000;
            //向jsp頁面傳參數
            request.setAttribute("map1", map1);
            request.setAttribute("excTime", excTime);
            System.out.println("執行時間:"+excTime+"ms"); 
            request.getRequestDispatcher("html/WordCount.jsp").forward(request, response);
        }else if(id.equals("2")){
            //高頻詞的統計
            //開始時間
            long startTime=System.currentTimeMillis();
            WordCount wordCount = new WordCount();
            int k=Integer.parseInt(wordnum);
            ArrayList gaopin=wordCount.gaopin(map, k);
            //結束時間
            long endTime=System.currentTimeMillis();
            float excTime2=(float)((endTime-startTime)/1000)*1000;
            request.setAttribute("gaopin", gaopin);
            request.setAttribute("excTime2", excTime2);
            request.getRequestDispatcher("html/WordCount.jsp").forward(request, response);  
        }else if(id.equals("3")){
            //行數統計
            //開始時間
            long startTime=System.currentTimeMillis();
            WordCount wordCount = new WordCount();
            List list=wordCount.statistics(fileName);
            //結束時間
            long endTime=System.currentTimeMillis();
            float excTime3=(float)((endTime-startTime)/1000)*1000;
            request.setAttribute("excTime3", excTime3);
            request.setAttribute("list", list);
            request.getRequestDispatcher("html/WordCount.jsp").forward(request, response);
        }else if(id.equals("4")){
            //寫入文件
            //開始時間
            long startTime=System.currentTimeMillis();
            WordCount cunfang = new WordCount();
            cunfang.cunfang(map);
            //結束時間
            long endTime=System.currentTimeMillis();
            float excTime1=(float)((endTime-startTime)/1000)*1000;
            request.setAttribute("excTime1", excTime1);
            out.print("<script>alert('存儲成功!!');location.href='html/WordCount.jsp'</script>");   
               
            request.getRequestDispatcher("html/WordCount.jsp").forward(request, response);
        }
    }

四:測試截圖

4.1網頁首次顯示

4.2上傳

文件上傳首先須要獲取的是文件的名字,經過文件名來獲取文件的內容,將文件內容存放在TreeMap集合中。web

4.3指定單詞查找

在上傳的文件中查找指定單詞算法

4.4高頻詞

高頻詞的統計是須要指定所須要查找單詞的個數,每一個功能都有時間的統計,須要在調用方法前設置時間,在結束後設置一個時間,先後時間相減。小程序

4.5文本行數與字符數

4.6文件的存放

4.7柱狀圖的顯示

柱狀圖是經過繼承JFrame可視化界面來實現的,這個方法中須要傳遞存放文件的集合和指定單詞的數組,調用java已有的方法來繪製柱狀圖,二維的柱狀圖方法是Graphics2D。數組

五:討論過程與心得(圖片)

在項目開發過程當中,遇到了不少的問題,主要是在前臺與後臺的交互,包括前臺頁面中文件名上傳以後再後臺獲取文件名的問題,在el表達式的操做過程當中數據從servlet中拿不到值,主要在servlet中數據獲取後調用方法飯後的集合類型的數據在jsp中遍歷的空難,經過重定位的方式轉接到jsp頁面,在JavaScript中經過forEach的方式遍歷servlet傳來的數據集合,一些必要的jar包的支持,例如standard.jar,jstl.jar等一些jar包。這次項目中還用到了Tomcat服務器來做爲運行項目的一個小型的支撐服務器。經過結對項目的過程,體會到團隊的重要性,合做工做過程當中會有一些分歧,例如各自見解與想法的不一樣。經過無數次的實驗與測試纔會有此次的項目。服務器

六:展現PSP,這個環節重要的是讓本身看到本身的估計和實際消耗時間,哪一個環節耗時最多,哪一個環節估計和實踐相差巨大?爲何?

PSP2.1 任務內容 計劃共完成須要的時間(min) 實際完成須要的時間(min)
Planning 計劃 6 5
Estimate 估計這個任務須要多少時間,並規劃大體工做步驟 10 14
Development 開發 200 400
Analysis 需求分析 (包括學習新技術) 3 5
Design Spec 生成設計文檔 5 10
Design Review 設計複審 (和同窗一塊兒審覈設計文檔) 5 7
Coding Standard 代碼規範 (爲目前的開發制定合適的規範) 3 3.5
Design 具體設計 14 20
Coding 具體編碼 180 420
Code Review 代碼複審 6 10
Test 測試(自我測試,修改代碼,提交修改) 6 10
Reporting 報告 10 15
Test Report 測試報告 6 15
Size Measurement 計算工做量 5 10
Postmortem & Process Improvement Plan 過後總結 ,並提出過程改進計劃 5 10

項目心得:

經過這次的項目認識到本身代碼的不足以及對以前知識的回顧,以前全部的項目經驗都是經過jsp頁面來寫的,這次因爲時間問題也利用了以前學過的jsp網頁的形式來實現,對於一些知識點有一些忘記,經過這次試驗認識到軟件開發須要時常的練習,不能遺忘,勤動手,多練習一些算法。jsp

查看源代碼:https://github.com/yanglulu-yang/shiyan4

相關文章
相關標籤/搜索