經(jīng)過了一學(xué)期的《軟件工程》課程,通過課上的學(xué)習(xí)和項(xiàng)目的實(shí)戰(zhàn),我對軟件工程的概念和方法有了深刻的認(rèn)識,也在小組4個人的共同努力下,完成了一個有可能上線為許多人使用的琴房預(yù)約系統(tǒng)。我在這門課上投入了非常多的時間和精力,超過了之前上過的所有課程,也有許多收獲,以下是我對一學(xué)期課程的總結(jié)。
一、需求工程的重要性
在以往所有的大作業(yè)中,我們開發(fā)面向的都是大作業(yè)要求、助教和老師,需求在作業(yè)要求中已經(jīng)確定。不過這次大作業(yè),需要我們對給定的題目進(jìn)行調(diào)研,對需求進(jìn)行建模,撰寫用戶故事和需求文檔。我們需要決定自己需要實(shí)現(xiàn)的功能,最終的目標(biāo)不再是簡單地完成一個作業(yè),而是要完成一個系統(tǒng),一件產(chǎn)品,就像一個創(chuàng)業(yè)公司一樣,不光是技術(shù)能力,更重要的是需要把握用戶的需求,才能讓自己的產(chǎn)品在市場上有競爭力,在激烈的斗爭中生存下來。
當(dāng)我們開發(fā)的是一項(xiàng)規(guī)模龐大的產(chǎn)品時,簡單的口述甚至是文字描述難以向其他人描述清楚需求,必須通過規(guī)范的文檔,才能讓團(tuán)隊(duì)中的其他人特別是開發(fā)人員理解清楚所要實(shí)現(xiàn)的功能。事實(shí)上,需求文檔在我們項(xiàng)目的開發(fā)過程中起到了很重要的指導(dǎo)作用,例如長期預(yù)約這個功能點(diǎn),助教在項(xiàng)目開始并沒有提到,而是通過我們對藝教中心琴房實(shí)地的調(diào)查才了解到的,最終也轉(zhuǎn)化為我們的項(xiàng)目的一個亮點(diǎn)。
二、過程管理的重要性
首先,要想開發(fā)一個出色的產(chǎn)品,一個優(yōu)秀的團(tuán)隊(duì)是不可或缺的。很榮幸能和三位認(rèn)真負(fù)責(zé),精益求精的同學(xué)一起合作,小組內(nèi)分工明確,各司其職,氛圍融洽,難忘在 608 一起度過的一個個夜晚。
其次,對代碼的管理十分重要。首先是 Git 的使用,之前個人作業(yè)或者簡單的小組合作作業(yè),對代碼的管理或許顯得不那么重要,但在本次項(xiàng)目持續(xù)整個學(xué)期的開發(fā)和上萬的代碼量、繁多的功能點(diǎn)面前,就必須有規(guī)范的代碼管理,否則會使開發(fā)變得極其混亂。在今后的工作當(dāng)中,代碼管理是100%需要做的事,感謝本次項(xiàng)目開發(fā)讓我對代碼管理,包括代碼管理工具的使用得到了很大的鍛煉。
除此之外,測試也是為了保證產(chǎn)品質(zhì)量所必須花很大功夫做的事。在本次項(xiàng)目中,我們每個人對自己所實(shí)現(xiàn)的功能都做了單元測試,特別是后端,之后大家一起做了功能測試,還進(jìn)行了鎖的測試和性能測試。在項(xiàng)目開發(fā)的初期,我們并沒有做很多測試,更多的關(guān)注點(diǎn)放在了盡快開發(fā)新功能上。隨著代碼量的增加,可能出現(xiàn)的 bug 也越來越多,調(diào)試也變得更加困難,不經(jīng)過充分的測試,很難保證函數(shù)和功能的正確性。事實(shí)上,我更希望能一邊開發(fā)一邊寫單元測試,但由于精力有限,只能先保證開發(fā)的進(jìn)度,但我總是不放心,也的確出了不少 bug。我現(xiàn)在仍然不敢保證我們的系統(tǒng) 100% 不會有 bug,但測試過程中的確發(fā)現(xiàn)了許多問題,也都進(jìn)行了修復(fù)。
還有一點(diǎn)是代碼的可維護(hù)性,可拓展性。面對復(fù)雜多變的需求,需要從系統(tǒng)設(shè)計(jì)開始,到數(shù)據(jù)庫的設(shè)計(jì),到功能的實(shí)現(xiàn),都要保證可維護(hù)性和可拓展性。在我們的開發(fā)過程中,為了適應(yīng)新功能,數(shù)據(jù)庫和接口的設(shè)計(jì)都發(fā)生了許多次變化。我們無法預(yù)知未來的所有需求,就必須要早做準(zhǔn)備,以免大規(guī)模重構(gòu)系統(tǒng),損失大量時間的同時,也可能產(chǎn)生新的 bug。
三、個人能力的成長
- 代碼能力得到巨大提升,對大型項(xiàng)目的開發(fā)不再感到恐懼。
- 能夠熟練使用 Node.js 和 Koa,不過在項(xiàng)目中沒有開發(fā)前端,因此前端開發(fā)的能力沒有鍛煉,不過也在其他三人的開發(fā)過程中學(xué)到了不少東西。
- 從持續(xù)集成實(shí)驗(yàn)到本項(xiàng)目,學(xué)會了如何編寫單元測試
- Git 的使用更加熟練
- 數(shù)據(jù)庫的使用
- 寫各種文檔的能力
- 團(tuán)隊(duì)合作
- 。。。。。。
最后,感謝老師一學(xué)期的指導(dǎo),感謝助教的努力,感謝優(yōu)秀的隊(duì)友,這門課上學(xué)到的東西讓我受益匪淺。