個人總結
回答自己的問題
以下為當時提出的五個問題與回答
Q1 : 個人技術和流程
來自第2章 p36
PSP有以下的特點:
- ...
- PSP依賴於工程輸入數據,記錄工程師的各項活動,這本身就需要不小的時間代價
- 如果數據不准確或者有遺失,怎么辦?讓工程師編造一些?
- 如果一些數據不利於工程師本人(例如:花很多時間修改缺陷),我們怎么才能保證工程師願意如實地記錄這些數據呢?
我的問題是,PSP是否不適合學生?
正如書中所言,PSP這一模型在實施的時候似乎有一些困難的地方,尤其是對於學生來說,例如:
- 數據如何才能較為精確的獲取到
- 各個階段之間的分界點不明確
- 學生的時間比較分散,所以很可能會出現學生利用了好幾塊分散的時間才做完了一個階段的事情,那么這樣子又該如何統計呢?顯然這之間不能簡單地線性相加,例如,我要設計接下來一個項目的各模塊接口。我花了三天沒課的上午在onenote上寫好了文檔,但是實際上從我開始准備寫文檔那一刻起,我的腦中就開始構思各模塊的接口之間的關系了,可能在某一節無聊的課堂上,也可能是在食堂里吃飯的時候...對於經常沒有完整時間塊的學生來說,PSP的數據很難獲取到
- 文中所舉例舉例的工程師的問題當然同樣也適用於學生身上
問題提出的原因是與我在日常學習生活中的經驗矛盾
回答
現在認為PSP適合學生,但在實施上是有一些問題,之前提出的問題都發生了,統計時間的時候確實很麻煩,最后只能采用模糊估計的方式
Q2 :兩人合作
來自第4章 p87
如何結對編程
- 駕駛員:寫設計文檔,進行編碼和單元測試等XP開發流程。
- 領航員:審閱駕駛員地文檔;監督駕駛員對編碼等開發流程的執行;考慮單元測試的覆蓋率;思考是否需要和如何重構;幫助駕駛員解決具體的技術問題。領航員也可以設計TDD中的測試用例
- ......
我認為,結對編程可能在現今的大學環境下難以發揮效果。
首先看到書中關於結對編程的例子,一般都是公司內部的兩個工程師,二者同為一家公司的工程師,那他們之間一般來說技術、關於技術的思想等等就不會差距太大,而這個技術差距恰恰是學生之間和工程師之間的不同之處。比如說用0到10的數字表示一個人對有關結對編程中使用技術的掌握程度,兩個工程師是4和7,而學生之間甚至可能出現0和1的情況(沒有其它人比學生更了解學生,作為計算機學院的學生,四年下來連要求的某些編程語言的基本語法都沒有學會的也不是沒有)。這樣的情況下,根本沒法結對,別說設計單元測試了,可能連表述出來的設計需求都聽不懂。
問題出發點同樣是與學習環境中的經驗不符。
回答
結對編程確實在大學中可能難以發揮效果,不過鍋在學校和學生自身上,0和1的問題都是學生自身未盡到學生的職責所導致的。
Q3 : 實戰中的軟件工程
來自第7章 141
保持敏捷,預期和適應變化......
以及 第3章 p53
“過早優化是一切罪惡的根源”......
當我看到敏捷的思想的時候,就回想起了在本書前面看到的過早擴大化/泛化等的問題。前者的要點是:要預料變化,適應變化,對變化做好准備;而后者的要點是:不要過早地泛化......我感覺這兩種思想似乎有着沖突的地方,問題是該如何在二者在過早泛化和提前為變化做好准備之間找到平衡點呢?
舉個更具體的例子,我要用C++寫一個web/linux/windows/iOS/android上都可以使用的個人事項管理軟件。我打算從windows客戶端開始設計,在設計其中一些方法的時候,我是應該將函數全部泛型化,抽取出變化的部分全部設置成參數?還是先將這一平台的當前需求以合理的資源和算法結構等先設計實現出來呢?
回答
根據實際項目的期限和目標等確定,有經驗作為指導才能做好決定。
Q4 :軟件測試
來自第13章
章節中的各種測試技術的應用場景......
在閱讀軟件測試等章節的時候,我認為確實單元測試和軟件測試等等都是十分有必要的,那么一個GUI軟件該如何更好地測試呢,或者說GUI軟件的自動化測試有沒有必要呢?
這是我找到的部分觀點:
在我看來,GUI測試由於其變化可能性大,測試(覆蓋率/成本) 率高,所以難以進行大規模的自動化測試,就像某前輩所說的
keep the UI very, very thin—all it does is forward user gestures to some underlying code, and display the results. No logic. Definitely no database access.
UI就該做UI的事情,並且只做那件事
在測試問題上,該如何找到最佳的GUI測試方案呢
回答
還是要根據項目規模和期限資源等適當抉擇,例如:對於將會持續變化的部分,自動化UI測試將是不現實的,也是在資源人力上無法接收的。而如果是變化不大的部分可以考慮適當的自動化測試(一般沒有)。
Q5 : 人,績效和職業道德
來自第17章 p411
軟件工程師的職業道德
其中有一個規范:
原則1 公眾
軟件工程師的行為應與公眾利益一致
原則2 客戶與雇主
軟件工程師應以其客戶和雇主利益最大化的方式做事,與公眾利益保持一致
......
看到這種一條一條的的准則,就會產生疑問:
- 如何衡量是否與公眾利益一致
- 若公眾利益與雇主利益不一致,甚至互斥怎么辦
舉個例子
某大廠開發的一款即時通訊軟件,在發布后由於其出色地整合了許多同類應用的優秀功能而大火。之后雇主(公司老板)要求工程師設計出一套付費vip的服務,對於使用該應用的用戶來說,這當然不利於他們的利益,但是從雇主的角度來說,他可以憑借該應用的巨大用戶基數怒賺一筆
回答
審視自己的內心:你為何從事這個職位。
如果為了生存那只能維護自己的利益,尊重雇主的利益。
如果為了興趣或是信仰啥的,該離開就離開,不要為虎作倀。
再提問題
Q1:如何做好項目估計
經過Alpha階段,發現項目開發的過程中總是可能會出現突然情況,影響項目的進度,甚至導致項目無法完成,那么如何在項目准備階段有效的考慮到這些變量並更准確地做好項目估計呢?
Q2:對於項目中成員水平不夠,無法參與項目開發的問題
團隊已經組建好了,項目開始后,發現有一些隊友的水平無法有效的完成分配的任務,這種情況下,作為PM該如何處理?
Q3: 軟件工程課程究竟學習的是什么?
在本課程中,我們每個同學都分擔了不同的角色,那么我們經過這個階段的學習,對於大部分人來說,都是根據PM的分配完成自己的任務,那么軟工課程主要學習的是什么呢?
Q4:PM需不需要懂開發
一方面,不懂開發的PM在與開發交流的時候難免會有代溝,而另一方面,掌握太多開發細節的PM將會在管理的時候陷入細節,影響自身的判斷。
Q5: 軟件工程對於要考研和研究學術的學生有什么幫助?
軟件工程本身作為工程,當然絕大部分都是工程相關的知識,那么這些知識對於哪些要研究學術、要考研的同學有什么幫助呢?