2020軟件工程第一次個人編程作業


這個作業屬於哪個課程 https://edu.cnblogs.com/campus/fzu/SE2020
這個作業要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2020/homework/11167
這個作業的目標 學習解析 Json 文件,以及熟悉 GitHub 的使用
學號 031802539

PSP 表格

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

解題過程

  • 分析需求:解析 Json 文件,統計用戶或項目發生的某種事件的數量
  • 編碼分析:查找資料,了解 Python 如何解析 Json 文件,以及如何實現命令行參數
  • 測試結果:利用老師發的腳本進行本地測試
  • 提交到 GitHub 運行測試

代碼組織思維導圖

代碼說明

初始化

def read_json(path):
    filelist = os.listdir(path)#讀取文件列表
    f2=open('data.json','w',encoding=> 'utf-8')
    for file in filelist:#讀json文件
        pathname=path+'\\'+file
        with open(pathname,encoding='utf-8') as f:
            for line in f:
                f2.write(line)#寫入data.json
    return

命令行參數設置

opt,arv= getopt.getopt(sys.argv[1:],'i:u:r:e:',['user=','repo=','event=','init='])

遍歷計算結果

def caculate_ans(data,username,repo,event):
    ans=0
    for da in data:
        if not len(username)==0:#判斷有無username
            if not username==da['actor']['login']:
                continue
            else:
                pass
        else:
            pass
        if not len(repo)==0:#判斷有無repo
            if not repo==da['repo']['name']:
                continue
            else:
                pass
        else:
            pass
        #判斷項目
        if da['type']==event:
                ans=ans+1
        else:
            pass
    return ans

單元測試截圖

本地測試程序

示例程序執行結果

我的程序執行結果

GitHub 運行測試結果

單元測試覆蓋率及性能測試

單元測試覆蓋率

測試過程

測試結果


利用 coverage 工具統計單元測試覆蓋率,用給出的測試腳本進行測試,可以看到覆蓋率有92%。

性能測試




性能優化

  • 想用多線程優化代碼,這部分還在碼中...
  • 用正則解析代替 Python 自帶的 Json 庫優化代碼性能。
  • 優化計划:
    1、把初始化的文件分開儲存,在后續計算結果的時候利用多線程優化。
    2、用正則解析 Json。

代碼規范鏈接

迭代過程

1、學習單一的 Json 解析
2、學習命令行參數
3、兩個功能融合,以及調試代碼
4、測試有無 Bug
5、改進代碼保證結果正確
6、代碼格式整理

困難及辦法

(一)

  • 花了一下午時間才弄懂解析 Json 文件,用 Python 的 Json 解析語句一直報錯。
  • 看了一些博客發現博客里用來示例的 Json 和給出的文件里的不一樣,文件里的應該逐行解析。

(二)

  • 命令行參數不太懂,原來只會用 sys 模塊。
  • 網絡檢索,發現還有支持短選項和長選項的 getopt 模塊。

(三)

  • 不懂如何初始化后 data 參數保持不變。
  • 看了老師的實例發現是將解析好的 Json 重新寫入一個文件中,在查詢的時候再進行對新建文件的解析。

(四)

  • Python 的單元測試覆蓋率要計算工具 coverage 進行統計。
  • Python 的性能測試也用 cProfile 解決。

(五)

  • 利用對 Python 進行優化有點困難,以前只用過 Java 的多線程,而且好像 Python 的優化效果也不是很好。

(六)

  • 使用 Git 控制版本的問題用 PyCharm 解決。

總結

  • 動手編碼前的計划是很重要的,非常影響效率。
  • 學習的技能:
    1、Python 關於 Json 的解析
    2、Python 命令行參數
    3、Git 的使用
    4、Python 的單元測試覆蓋率計算
    5、Python 的性能測試
  • 檢索分析是一項很重要的能力

參考資料/博客


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM