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