之前我在工作負責的四個模塊的軟件開(kāi)發(fā)任務,在經(jīng)過(guò)軟件設計實現和編碼之後(hòu)提交使用測試,發(fā)現軟件的實現與實際要求差距比較大,需要返回重新修改,提交使用發(fā)現問題再修改……如此反複多次,直到最後(hòu)發(fā)現幾個功能(néng)模塊是暫時沒(méi)有問題,消耗了大量的時間和熱情。不由的在這(zhè)個開(kāi)發(fā)測試過(guò)程中會産生如下疑問:
爲什麼(me)會造成(chéng)如此多次的反複?最初的需求和最終的功能(néng)實現之間爲什麼(me)會産生如此大的差距?産品設計人員的想法是否準确的傳遞給了研發(fā)人員?設計人員在研發(fā)人員開(kāi)始動手寫代碼之前如何确認他已經(jīng)明确自己要幹什麼(me)了?
從軟件開(kāi)發(fā)工程角度講,一個軟件産品從構思到實現需要經(jīng)過(guò)以下系列嚴格的流程,1:産品設計 2:軟件設計3:軟件實現4:測試并發(fā)布;通常這(zhè)幾個步驟都(dōu)是不同的團隊完成(chéng)的,所以重點就是确保設計思想一步步落實!
産品設計思想通常是市場人員提出的,軟件設計人員在産品設計思想基礎上進(jìn)行設計,編碼人員在軟件的設計基礎上開(kāi)發(fā),測試人員在軟件上進(jìn)行測試,
如果把研發(fā)比做傳話遊戲的話,從編碼人員的角度,我遇到的問題是:我并不理解傳給我的話的意思,也不确定傳給我的話是否就是紙條上的那句,造成(chéng)的結果是,我并不熟悉自己設計并完成(chéng)的模塊,完成(chéng)了軟件心裡(lǐ)面(miàn)也不踏實,因爲當編碼完成(chéng)發(fā)布之後(hòu),使用的人員很容易發(fā)現“顯而易見”的錯誤,而我自己卻不知道(dào)修改的方向(xiàng),使用人員見到産品才發(fā)現問題,返工,再測試,再發(fā)現問題,再返工,再測試……這(zhè)的确是正規軟件的流程,但是否使用的太多了?
如何才能(néng)提高軟件研發(fā)效率,減少返工?怎樣(yàng)才能(néng)讓軟件使用者在的一眼看到研發(fā)的作品之後(hòu)說:好(hǎo),這(zhè)就是我想要的東西。
解決方案,兩(liǎng)種(zhǒng)典型的研發(fā)方法
方法一:重視編碼
傳統的研發(fā)方法是輕視設計,重視編碼,大量的時間用于編碼,代碼任務很快完成(chéng),但是從産品整體角度講,研發(fā)團隊如果沒(méi)有真正理解産品設計思想,很容易造成(chéng)軟件設計和開(kāi)發(fā)的偏差,造成(chéng)很多問題在産品完成(chéng)時才發(fā)現,它們應該在沒(méi)有動筆寫代碼之前就被(bèi)避免,從而陷入無限制的發(fā)布,修改bug,再發(fā)布……的恐怖循環。
方法二:重視設計
正确的合理的設計和研發(fā)計劃中,設計和理解設計是占很大的一部分時間的,大概應該是完成(chéng)産品總時間的30%~40%,之後(hòu)是研發(fā)人員的理解和完成(chéng)測試文檔,我喜歡測試優先的想法,因爲實際效果很省力,最後(hòu)才是編碼,編碼時間占30%~40%,從産品整體角度講,這(zhè)是被(bèi)證明的,有效率有效果的方法。
重視設計成(chéng)功經(jīng)驗
步驟一:市場的産品設計,團隊中核心人員參與人員讨論,确定産品方向(xiàng);
步驟二:研發(fā)團隊核心人員,讨論确定研發(fā)的計劃和預見技術難點,确定研發(fā)計劃,讨論技術難點的解決步驟,做到心中有數;
步驟三:把研發(fā)計劃告知給研發(fā)工程師,并要求研發(fā)工程師花時間理解需求和設計,遇到難點溝通反饋,總工程師開(kāi)會統一解決研發(fā)疑問,沒(méi)有疑問之後(hòu),研發(fā)開(kāi)始寫測試文檔。
步驟四:研發(fā)工程師講述自己的測試文檔,研發(fā)核心團隊評審,提出不足與改進(jìn)意見,把研發(fā)過(guò)程種(zhǒng)造成(chéng)的偏差扼殺在寫代碼之前。
步驟五:研發(fā)工程師在動手開(kāi)發(fā)之前,頭腦裡(lǐ)面(miàn)已經(jīng)很清楚自己要做的任務,之後(hòu)的工作就是按照測試文檔實現功能(néng)點就可以了。
按照以上研發(fā)軟件的步驟,結果是減少了研發(fā)人員的bug,提高了軟件研發(fā)的效率,減少了測試回合;s這(zhè)樣(yàng)的開(kāi)發(fā)方式要求研發(fā)團隊的核心人員,腦中有清楚的産品模樣(yàng),有清楚的開(kāi)發(fā)思路,并且把實現要求貫徹給研發(fā)人員,并确認研發(fā)人員真正理解了自己想做的事(shì)情而不會産生偏差。
怎樣(yàng)提高軟件研發(fā)的效率
根據以往的工作經(jīng)驗,從研發(fā)角度看,流行的有效的解決辦法 我認爲是:
第一:一份研發(fā)人員自己寫的測試文檔(也就是常說的極限編程,研發(fā)自己的測試方案在寫代碼之前完成(chéng));或者别的有被(bèi)實踐證明簡便有效的方法;
第二:teamleader需要确認研發(fā)人員是否真懂得了自己要做的東西;至于如何确認,我的經(jīng)驗是研發(fā)人員在認爲自己理解了設計文檔之後(hòu),自己給設計和産品詳細講一下到底要做什麼(me)東西,做出來是什麼(me)樣(yàng)子;或者别的被(bèi)實踐證明簡便有效果的方法。
經(jīng)驗總結
軟件研發(fā)的本質是軟件工程師用程序語言表達出産品的設計思想,軟件産品的好(hǎo)壞在于創造産品的工程師們對(duì)于産品設計思想的理解程度。優秀的軟件研發(fā)團隊中,有著(zhe)一個很重要的特點:在沒(méi)有軟件研發(fā)之前,我們工程師的思想中已經(jīng)有了産品清楚的模樣(yàng),并提早預見各種(zhǒng)各樣(yàng)的困難,有足夠的方案解決困難;對(duì)于研發(fā)工程師,很重要的一點就是在沒(méi)有開(kāi)始動手寫代碼之前,腦子裡(lǐ)面(miàn)應該有清楚的軟件實現後(hòu)的模樣(yàng)。無論公司、研發(fā)團隊還(hái)是研發(fā)工程師,無論做何種(zhǒng)職業,清晰的思路都(dōu)是很重要的事(shì)情,我認爲這(zhè)也是提升效率的根本保證。