軟件工程基礎第四次做業:結對編程

軟件工程基礎第四次做業:結對編程

課程 https://edu.cnblogs.com/campus/xnsy/Autumn2019SoftwareEngineeringFoundation
做業要求 http://www.javashuo.com/article/p-zywsxnlu-cu.html
GitHub地址 https://github.com/ITBuilting/mytestgit/tree/master
夥伴學號 201831061201
夥伴博客地址 https://www.cnblogs.com/mxrroy/

1.本課程Fork倉庫的Github項目地址

https://github.com/ITBuilting/mytestgithtml

2.PSP表格

  PSP2.1 Personal Software Process Stages 預估耗時(分鐘) 實際耗時(分鐘)
Planning 計劃 60 30
· Estimate · 估計這個任務須要多少時間 2400 2000
Development 開發 800 600
· Analysis · 需求分析 (包括學習新技術) 180 150
· Design Spec · 生成設計文檔 60 60
· Design Review · 設計複審 (和同事審覈設計文檔) 50 60
· Coding Standard · 代碼規範 (爲目前的開發制定合適的規範) 30 30
· Design · 具體設計 120 100
· Coding · 具體編碼 540 300
· Code Review · 代碼複審 120 120
· Test · 測試(自我測試,修改代碼,提交修改) 240 200
Reporting 報告 30 40
· Test Report · 測試報告 30 60
 · Size Measurement · 計算工做量  30  40
· Postmortem & Process Improvement Plan · 過後總結, 並提出過程改進計  30  60
  合計   2320     1850  

3.需求分析:

實現一個命令行程序,輸入文件名以命令行參數傳入。
則會統計input.txt中的如下幾個指標
1.統計文件的字符數:
2.統計文件的單詞總數,單詞:至少以4個英文字母開頭,跟上字母數字符號,單詞以分隔符分割,不區分大小寫。
3.統計文件的有效行數:任何包含非空白字符的行,都須要統計。
4.統計文件中各單詞的出現次數,最終只輸出頻率最高的10個。頻率相同的單詞,優先輸出字典序靠前的單詞
5.按照字典序輸出到文件txt:
輸出的格式爲
characters: number
words: number
lines: number
: number
: number
圖示:
c++

4.實現計劃

1.實現的準備工做

使用語言:由於學習c/c++較多,選擇使用C++語言編寫程序
使用工具:vs2017
制定編碼規範:
1.代碼縮進:通用vs2017的代碼縮進格式
2.註釋:使用C/C++標準的代碼或者文檔註釋,且每條代碼後加上註釋說明
3.命名規範:採用」駝峯式「命名規則,本身命名內部使用的變量+my
4.判斷語句的條件不能複雜超過三個
5.bool類型判斷使用is+形式定義git

2.具體設計

從需求分析得出須要使用文件讀取,通過反覆考證,使用最簡單的開發方式——使用庫函數。
圖示:
github

3.具體實現代碼

#include "pch.h"

#include <fstream>
#include <map>
#include <string>
using namespace std;

bool isdigit(char ch)
{
    return (ch >= ' '&&ch <= '9');
}



int main(void)
{
    
    
        map<string, int> words;  //轉int類型
        ifstream fin("input.txt");//要統計的文件
        ofstream fout("output.txt");//結果存放在output中
         //------------
        string str;
        int wordCount = 0;
        string d;
        int charCount = 0;
        //------------

        if (!fin || !fout)
        {

            exit(1);
        }
        while (fin.good())
        {
            fin >> str;
            words[str]++;
        }
        fin.close();
        fin.open("input.txt");
        while (getline(fin, d)) //以行爲單位讀入文件
            charCount += d.size(); //累計字符數
        fin.close();

        for (map<string, int>::iterator mit = words.begin(); mit != words.end(); ++mit)
        {
            if (!isdigit((mit->first)[0]))
            {
                fout << "<" << mit->first << ">" << ": " << mit->second << endl;
                ++wordCount;
            }
        }
        fout << "wordTotal: " << wordCount << endl;  // 文件輸出單詞個數
        fout << "charTotal: " << charCount << endl;   //文件輸出字符個數
        fout.close();
    
    return 0;

}

運行截圖1:

運行截圖2:
編程

運行截圖3:
函數

4.測試

測試截圖:

迴歸測試截圖:
工具

5.代碼複審和性能改進

經過與夥伴的屢次交流改進,對代碼進行了複審。對讀入字符代碼實現部分進行了改進:統一使用系統庫的有關文件的函數,對代碼量達到了控制,簡便明瞭。

在改進後的代碼性能方面獲得了大大提高,減小使用指針帶來的代碼混亂和指向不明難以審查的困境,使用庫函數,使性能有所提升,可是因爲系統的差別不大,沒法顯示出較大差距的性能提升。
性能

6.提交github

圖示:
如下是本人提交github的心路歷程,因爲第二次做業完成狀況太差,致使不會使用git提交代碼,本次與夥伴進行了深入的學習,提交上了,可是本次命名仍是未完成好。
學習


7.結對編程

圖示:
測試

相關文章
相關標籤/搜索