第2次軟工做業要求程序員
瞭解結對編程與我的編程的異同,進一步訓練對程序進行設計和測試的能力github
結對項目一算法
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)
咱們大約在性能改進上花費了4小時進行學習和代碼修正。對於有環的狀況咱們採用DFS的方法進行遍歷搜尋,對於無環的狀況咱們採用拓撲排序+動態規劃的方法減小搜尋次數,從而提升性能。微信
契約編程的核心便是與軟件相關的不一樣角色須要有不一樣的約束。在這一點上,咱們會對輸入進行仔細地判斷,對於不正確的內容咱們會報出異常。在輸出方面咱們始終保持輸出形式的一致性。框架
測試覆蓋率截圖:
模塊化
本程序中所須要處理的一場主要包括:
· 文件操做異常
· 輸入指令不規範異常函數
功能:
· 讀入指定路徑文件中的內容(單行)
· 輸入自定義的內容(多行)
· 提供計算方式的選擇:-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;
首先放出一張結對照片:
咱們兩人平時是以微信做爲通信方式,每隔兩天會進行線下的見面、技術研討、設計規劃和代碼複審。因爲咱們本來就相互認識,而且兩人都能相互理解與體諒,因此在溝通交流方面進行得至關順利,不論是在線上仍是線下,一旦發現問題,咱們老是能很快地進行討論,並各處雙方協調的解決方案。最開始的時候咱們對項目進行設計和分工,兩人會較爲獨立地完成本身的任務;但隨着項目逐漸變複雜,咱們會更爲主動地交流,積極進行共同的代碼複審。這是一次愉快且有收穫的結對編程經歷。
結對編程是極限編程的形式之一,根據老師上課所講述內容,其內涵在於將代碼複查實施到極致,這使得代碼質量會大幅提高。除此以外,對於程序員來講,結對編程的方式可以提高他們的信心、動力、知足感和人際關係;對於組織來講,結對編程有利於知識的傳遞和人員的流動。
結對編程在不一樣的條件下也會顯現出一些劣勢,如當兩人水平差距較大時可能會出現難以合做的問題,當任務量較小同時質量穩定性又較高時,兩人協做可能會出現時間和生產力的浪費
彭一夫:優點在於注重細節,對總體要求和結構把控好,合做態度好;劣勢在於編程水平較差 吳昊:優點在於能對算法優化進行深刻研究,合做交流態度好;劣勢在於對總體構架能力稍弱