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