提問回顧與個人總結
經過了一學期的軟件工程的學習, 我對於軟件的開發和協作流程有了新的認識, 因此寫下這篇博客來回顧一學期的學習。
項目 | 內容 |
---|---|
這個作業屬於那個課程 | https://edu.cnblogs.com/campus/buaa/BUAA_SE_2020_LJ |
這個作業的要求在哪里 | https://edu.cnblogs.com/campus/buaa/BUAA_SE_2020_LJ/homework/10822 |
我在這個課程的目標是 | 清晰職業發展規划, 學習領先的軟件開發方法 |
這個作業在哪個具體方面幫我實現目標 | 回顧了之前學到的知識點, 對未來有更清晰的認識。 |
作業正文 | 如下 |
1. 對以前問題的回答
-
回歸測試
在以前的博客中, 回歸測試問題 , 我曾問過這樣的問題
我有一點疑問, 新的版本的軟件可能在新加的部分有缺陷, 也可能是因為破壞了以前的功能, 或者是二者鏈接起來出了問題, 而要檢測這樣的bug需要跑所有的測試, 這樣是否會有很大的時間成本開銷? 是否有好的方式能夠把新增的代碼單獨測試? 以及用更通用的測試去驗證流程的正確性?
之前不是很理解回歸測試的作用, 經過了幾輪軟件工程的開發, 我對於回歸測試的重要性有了新的理解。 在我們的軟件開發中, 有一次后端因為添加了新的接口, 導致了老接口的權限出了問題, 花了很長時間才修復了bug, 從那之后, 我們很注重回歸測試的流程, 添加新功能的同時保證了舊功能的正確性。
-
敏捷開發
在以前的博客中, 敏捷開發, 我曾問過這樣的問題
請問在敏捷開發中, 什么樣的設計模式和軟件架構能夠適應敏捷開發的流程? 在招聘中, 如何判斷一個成員是否能夠勝任敏捷開發的工作?
經過了一學期的軟件工程的學習和實習, 我對該問題有了更深入的理解。 在實際的軟件工程中, 如果想要進行敏捷開發, 一定要注重軟件架構的設計, 否則每次開完stand up meeting, 新添加功能的時候會很困難。 在設計軟件的時候, 要把模塊的功能盡量細化, 千萬不要把所有內容堆疊到一個函數內, 否則很難修改, 實現高內聚低耦合的架構更時候軟件開發。 在招聘中, 如果想要判斷一個成員是否能夠勝任敏捷開發工作, 首先要確保該成員有扎實的數據結構和算法知識, 之后可以采用漸進式的面試方式, 不斷添加功能看該成員能否在短時間內設計好框架, 實現新功能。
2. 產生的新問題
在學習中, 我也產生了一些新的問題。
比如
- 如何針對特定的團隊, 制定軟件開發流程
- 在軟件開發的過程中, 如何更好地解決成員之間的代碼開發沖突
3. 軟件工程中學到的知識點
-
需求
學習了NABCD分析, 在討論中尋找用戶的需求, 針對痛點設計軟件。
-
設計
設計主要分為兩方面, 功能設計和技術規格設計。 功能設計需要繪制原型圖, 對整個軟件操作的流程有一個大概的認識, 列出軟件的交互邏輯。 技術規格需要對軟件使用的編程語言和編程框架進行約定, 指定可行的方案和優化方向。
-
實現
學習django后端開發, 通過python來實現一套Restful接口, 實現前后端分離的設計
-
測試
coverage自動化測試工具, 回歸測試, 代碼覆蓋率。 在每次代碼提交復審前先進行回歸測試
-
發布
發布的時候需要收集用戶的反饋, 進行推廣。
-
維護
根據用戶反饋修復bug, 指定下一階段的sprint目標, 維護mysql數據庫。
4. 理解和心得
4.1 個人項目
個人項目是實現一個交點求解的程序, 這個項目主要是讓人熟悉一些個人軟件的開發流程, 拿到任務后進行軟件的架構設計, 查資料思考算法, 最后實現, 測試, 性能分析, 用github提交。 整體來看, 這個項目並不是很難, 但是讓新接觸軟件工程的同學對個人流程有了基本的認識。
4.2 結對項目
結對編程項目是很有趣的體驗, 這個項目能讓人學會如何進項小范圍的, 兩個人的軟件開發合作, 為之后的團隊項目搭好基礎。 這個項目用到了模塊的封裝, 編程動態庫, 以及使用MFC開發GUI, 兩個人一起一個人當領航員, 一個人當駕駛員, 可以互相找bug和代碼中的問題, 提升編程水平。 這次項目我個人的體會是, 雖然結對編程能夠互相幫助, 但是這種開發方式是比較低效的, 一個人的工作兩個人同時做的成本很高, 在真實的軟件開發中不太實用。
4.3 團隊項目
團隊項目帶給我的是一次比較完整的軟件工程體驗, 從討論選題, 分析不同用戶的需求, 再到設計, 技術的選擇, django實現, 單元測試, 發布, 維護, 一個人見從雛形到成熟的整體流程是比較完整的。 我們采用了github來管理代碼, 用看板, issue, 燃盡圖的方式來控制進度, alpha階段主要的任務是把軟件搭起來, 能夠使用, beta階段進行了一系列的優化。 我負責的部分是django rest后端api的開發, 需要給前端一套restful的api, 管理用戶的數據。 我覺得在團隊項目中, 團隊整體需要有一個完善的開發流程, 比如在stand up meeting討論要sprint的目標, 指定目標后把任務分給個人, 提issue, 然后各自寫各自的代碼, 提PR, 代碼復審, 測試, 關issue, 對接。 如果所有團隊擁有很高的軟件開發素質並且遵循這套流程的話, 那么團隊的開發是很高效的。 團隊項目是需要多人合作來完成的, 因此團隊流程這件事情給我留下的印象比較深。最后, 總結下敏捷開發的方式, 這學期也在校外實習, 公司用的也是敏捷開發的流程, 和我們的敏捷開發的流程還是有些不同的, 公司的stand up meeting沒有那么頻繁, 一般都是和自己組內的人進行溝通, 而且需求的文檔和寫代碼前的設計文檔是比較完備的, 因此也不需要太多的后續溝通。 同時, 我個人感覺公司的CICD和代碼復審要比我們個人的團隊成熟, 有更多年經驗的工程師來給我的代碼架構和性能提意見, 我覺得在開發中這一點是很重要的, 一定要有有經驗的人去帶, 要不很容易陷入低效代碼重復編寫的循環。