天天看點

《測試驅動資料庫開發》—第1章1.1節為何改變書的内容

本節書摘來自異步社群《測試驅動資料庫開發》一書中的第1章1.1節為何改變書的内容,作者【美】max guernsey, iii,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

1.1 為何改變書的内容

測試驅動資料庫開發

本書最初的書名是《靈活資料庫開發:從需求到傳遞》。到現在書名和内容都己經變了好幾次。

在讀者回報和自我啟發的雙重作用下,本書經曆了幾次激進的蛻變,由開始的一本主要讨論開發過程并稍帶講一點技術的書,轉化為讨論 tdd 的差異如何影響靈活資料庫開發過程的書,然後最終将有關團隊級别的開發過程内容完全去除而成為今天這個樣子的書。

為什麼我幾次變化本書的方向?主要是因為開發人員學到的有關靈活軟體開發的幾乎所有有關過程管理(process-management)的知識,對任何領域都是普遍适用的,通常情況下甚至适用于硬體設計。我過去寫的很多東西,要麼是對别人寫過的内容的重複,要麼就是向人們說教那些他們已經接受了的東西,再寫這些東西注定都是無效的。對于那些在建構資料庫時尋求如何做靈活開發的建議的人,建議先學如何做靈活軟體開發,然後再将其運用在資料庫上。

當然,如果你做資料庫開發,你會發現你需要學習如何做tdd。要想讓任何靈活開發的努力取得成功,測試驅動開發的法則是絕對至關重要的,并且我相信是無可争議的,你需要一系列可執行的規格說明來告訴你,你所做的變化是否安全。如果沒有這樣的規格說明,你就不可能讓靈活有成效。

事情在這裡變得有些棘手,将測試驅動開發運用到傳統面向對象開發和資料庫開發中會有很大的不同。也就是說,盡管 tdd 的原則普遍适用,但是為建構應用程式和中間層邏輯而開發的相應的實踐,卻不總會完美地被轉換到資料庫領域中。

另外,即使你的團隊還沒有準備好擁抱靈活軟體開發,你也能使用測試驅動開發。

1.1.1 每天靈活都在逐漸地入侵我們的領域

文明的潮汐控制着人們做事情的方式。當這個大潮退去時,我們集中起來建立指揮和控制結構,并試圖在大批量和排長隊的現象中找到效率。當潮水漲回來時,我們又打破那些結構,開始将控制權交到“平常”人的手中,并且試圖在那些離問題最近的人所快速做出的決定中找到效率。

潮水正在漲回來,在本書寫作期間,潮水也将可能退去。

對于我們來說,潮水漲潮是否正确,就跟站在海灘上的人關心水沖到岸上是否正确一樣,是無關緊要的。波浪已經來臨,不管你是否喜歡,最好做好準備。因為開發人員不得不用更小的增量和更快速地傳遞價值的方式來改善開發工作,因為人們已經不願意經過漫長的等待才能得到自己想要的東西。

一些人認為資料庫是個例外,是一種特殊情況,即能夠忽略那種驅動力,該驅動力無處不在,并促使我們更頻繁地做出改變和對實際需求進行反應。沒有更客氣的方式來表達這個意思:那些人錯了。資料庫也不例外。當然,資料庫開發者或許可以躲在海灣裡将原來的開發領域保留得比其他産品開發領域更長一點,但是并不能阻止潮汐。在未來的幾年或幾十年裡,快速做出變化的壓力将變為壓倒性的,并且坦率地說,與能适應該趨勢的人相比,那些阻止這種趨勢的人最終将被降級為不那麼重要的角色。

1.1.2 若沒有tdd靈活就沒有成效

試圖得到快速的工作傳遞僅存在一個問題:變化是件危險的事情。如果你正在做傳遞價值的事情,那麼對這件事所做的變更必然會危及價值的持續傳遞。如果你的産品停止傳遞價值,那麼你就會開始失去與客戶的良好關系。如果任由上述腐化持續足夠長的時間,你就會開始失去客戶。

除了那些把股票借給對沖基金公司來做“放空”操作的托管代理機構,以及做類似事情的組織之外,沒有人想要失去客戶1。是以,即使變化發生得非常頻繁,保護價值的機制也必須落實到位,這樣的機制才允許我們能夠很快地做出改變。

上述機制就是測試驅動開發。測試驅動開發提供了多種優勢,但對于本書所讨論的内容來說,其主要優勢是用自動測試為軟體元件提供充足和有意義的保護。部署到位的測試一方面能夠在破壞了某些代碼時立即給你回報,另一方面也能防止你把某些已處于被破壞狀态的代碼作為産品釋出出來,這兩方面的優勢缺一不可。

除了上述測試驅動開發最關鍵的好處之外,還有許多其他好處被很多人奉為 tdd 的“主要的”好處,包括加強軟體設計分析或者戲劇性地減少過度建構。上述好處非常重要,本書将讨論這些好處,但是它們不會讓你的開發工作做得很快,它們僅僅是幫你把工作做得快一點而已。

1.1.3 在資料庫領域運用tdd是個挑戰

本書之是以存在,是因為 tdd 非常難以在資料庫開發中得到運用,特别是難以用一種能夠讓開發者快速地對變更進行開發、驗證和釋出的方式來運用。

這種困難很大程度上源于開發人員最初建構資料庫的方式。在許多組織中,資料庫是遠古遺迹。一些特定的資料庫執行個體非常重要,且其重要性已經讓設計本身黯然失色。

我見過許多這樣的案例,開發者隻基于一些極其重要的執行個體來考慮資料庫的設計而不顧其他。也就是說,他們隻考慮設計“這個”開發資料庫、“這個”測試資料庫和“這個”生産資料庫(production database),并且他們主要關心如何将變化從一個資料庫傳播到另一個資料庫。為了使用測試驅動開發進行資料庫設計,這種思考方式必須做出180°的大轉變。

本書接下來的各個章節将解釋如何能做到這一點。

1 在美國,一些大型投資基金機構購買股票後,一般将其托管在由一些大的銀行或券商組成的托管代理機構手裡。另外,一些對沖基金公司可以從上述托管代理機構手中借到股票來進行“放空”操作,為此對沖基金公司需要向托管代理機構支付利息。對于這些托管代理機構,一方面其客戶不會知道它們可以把賣家已經賣出的股票再借給對沖基金公司來做“放空”操作,另一方面其手中持有的上述這些用于做“放空”的股票十分稀缺,是以這些托管代理機構不用擔心失去客戶。—譯者注

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。