201671030124 閆雪《英文文本統計分析》結對項目報告

博文簡要信息表

項目 內容
這個做業屬於哪一個課程 軟件工程 代祖華老師 博客
這個做業的要求在哪裏 實驗四 軟件工程結對項目
課程學習目標 熟悉軟件開發總體流程,提高自身能力
本次做業在哪一個具體方面幫助咱們實現目標 第一次體驗一個完整的工程

任務一:點評博客

項目 內容
點評博客地址 201671030111 詞頻統計軟件項目報告
github連接地址 源碼
點評內容 在讀完你的博文後,我有一些建議和見解:
1.在博文排版方面,你的結構清晰,內容明瞭,而且使用了博文簡要內容信息表,這點作的很不錯。可是,在排版方面還有待提升的地方,好比圖片的大小不一致,致使給人觀感不是特別的好,能夠在插入圖片前統一圖片的大小。
2.在博文結構方面,你使用了簡化的軟件工程流程(需求分析-功能設計-設計實現-結果展現-代碼展現-總結),在瀏覽博文時,讓人能夠層層遞進的對博文的內容有深刻的瞭解。可是,若是有空閒時間的話但願能夠加一個詳細設計的模塊,這樣讓人對你的軟件開發過程有更加深入的理解。
3.在博文內容方面,你作的是英文文本詞頻統計,根據老師所給的要求,你基本實現了查詢指定單詞,查詢前K個高頻單詞,將全部單詞按字典順序輸出到文本中。可是,在繪製柱狀圖方面,有點投機取巧,並無完整的實現柱狀圖的繪製,你能夠學習一下Java的Graphics類,給你一篇博文做爲參考(http://www.cnblogs.com/donghb/p/7637990.html)。其次,在功能設計模塊,你的內容不太完善,只說明瞭實現什麼功能,可是沒有說明怎樣實現功能,能夠進一步詳細敘述一下。
4.博文結構與PSP中「任務內容」列的關係:你的博文結構和PSP任務內容列的關係比較緊密,基本按照PSP任務內容列的順序編寫了博文.
5.PSP中「計劃共完成須要的時間」與「實際完成須要的時間」兩列數據的差別化分析與緣由探究:經過對比博文中計劃完成時間和實際完成時間,發現實際完成時間比計劃完成時間超出不少,看到你在下面總結了本身在PSP過程當中的困難,主要在於編程能力不強,在開發過程當中花費了較多的時間。其餘的流程花費時間基本和計劃時間差異不大,可是也超出了一些時間,多是因爲初次按照PSP流程進行軟件開發,因此對時間的把握不充分。
6.我在GitHub上下載了你的源碼,編譯運行後,和博文內容貼合,代碼比較規範,結構清晰明瞭,基本實現了老師所要求的功能,可是人機交互方面沒有很好的實現。
點評心得 經過閱讀點評別人的博文,我瞭解到了別人在編寫代碼和博文的優勢,好比博文簡要信息表等。並且在點評團隊成員的博文時,和隊友互相交流了一些問題,好比代碼的規範,博文的規範,使本身有了進步。在此次點評博文的過程當中,我學習了別人的優勢,也經過別人的視角認識到了本身的缺點,讓本身在下次作做業時改正這些錯誤,而且對隊友有了深刻的瞭解。

任務二:結對編程

需求分析

採用兩人合做方式,設計開發一個英文文本統計分析軟件,使之具備如下功能:html

  • (1)實驗2要求的功能;git

  • (2)繪製單詞頻數可視化柱狀圖;github

  • (3)統計該文本行數及字符數;編程

  • (4)各類統計功能均提供計時功能,顯示程序統計所消耗時間(單位:ms);ide

  • (5)可處理任意用戶導入的任意英文文本;學習

  • (6)人機交互界面要求GUI界面(WEB頁面、APP頁面均可);測試

  • (7)附加分功能:統計文本中除冠詞、代詞、介詞以外的高頻詞。編碼

軟件設計

核心功能代碼展現

計時功能設計

Date date1 = new Date();//得到當前時間
                int sum = 0;
                for (int j = 0; j < 100000000; j++) {
                    sum += j;
                }
Date date2 = new Date();//得到當前時間
                System.out.println("程序的執行時間爲:");
                System.out.println(date2.getTime()-date1.getTime()+"ms");

柱狀圖的實現3d

//繪製詞頻的柱形圖
        public main(){
            super();
            setTitle("單詞的詞頻統計圖");
            setBounds(Count.length, 200, 450, 450);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        @Override
        public void paint(Graphics g){
            int Width = getWidth();
            int Height = getHeight();
            int leftMargin = 50;
            int topMargin = 50;
            Graphics2D g2 = (Graphics2D) g;
            int ruler = Height-topMargin;
            int rulerStep = ruler/20;
            g2.setColor(Color.BLACK);//繪製黑色背景
            g2.fillRect(0, 0, Width, Height);//繪製矩形圖
            g2.setColor(Color.LIGHT_GRAY);
            for(int i=0;i<rulerStep;i++){
                g2.drawString((400-20*i)+"個", 8, topMargin+rulerStep*i);//繪製Y軸上的數據
            }
            g2.setColor(Color.WHITE);
            int m=0;
            for(int i = 0;i<Count.length;i++){
                int value = WordsCount.get(Count[i]);
                int step = (m+1)*40;//設置每隔柱形圖的水平間隔爲40
                g2.fillRoundRect(leftMargin+step*2,Height-value, 40, value, 40, 10);//繪製每一個柱狀條
                g2.drawString(Count[i], leftMargin+step*2, Height-value-5); //標識每一個柱狀條       
                m++;
        }
    }

選擇文件

canner in = new Scanner(System.in);
        System.out.println("請輸入讀取文件的文件名:");
        String line= in.nextLine();
        File file = new File(line);
        InputStreamReader is = new InputStreamReader(new FileInputStream(file), "utf-8");//將字節流轉換爲字符流
        BufferedReader buff = new BufferedReader(is);//提供通用的緩衝方式文本讀取
        List<String> list = new ArrayList<String>();//list中只存放純單詞文本
        String readLine = null;//單詞列表初始爲空
        while((readLine = buff.readLine())!=null){
            String[] WordsArr = readLine.split("[^a-zA-z]");
            for(String word:WordsArr){
                if(word.length()!=0){
                    list.add(word);//將截取後的純單詞放入list
                }
            }
        }
        buff.close();

程序運行

高頻詞查詢

指定單詞查詢

按字典順序輸出

查詢行數及字符數

GitHub上傳了三次過程代碼,按照1,2,3的順序,由最初的代碼,過程當中修改的代碼,最終的代碼組成。

結對過程

  • 咱們在實驗二的基礎上,分析了還需實現的功能。

  • 咱們分開實現了文本行數和字符數和計時功能,我負責計時功能的實現。

  • 最後的GUI界面由咱們兩人共同編寫。

PSP流程

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

結對編程的總結

我認爲兩人合做真的可以帶來1+1>2的效果。由於一我的在編程時,總會有思惟枯竭的時候,兩我的的互相合做可使開發的過程卡殼時間不過久。而且能夠及時發如今代碼編寫過程當中的錯誤。此次結對編程讓我意識到在編寫代碼的過程當中和他人交流的重要性,不能本身鑽進死衚衕。別人也許能給本身提供一種新的思路。在之後的編程過程當中,我和隊友準備再次使用結對編程,讓編寫軟件的過程更順暢。

Github源碼地址

github源碼

相關文章
相關標籤/搜索