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