軟體開發中的理想與現實(三) 用重構來清掃戰場

2021-04-06 19:59:37 字數 1461 閱讀 4322

2月17日的早晨非常寒冷,就算躲在被子裡也可以清楚地感覺到,不過到實驗室就不會覺得冷了(嗯,有空調就是好啊

),所以,我很早就來了。

重新檢查大家的**,我有種想重寫的衝動(呵呵),不過這正合我意,因為今天的工作就是清掃戰場,做清掃的人當然是大家。

首先我把需要修改的內容列一下:

在算prime的時候沒有採用最優化的演算法。我們最開始採用的方法是開乙個bool型別的大陣列,陣列下標對應正數,然後不斷用乘積的方法標出所有不是素數的數,最後再遍歷一遍陣列收集所有是素數的數。這種方法不是最好,還有優化的餘地。

沒有把算過的prime快取起來。其實prime這個東西很乖,不管怎麼算,乙個數是prime的那麼它的性質永遠都不會變,因此,適當的快取一些數,可以提高不少效率。

採用vector儲存得到的prime。出於眾所周知的原因,當vector大小改變時代價是很大的,換乙個其他東西作儲存或許會更好。

好,準備好問題當然就可以開工了。

作為一種優化性質的修改,最關鍵的就是保證原來

已實現的功能不能消失、

介面不能夠改變。這在原來真的挺難做到(嗯,我很討厭那種一波未平、一波又起的解決問題方式,那是一種折磨

),不過現在有了單元測試用例做保證,那就沒有任何疑慮了——只要通過了如此充分的單元測試,原有的功能當然沒問題啦。ok,麻煩乙個個被解決,無論是簡單問題還是複雜問題,我們始終可以很放心的對原來的**動刀子。

不過這種優化只是最初級的

重構(哦,這就算是重構啊),比較需要

勇氣的還在後面——嗯,我這個合格的客戶又要發揮作用了。

新的需求:cprime類要能夠處理負數的情況。

約定,如果乙個數的絕對值是質數則這個數就是質數。

傳入createpool的max是質數的絕對值範圍,也就是找出所有大於等於-|max|並小於等於|max|的所有質數。例如,createpool(-5)則會把-5、-3、-2、2、3、5都放到pool裡面去。

傳入getprime的index如果大於等於0,則是從最小的質數開始按從小到大的順序獲得質數,0代表最小的質數,如果小於0,則意味著從最大的質數開始按從大到小的順序獲得質數,-1代表最大的質數。例如,createpool(-5)之後再getprime(2),拿到的是-3,getprime(-3),拿到的是3。

不要問我為什麼會有這種需求

,反正就是要做了。嗯,其實問題也不大,大家其實一看就很明白,畢竟我們通過剛才的練習已經很明確如何做功能上的重構,只不過這次我們需要把已有的測試用例先乙個乙個按照新的需求進行改變(比較繁瑣,需要勇氣來做這件事情)。嗯,一次全改完還是分批改呢?我覺得可以根據測試用例的型別來分批改變,這樣我們依然可以一小步一小步的可靠的開發。

雖然通過這些練習並沒有了解多少重構的理論,但是我們已經有信心在未來的開發中運用重構的方法來清掃以前留下的麻煩。

[1] robert c. martin,敏捷軟體開發:模式、原則和實踐,中國電力出版社,2004

[2] kent beck,測試驅動開發,中國電力出版社,2004.3

軟體開發中的理想與現實(引子)

軟體開發實在不應該是乙個令人厭惡的工作,而更應該像一種藝術家的創作,充滿新意和樂趣。可是,我看過不少軟體開發者卻一直在寫另自己都厭惡的 做連自己都不敢正視的測試,最後在專案完成時長嘆一口氣,將自己的成果束之高閣 不敢再碰。造成這種窘境的根源在 是誰讓開發人員做出連自己都感到厭惡的東西?答案是多樣的,...

軟體開發中的理想與現實(十三) 新的培訓即將開始

2月25日是非常值得紀念的,我們花了乙個星期實現了乙個最小的系統。雖然一切的設計還都非常原始,很明顯有不少值得改進的地方,但我們確實已經實現程式的框架,並能夠生成一些小東西了。這真的很令人振奮!大家都從測試先行和迭代開發中嘗到了甜頭,每日會議也不會那麼拘束了,每天都會感覺有所收穫。這種感覺令人著迷,...

軟體開發中的理想與現實(四) 興致勃勃做計畫

計畫遊戲。作為乙個最不專業的解釋,計畫遊戲就是在現場客戶 開發人員 相關負責人員的參與之下,分解 分配和估計任務的活動。之所以可以稱之為遊戲,因為這個活動充滿了遊戲性 由客戶編制一些 故事卡片 並初步標明一些優先順序,用於描述自己的需求,然後開發人員估計它們 客戶可以選擇自己最想要實現的 故事 是哪...