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