【軟工】第 二 次做業(結對項目)

前言

1.這個做業屬於哪一個課程?

2019春季計算機學院軟件工程git

2.這個做業的要求在哪裏?

第2次軟工做業要求程序員

3.我在這個課程的目標是?

  • 瞭解並學習軟件工程的教學內容,完成課程任務,培養工程化設計和開發軟件的能力。
  • 提高在軟件開發中計劃、管理、測試和維護軟件的能力。
  • 理解團隊與我的編程之間的異同與優劣,培養團隊協做能力。

4.這個做業在哪一個具體方面幫助我實現目標?

瞭解結對編程與我的編程的異同,進一步訓練對程序進行設計和測試的能力github

5.項目Github地址

結對項目一算法

正文

PSP進度管理表格

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

接口設計方法

Information Hiding,信息隱藏。通俗一些來解釋,這便是封裝和不一樣層次的抽象,從頂級的模塊內容進行概念抽象,一直到底層類中成員的訪問性控制進行物理邏輯上的信息隱藏。在本次做業中最重要,最不一樣於以往訓練內容的抽象在於軟件程序的模塊化,咱們但願儘可能保持模塊之間的獨立,減低模塊之間的耦合度,使各個模塊達到一種Loose Coupling的狀態。從模塊這一層次的高度來講,咱們嚴格按照博客中規定的規範進行了接口設計,遵循了一些接口設計的原則,進行了測試,而且保持不一樣模塊僅經過咱們定義的這些模塊進行信息交流。但較爲遺憾的是隨着系統複雜性的增高,咱們在模塊內部耦合性並未保持在一個較低的水平上。編程

計算模塊——設計、實現與獨特性

public int gen_chain_char(string[] words, int len, string[] result, char head, char tail, bool enable_loop)
public int gen_chain_word(string[] words, int len, string[] result, char head, char tail, bool enable_loop)

軟件整體——UML關係圖

計算模塊——性能展現

咱們大約在性能改進上花費了4小時進行學習和代碼修正。對於有環的狀況咱們採用DFS的方法進行遍歷搜尋,對於無環的狀況咱們採用拓撲排序+動態規劃的方法減小搜尋次數,從而提升性能。微信

契約設計編程(Design by Contract)思想實現

契約編程的核心便是與軟件相關的不一樣角色須要有不一樣的約束。在這一點上,咱們會對輸入進行仔細地判斷,對於不正確的內容咱們會報出異常。在輸出方面咱們始終保持輸出形式的一致性。框架

計算模塊——單元測試

測試覆蓋率截圖:
模塊化

計算模塊——異常處理

本程序中所須要處理的一場主要包括:
· 文件操做異常
· 輸入指令不規範異常函數

界面模塊——樣式、設計與接口

界面樣式

界面設計

功能:
· 讀入指定路徑文件中的內容(單行)
· 輸入自定義的內容(多行)
· 提供計算方式的選擇:-w  -c
· 提供是否指定首尾字符的多項選擇(當輸入框中不僅包含一個字符時,取第一位字符)
· 提供是否容許包含隱含環的選項
· 單擊生成後即時於輸出框顯示結果
· 可經過圖形化界面選擇導出文件位置

該界面經過 Windows Form 框架和可視化控件實現。oop

界面接口

GUI對外提供建立GUI界面的接口:

public static void showGUI()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    GUI g = new GUI();
    Application.Run(g);
}

GUI經過調用計算模塊的get_chainByLine函數獲取處理以後的單詞鏈,並予以顯示:

coreBuild core = new coreBuild();
WordChain wc = core.get_chainByLine(textInput, char_h, char_t, b_r, c_wc);
foreach(Word word in wc.GetWordChain())
{
    textOutput += word.Get_allWord();
}
//輸出指結果框
textBox5.Text = textOutput;

其餘——結對過程

首先放出一張結對照片:

咱們兩人平時是以微信做爲通信方式,每隔兩天會進行線下的見面、技術研討、設計規劃和代碼複審。因爲咱們本來就相互認識,而且兩人都能相互理解與體諒,因此在溝通交流方面進行得至關順利,不論是在線上仍是線下,一旦發現問題,咱們老是能很快地進行討論,並各處雙方協調的解決方案。最開始的時候咱們對項目進行設計和分工,兩人會較爲獨立地完成本身的任務;但隨着項目逐漸變複雜,咱們會更爲主動地交流,積極進行共同的代碼複審。這是一次愉快且有收穫的結對編程經歷。

其餘——反思與改進

結對編程優劣

結對編程是極限編程的形式之一,根據老師上課所講述內容,其內涵在於將代碼複查實施到極致,這使得代碼質量會大幅提高。除此以外,對於程序員來講,結對編程的方式可以提高他們的信心、動力、知足感和人際關係;對於組織來講,結對編程有利於知識的傳遞和人員的流動。

結對編程在不一樣的條件下也會顯現出一些劣勢,如當兩人水平差距較大時可能會出現難以合做的問題,當任務量較小同時質量穩定性又較高時,兩人協做可能會出現時間和生產力的浪費

我的優劣

彭一夫:優點在於注重細節,對總體要求和結構把控好,合做態度好;劣勢在於編程水平較差 吳昊:優點在於能對算法優化進行深刻研究,合做交流態度好;劣勢在於對總體構架能力稍弱

相關文章
相關標籤/搜索