楊昕磊
軟件工程(3)這門課可以算是我本科期間至今為止最虐的一門課了尺上。但與此同時(shí)這門課給我?guī)?lái)的收獲和其他課程相比,也不是一個(gè)量級(jí)的日丹。下面我就在本課程中學(xué)習(xí)到的對(duì)大型軟件工程的理解與一些自己想說(shuō)的話兩個(gè)方面作為我個(gè)人總結(jié)的內(nèi)容走哺。
一、大型軟件工程
所謂大型軟件工程哲虾,相比于普通的中小型應(yīng)用來(lái)講丙躏,是一個(gè)功能眾多,內(nèi)部邏輯復(fù)雜的工程項(xiàng)目束凑。軟件工程大作業(yè)便是一個(gè)大型軟件工程晒旅。與其它科目的大作業(yè)不同的是,它不是一個(gè)可以通過(guò)“大學(xué)式敏捷開發(fā)”(通俗的說(shuō)汪诉,就是幾天爆肝)的方式完成的废恋。通過(guò)一個(gè)學(xué)期的大作業(yè)實(shí)踐,我發(fā)現(xiàn)想做好一個(gè)大型的軟件工程扒寄,以下幾個(gè)方面至關(guān)重要:
-
清晰的產(chǎn)品模型規(guī)劃
在開始開發(fā)前拴签,一定要想清楚,需要開發(fā)的這個(gè)項(xiàng)目到底是一個(gè)什么樣的東西旗们,它的功能應(yīng)該包括什么蚓哩,其中哪些是主邏輯部分功能,哪些是拓展功能上渴,你做出來(lái)的軟件需要讓什么人去用岸梨。我們組在開發(fā)過(guò)程中在這個(gè)問題上吃了大虧喜颁。由于一開始在選題時(shí)候我們簡(jiǎn)單地想著做一個(gè)代碼眾包平臺(tái)。并沒有仔細(xì)地去考慮到底要做成什么樣子的曹阔,核心功能邏輯是哪些半开,功能亮點(diǎn)有什么,這導(dǎo)致我們?cè)陧?xiàng)目進(jìn)行中遇到了很多很多問題赃份,甚至在中期檢查后對(duì)整個(gè)項(xiàng)目的功能進(jìn)行了一次很大的增刪寂拆,這導(dǎo)致我們的項(xiàng)目結(jié)構(gòu)變得混亂。由于功能大改抓韩,導(dǎo)致原有的項(xiàng)目框架也隨之改變纠永,之前很多代碼直接變成了無(wú)效代碼,開發(fā)成本增大谒拴,開發(fā)效率一下變低尝江。因此我覺得一個(gè)好的大型項(xiàng)目一定要在開發(fā)前想清楚要做的產(chǎn)品到底是一個(gè)什么樣的產(chǎn)品∮⑸希可以不需要想清楚每一個(gè)細(xì)節(jié)炭序,但是涉及軟件核心的邏輯與功能必須想清楚,否則苍日,后患無(wú)窮惭聂。
合適的技術(shù)選型
在開發(fā)項(xiàng)目前我們需要進(jìn)行技術(shù)選型。比如前端用什么框架相恃?后端用什么框架彼妻?數(shù)據(jù)庫(kù)用啥?當(dāng)時(shí)很多組其實(shí)并沒有特別在意技術(shù)選型豆茫,都會(huì)選擇自己熟悉的或者擅長(zhǎng)的框架進(jìn)行大作業(yè)的開發(fā)侨歉。但其實(shí)技術(shù)選型很重要。我們?cè)陧?xiàng)目開發(fā)過(guò)程中一開始選用的是Mysql關(guān)系型數(shù)據(jù)庫(kù)揩魂,但是由于軟件眾包涉及多對(duì)多關(guān)系非常復(fù)雜幽邓,顯然MongoDb會(huì)更加適合這種數(shù)據(jù)模式,效率也會(huì)更高火脉。再者我們當(dāng)時(shí)選擇了一個(gè)輕量級(jí)的UI框架foundation牵舵,但是foundation對(duì)React的支持實(shí)在是,太......了倦挂。文檔特別草率畸颅,社區(qū)氛圍涼涼,想用啥啥沒有方援,最后淪落到用了UI框架還要寫一大堆CSS的窘境没炒。因此在項(xiàng)目中期檢查之后我們更換了UI框架,使用了Ant Design犯戏,一下子送火,整個(gè)世界都明亮了拳话!清晰的文檔,效果展示种吸,樣例代碼弃衍,控件每一個(gè)參數(shù)作用。簡(jiǎn)直和foundation天差地別坚俗!不敢想象我們沒有更換UI框架镜盯,我們最后的界面會(huì)有多丑。因此猖败,在進(jìn)行了清晰的模型規(guī)劃之后速缆,技術(shù)選型也應(yīng)該給予重視,一個(gè)合適的技術(shù)選型辙浑,能讓你的開發(fā)如虎添翼激涤。嚴(yán)謹(jǐn)?shù)拈_發(fā)流程
由于開發(fā)的是一個(gè)大型項(xiàng)目拟糕,就應(yīng)該選擇大型項(xiàng)目工程的開發(fā)模式判呕,如瀑布模型開發(fā),增量模型開發(fā)送滞,快速原型模型開發(fā)等等侠草。由于開發(fā)團(tuán)隊(duì)很小,而且成員間很熟悉犁嗅,甚至可能是一個(gè)宿舍的幾個(gè)人边涕,因此就覺得幾個(gè)人在一起還要抽特定時(shí)間集中開發(fā),開迭代會(huì)議很“表面”褂微。但是事實(shí)證明功蜓,如果沒有每周一個(gè)或多個(gè)特定時(shí)間的集中開發(fā),大概率發(fā)生的情況是在迭代檢查前一晚上爆肝宠蚂,甚至通宵式撼。沒有迭代會(huì)議會(huì)導(dǎo)致,對(duì)整個(gè)項(xiàng)目完成進(jìn)度失去控制與規(guī)劃求厕。會(huì)陷入:“啊著隆,這次迭代我們做了很多了!你看有........”但其實(shí)沒做的更多呀癣,的情況之中美浦。因此項(xiàng)目集中開發(fā)與項(xiàng)目會(huì)議至關(guān)重要。在項(xiàng)目開始前需要有一個(gè)比較粗略的規(guī)劃项栏,到什么時(shí)間點(diǎn)需要大概做到什么程度浦辨。在每一次迭代會(huì)議上需要給上一個(gè)階段的工作作出總結(jié),細(xì)致地確定下一個(gè)階段的工作細(xì)節(jié)沼沈,任務(wù)分配荤牍,安排下一個(gè)迭代集中開發(fā)時(shí)間與每一次開發(fā)要完成的任務(wù)點(diǎn)案腺,這樣才能做到有條不紊。否則康吵,夜很長(zhǎng)劈榨,你懂的。(三天三夜晦嵌!三更半夜同辣!不會(huì)有停歇!)關(guān)注開發(fā)細(xì)節(jié)
寫代碼的人很多時(shí)候會(huì)覺得惭载,我東西都給你了旱函,文檔什么的不重要~其實(shí)在做一個(gè)項(xiàng)目的時(shí)候文檔什么的,很重要描滔。文檔是給用戶看的棒妨,也是給開發(fā)團(tuán)隊(duì)看的。比如愿景文檔(讓開發(fā)團(tuán)隊(duì)知道自己產(chǎn)品需要哪些功能)含长,原型設(shè)計(jì)文檔(讓前端開發(fā)者知道頁(yè)面需要做成啥樣)券腔,API文檔 (前后端對(duì)接規(guī)范,可以讓前后端開發(fā)分開進(jìn)行拘泞,不會(huì)因?yàn)閷?duì)方拖慢自己的進(jìn)度)纷纫,測(cè)試文檔(確定測(cè)試方案,測(cè)試環(huán)境陪腌,測(cè)試工具辱魁,設(shè)計(jì)測(cè)試用例)。沒有文檔記錄的開發(fā)是不完整并且混亂的诗鸭,我們組一開始開發(fā)時(shí)不太關(guān)注這方面的東西染簇,因此產(chǎn)生了各種問題。因此在大型項(xiàng)目開發(fā)過(guò)程中强岸,文檔至關(guān)重要锻弓,沒有文檔,就沒有一個(gè)好的大型項(xiàng)目请唱,開發(fā)過(guò)程也必定是痛苦而凌亂的弥咪。
二、一些想說(shuō)的話
這門課是我遇到的最硬的課十绑。其價(jià)值遠(yuǎn)遠(yuǎn)超越了5學(xué)分的意義聚至。由于大作業(yè)開發(fā)需要組隊(duì),整個(gè)項(xiàng)目的開發(fā)都是由你選擇的團(tuán)隊(duì)一起進(jìn)行的本橙。因此選擇一個(gè)合適自己的團(tuán)隊(duì)至關(guān)重要扳躬。團(tuán)隊(duì)中每一個(gè)人都應(yīng)該對(duì)項(xiàng)目有一個(gè)相同清晰的目標(biāo),大家一起朝一個(gè)方向努力。拒絕拖延癥贷币,否則睡覺時(shí)間不能得到保證击胜。總的來(lái)說(shuō)經(jīng)過(guò)一學(xué)期的“受虐”役纹,自己還是學(xué)到了很多知識(shí)偶摔,經(jīng)驗(yàn)和教訓(xùn),希望學(xué)弟學(xué)妹能吸取我這個(gè)老學(xué)長(zhǎng)的教訓(xùn)促脉,愉快充實(shí)地學(xué)好軟件工程三這門課辰斋,也希望自己能在以后的開發(fā)過(guò)程中注意以上的幾點(diǎn),開發(fā)出自己滿意的項(xiàng)目瘸味。