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

軟工第五次作業

單詞 遍歷 ont 分析 pla ++ for 過程改進 tle

一、博客鏈接以及Github項目地址

王錦揚的博客地址
何家健的博客鏈接
Github項目地址

具體分工

王錦揚負責解決方法思路的提供,何家健負責具體設計的實現

PSP表格

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

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

1.爬蟲使用

本次作業中論文的爬取我們是用爬蟲工具“後羿采集器”來從網頁上爬取論文題目以及摘要,下圖是爬取論文信息的過程
技術分享圖片

技術分享圖片

但是爬取下來之後,雖然可以導出為txt,但是卻會是不符合要求的,實例如下:
技術分享圖片

所以後來就直接導出為excle:
技術分享圖片

經過手動排版,最後轉換為符合條件的txt形式。
技術分享圖片

代碼組織與內部實現設計

技術分享圖片

說明算法的關鍵與關鍵實現部分流程圖

技術分享圖片

此用來判斷哪一些單詞可以構成詞組
···
if (mm == true)
{
for (i = num - linewordsize; i < num; i++)
{
if (num - i >= m)
{
if (word[i].flag1 == 1)
{
string temp = word[i].content;
for (j = 1; j <= m - 1; j++)
{
if (word[i + j].flag1 == 1)
word[i].content = word[i].content + " " + word[i + j].content;
else if (word[i + j].flag1 == 0)
{
i = i + j; word[i].content = temp; break;
}
if (j == m - 1) word[i].flag1 = 2;
}
}
}
else break;
}
}
···

附加題設計與展示

關鍵代碼解釋

if (mm == true)
        {
            for (i = num - linewordsize; i < num; i++)
            {
                if (num - i >= m)
                {
                    if (word[i].flag1 == 1)//判斷是否為合法單詞
                    {
                        string temp = word[i].content;
                        for (j = 1; j <= m - 1; j++)
                        {
                            if (word[i + j].flag1 == 1)//如果為合法單詞就拼成詞組
                                word[i].content = word[i].content + " " + word[i + j].content;
                            else if (word[i + j].flag1 == 0)//如果不是合法單詞就break,繼續遍歷
                            {
                                i = i + j; word[i].content = temp; break;
                            }
                            if (j == m - 1) word[i].flag1 = 2;//如果構成合法詞組,對詞組的第一個合法單詞做上標記
                        }
                    }
                }
                else break;
            }
        }

性能分析與改進

描述你改進的思路

用數組儲存單詞難以判斷需要多少空間,導致有可能在測試樣例巨大的情況下,導致系統的奔潰,而且運行速度回受到極大的影響,用鏈表可能會好一點

展示性能分析圖和程序中消耗最大的函數

消耗最大的還是main函數
技術分享圖片

單元測試

//判斷不同情況下的不同權值
        if (linewordsize >= 1)
        {
            linenumber++;
        }
        if (d.find("title: ") != string::npos)
        {
            count = count - 7;
        }
        if (d.find("abstract: ") != string::npos)
        {
            count = count - 10;
        }
        if (d[0] >= 48 && d[0] <= 57) { count = count - d.size()-1;}
        if ((d[0] >= 48 && d[0] <= 57) && (linenumber >= 2)) {  count = count - 2; }

貼出Github的代碼簽入記錄

技術分享圖片

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

問題描述

最先是數組的問題,一遇到文章多的情況基本上就會奔潰,然後是如何判斷詞組

做過哪些嘗試

想改為鏈表,但因為代碼比較混亂所以最終只是改變了算法的結構,判斷詞組用了遍歷的方法跟布爾參數同時使用

是否解決

均已解決

有何收獲

多做思考,多做嘗試

評價你的隊友

值得學習的地方

很會刻苦,願意花很多時間在作業上面,對自己的不足會很快意識到並及時解決

需要改進的地方

並沒有

學習進度條

第N周 新增代碼(行) 累計代碼(行) 本周學習耗時(小時 ) 累計學習耗時(小時) 重要成長
1 0 0 18.5 18.5 熟悉Axure的使用方法、對軟件的原型設計有了更深刻的理解
2 286 286 48 66.5 學會了爬蟲工具的使用,對C++string等類的功能有了更深的認識
...

軟工第五次作業