問題一:開發成本和産品安全性之間應該如何抉擇?
我在提問中曾經認為,是否實作某個功能是要根據其價值期望(被使用的機率 * 它的重要性)來決定,這也展現在了這學期的團隊項目中。我們最終沒有實作修改密碼的功能,因為它對使用者的重要性并不大,盡管不實作修改密碼的功能會為賬号帶來一定風險,但其實一些核心功能不需要登入也可以使用,賬戶的價值并沒有那麼高,使用者修改密碼的可能性很低。于是我們計劃将精力主要放在對原有功能的擴充,已達到提高使用者量的目的。但我們并不是完全忽視了使用者賬号的安全性,而是先采取了一種成本較低的處理方式,簡單實作一個郵箱認證的功能,若有需要再進行擴充,算是平衡了開發成本與産品安全性。
問題二:單元測試的正确性應該如何保證?是否還需要寫一個單元測試去檢測單元測試呢?
測試應該和需求聯系在一起,需求是怎樣的,就應該怎樣進行測試,不應該涉及過多實作過程中的邏輯部分。
問題三:程式的可擴充性與運作效率應當如何取舍?
跑得快不一定跑得穩。軟體工程不是僅僅做一個小程式,而是會涉及大量的需求變動,是以良好的可擴充性是十分必要的,隻要不是嚴重影響性能,還是應該盡量保證結構的清晰性和靈活性。
問題四:關于代碼規範
我認為代碼規範主要在于保持代碼風格的一緻性,提高代碼的閱讀性,而不是提高編碼的效率。如果是個人項目,自然是可以選用一種舒服的代碼風格,包括goto語句,隻要遵循自己的代碼規範就可以。然而在團隊項目中,個性的代碼風格會導緻不習慣于該風格的人閱讀體驗的下降,影響團隊開發的效率。對于問題中提到的goto語句,雖然正确的使用方式也許不會對破壞代碼的結構,但并不是所有人都習慣于這種書寫方式。是以在個人項目中,是否使用goto語句屬于個人的喜好,但是在團隊項目中就必須要考慮所有組員的情況,采用最普遍的編碼風格。
問題五:是不是一個非團隊,如果能夠實作利益的共同化,就可以變成一個團隊呢?
我認為并不是,因為利益(目标)一緻不是維持一個團隊的充分條件,而是必要條件,因為實作同一個目标是有多種途徑的。我認為一個團隊還需要每名成員有着良好的責任感,以及對彼此的信任、幫助與支援,雖然這些都是建立在目标一緻的基礎上,但是要做到卻很困難。
知識點
1. 需求階段
通過調研等方式了解使用者的需求,同時要着重考慮痛點是什麼,與其它主流軟體的差別是什麼,不然很難取得競争的優勢。
- 團隊項目開始前的選題階段就在思考使用者使用我們産品的理由,一個課程資源釋出的網站相比于課程中心、QQ群等到底好在哪裡。經過了一些思考之後,感覺最需要注重的地方就是“友善”,課程中心需要登入,QQ群中的檔案有時不是永久的資源,而最終實作的資源共享平台無需登入就可以下載下傳,并且也包含了大部分課程的資源,後來還添加了“課程收藏”等功能,相比于課程中心和QQ群确實友善了一些。
2. 設計階段
通過說明文檔與原型圖将腦海中的設計落實到文字與圖像,使思路更佳清晰,同時也為實作做好準備。
- 在個人項目和結對項目中,所有的設計基本都是靠憑空想象,明顯感覺到這種設計方式太耗費精力和時間了。其實設計的過程也是思考的過程,涉及到很多選擇和否定,而将設計落實到文字與圖像其實也是思維過程的具現化,可以提高不少效率。
3. 實作階段
保證文檔的可靠性十分重要,齊全的文檔可以作為實作的依據,提高軟體工程的效率。在配置設定任務的時候也應當明确說明輸入和輸出的格式,明确需求。
- Alpha階段我們配置設定任務的效率非常低,主要原因是需求的不明确,而且有時候想要确定某一功能的具體作用,需要閱讀代碼才能明白一些細節,十分麻煩。Beta階段中在配置設定任務之前都會補充文檔,供開發人員參考,效率确實提高了。
4. 測試階段
針對功能進行單元測試,并通過回歸測試驗證是否存在“倒退”的現象。
- 在上學期的OO課程中,單元測試是在最後幾周講的。此前若幹次作業都是把測試樣例記在一個txt上,時不時就自己測一遍,十分花費時間,以至于到了後來幹脆直接整個做完之後再一起測試,導緻不能及時定位bug出現的原因。在編寫數獨的時候,明顯感受到單元測試是多麼友善,每一次優化之後都能檢測是否影響了正确性,減少了處理bug的花銷。
5. 釋出階段
釋出應當及時,且應當多管道推廣
- Beta階段相比于Alpha階段使用者量上漲的原因之一就是釋出管道增多了,不單單是在朋友圈中釋出,依靠使用者去推廣,而是通過同袍、微信公衆号等平台去推廣,推廣後的幾天裡使用者量增長十分明顯。這讓我感覺到推廣有時并不完全依靠自己的力量,和其它平台進行合作也是很重要的,比如同袍網站,我們使用同袍第三方登入的接口,其實是在幫助同袍進行宣傳,而同時同袍也會向使用者宣傳iCourse,雙方都實作了宣傳的目的。
6. 維護階段
通過建立使用者群和釋出調查問卷擷取使用者回報
- 我們建立了使用者群,使用者遇到問題可以和開發人員一對一進行溝通,這為使用者回報提供了不少便利,同時我們也能更清晰地了解到使用者的真實想法。