1. 程式人生 > >軟工實踐結對第二次作業

軟工實踐結對第二次作業

任務 mat blog cmp ont 數據 .cn 寫博客 pre

作業鏈接

  • 作業博客鏈接 https://edu.cnblogs.com/campus/fzu/FZUSoftwareEngineering1816W/homework/2160

  • Github鏈接 https://github.com/zhoujingping/PairProject-C

  • 031602323 廖鈺萍
  • 031602330 蘇芳鋥

分工

  • 廖鈺萍:編寫爬蟲代碼,更新WordCount代碼
  • 蘇芳鋥:編寫博客

PSP表格

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

解題思路與實現

  • 爬蟲:利用Python和scrapy框架編寫爬蟲代碼
  • 代碼組織與內部實現
    技術分享圖片

  • 關鍵部分

int Paper::cmp(Word W1,Word W2)
{
    return W1.count > W2.count;
}

void Paper::Vsort()
{
    sort(Title.begin(), Title.end(), cmp);
    sort(Abstract.begin(), Abstract.end(), cmp);
}

int Paper::getgeneral_wordCount(int weight)
{
    for (vector<Word>::iterator it = Title.begin();it != Title.end();it++)
    {
        general_wordCount = general_wordCount + it->count * weight;
    }

    for (vector<Word>::iterator it = Abstract.begin();it != Abstract.end();it++)
    {
        general_wordCount = general_wordCount + it->count;
    }
}

附加題設計與展示

  • 從網站爬取論文標題,發表日期和論文pdf鏈接,對論文按日期進行分類,生成表格,可通過鏈接轉到pdf頁面
  • 通過爬取的日期計算每個月份出現的頻度,得到論文發表時間的分布圖

關鍵代碼解釋

def parse_detail (response):
    item = CvprItem()
    item[‘Title‘] = response.xpath(‘//div[@id="content"]//dd/div[@id="papertitle"]/text()‘).extract()
    item[‘Abstract‘] = response.xpath(‘//div[@id="content"]//dd/div[@id="abstract"]/text()‘).extract()

    yield item
   def start_requests(self):
        url=‘http://openaccess.thecvf.com/CVPR2018.py‘
        yield Request(url,headers=self.headers)

    def parse(self,response):
        links= response.xpath(‘//div[@id="content"]//dt//a/@href‘).extract()
        for link in links:
            link = ‘http://openaccess.thecvf.com/‘+link
            yield Request(link,headers=self.headers,callback=parse_detail)

遇到的問題

  • 最初的wordCount程序數據結構設計不合理,導致後來修改花了許多時間

軟工實踐結對第二次作業