可觀察性驅(qū)動(dòng)開發(fā)與測試驅(qū)動(dòng)開發(fā)
可觀察性的概念涉及通過檢查日志、指標(biāo)和跟蹤來了解系統(tǒng)的內(nèi)部狀態(tài)。這種方法提供了一個(gè)全面的系統(tǒng)視圖,允許進(jìn)行徹底的調(diào)查和分析。
雖然將可觀察性整合到系統(tǒng)中似乎令人望而生畏,但好處是巨大的。一個(gè)著名的例子是 PhonePe,通過實(shí)施數(shù)據(jù)可觀察性解決方案,它的數(shù)據(jù)基礎(chǔ)架構(gòu)增長了 2000%,數(shù)據(jù)管理成本降低了 65%。這有助于緩解性能問題并最大限度地減少停機(jī)時(shí)間。
可觀察性驅(qū)動(dòng)開發(fā) (ODD) 的影響不僅限于 PhonePe。許多組織都體驗(yàn)到了 ODD 的好處,發(fā)現(xiàn)問題的可能性提高了 2.1 倍,解決問題的平均時(shí)間縮短了 69%。
什么是ODD?
可觀察性驅(qū)動(dòng)開發(fā) (ODD) 是一種將左可觀察性轉(zhuǎn)移到軟件開發(fā)生命周期最早階段的方法。它使用基于跟蹤的測試作為開發(fā)過程的核心部分。
在 ODD 中,開發(fā)人員在編寫代碼的同時(shí)聲明您查看系統(tǒng)內(nèi)部狀態(tài)和過程所需的輸出和規(guī)范。它適用于組件級(jí)別和整個(gè)系統(tǒng)。ODD 也是一種標(biāo)準(zhǔn)化儀器的功能??梢钥缇幊陶Z言、框架、SDK、API。
什么是 TDD?
測試驅(qū)動(dòng)開發(fā) (TDD) 是一種廣泛采用的軟件開發(fā)方法,強(qiáng)調(diào)在編碼之前編寫自動(dòng)化測試。TDD 的過程包括通過創(chuàng)建測試用例來定義軟件的預(yù)期行為,運(yùn)行測試以確認(rèn)其失敗,編寫最少的必要代碼使測試通過,并通過重構(gòu)改進(jìn)代碼。針對(duì)每個(gè)新功能或需求重復(fù)此循環(huán),由此產(chǎn)生的測試可作為防止未來潛在回歸的保障。
TDD 背后的哲學(xué)是編寫測試迫使開發(fā)人員考慮手頭的問題并生成重點(diǎn)突出、結(jié)構(gòu)良好的代碼。遵守TDD可以提高軟件質(zhì)量和需求合規(guī)性,并有助于及早發(fā)現(xiàn)和糾正錯(cuò)誤。TDD被認(rèn)為是提高軟件系統(tǒng)質(zhì)量、可靠性和可維護(hù)性的有效方法。
可觀察性和測試驅(qū)動(dòng)開發(fā)的比較
相似之處
可觀察性驅(qū)動(dòng)開發(fā) (ODD) 和測試驅(qū)動(dòng)開發(fā) (TDD) 致力于提高軟件系統(tǒng)的質(zhì)量和可靠性。這兩種方法都旨在確保軟件按預(yù)期運(yùn)行,最大限度地減少停機(jī)時(shí)間和用戶面臨的問題,同時(shí)促進(jìn)對(duì)持續(xù)改進(jìn)和監(jiān)控的承諾。
差異
- 重點(diǎn): ODD 的重點(diǎn)是實(shí)時(shí)持續(xù)監(jiān)控軟件系統(tǒng)及其組件的行為,以識(shí)別潛在問題并了解系統(tǒng)在不同條件下的行為。另一方面,TDD 會(huì)在錯(cuò)誤對(duì)系統(tǒng)或用戶造成損害之前優(yōu)先檢測和糾正錯(cuò)誤,并驗(yàn)證軟件功能是否滿足要求。
- 時(shí)間和資源分配:實(shí)施 ODD 需要投入大量時(shí)間和資源來設(shè)置監(jiān)控和日志記錄工具和基礎(chǔ)設(shè)施。相比之下,TDD 需要在開發(fā)階段投入大量時(shí)間和資源來編寫和執(zhí)行測試。
- 對(duì)軟件質(zhì)量的影響: ODD 可以通過提供對(duì)系統(tǒng)行為的實(shí)時(shí)可見性來顯著影響軟件質(zhì)量,使團(tuán)隊(duì)能夠在問題升級(jí)之前檢測并解決問題。TDD 還有可能通過在錯(cuò)誤進(jìn)入生產(chǎn)環(huán)境之前檢測和修復(fù)錯(cuò)誤來顯著影響軟件質(zhì)量。但是,如果測試不全面,錯(cuò)誤仍可能逃避檢測,從而可能影響軟件質(zhì)量。
在生產(chǎn)中從 TDD 轉(zhuǎn)向 ODD
在軟件開發(fā)中從測試驅(qū)動(dòng)開發(fā) (TDD) 方法轉(zhuǎn)變?yōu)榭捎^察性驅(qū)動(dòng)開發(fā) (ODD) 方法是一個(gè)重大變化。多年來,TDD 一直是在將軟件發(fā)布到生產(chǎn)環(huán)境之前對(duì)其進(jìn)行測試的既定方法。
雖然 TDD 通過重復(fù)測試提供一致性和準(zhǔn)確性,但它無法深入了解整個(gè)應(yīng)用程序的性能或真實(shí)場景中的客戶體驗(yàn)。通過 TDD 進(jìn)行的測試是孤立的,不能保證實(shí)時(shí)應(yīng)用程序中沒有錯(cuò)誤。此外,TDD 依賴于一致的生產(chǎn)環(huán)境來進(jìn)行自動(dòng)化測試,這并不代表真實(shí)場景。
另一方面,可觀察性是 TDD 的進(jìn)化版本,它提供對(duì)基礎(chǔ)設(shè)施、應(yīng)用程序和生產(chǎn)環(huán)境的全??梢娦?。它通過日志、跟蹤和指標(biāo)等遙測數(shù)據(jù)確定影響用戶體驗(yàn)和產(chǎn)品發(fā)布的問題的根本原因。這種持續(xù)監(jiān)控和跟蹤有助于預(yù)測最終用戶對(duì)應(yīng)用程序的看法。
此外,有了可觀察性,就可以在代碼到達(dá)源代碼控制之前編寫和發(fā)布更好的代碼,因?yàn)樗枪ぞ摺⒘鞒毯臀幕囊徊糠帧?/p>
實(shí)施 ODD 的最佳實(shí)踐
以下是實(shí)施可觀察性驅(qū)動(dòng)開發(fā) (ODD) 的一些最佳實(shí)踐:
- 從一開始就優(yōu)先考慮可觀察性:從一開始就在開發(fā)過程中考慮可觀察性。這將幫助您及早發(fā)現(xiàn)潛在問題并實(shí)時(shí)進(jìn)行必要的更改。
- 采用端到端方法:確??捎^察性涵蓋系統(tǒng)的所有方面,包括基礎(chǔ)設(shè)施、應(yīng)用程序和最終用戶體驗(yàn)。
- 監(jiān)控和記錄一切:從所有來源收集數(shù)據(jù),包括日志、跟蹤和指標(biāo),以全面了解系統(tǒng)的行為。
- 使用自動(dòng)化工具:利用自動(dòng)化的可觀察性工具實(shí)時(shí)監(jiān)控系統(tǒng)并提醒您任何異常情況。
- 與其他團(tuán)隊(duì)協(xié)作:與DevOps、QA 和生產(chǎn)等團(tuán)隊(duì)協(xié)作,以確保將可觀察性集成到開發(fā)過程中。
- 持續(xù)監(jiān)控和改進(jìn):定期監(jiān)控系統(tǒng),分析數(shù)據(jù),并根據(jù)需要進(jìn)行改進(jìn)以確保最佳性能。
- 擁抱持續(xù)改進(jìn)的文化:鼓勵(lì)開發(fā)團(tuán)隊(duì)擁抱持續(xù)改進(jìn)的文化,并持續(xù)監(jiān)控和改進(jìn)系統(tǒng)。
結(jié)論
可觀察性驅(qū)動(dòng)開發(fā)(ODD)和測試驅(qū)動(dòng)開發(fā)(TDD)都在確保軟件系統(tǒng)的質(zhì)量和可靠性方面發(fā)揮著重要作用。TDD 側(cè)重于在 bug 損害系統(tǒng)或其用戶之前檢測并修復(fù)它們,而 ODD 側(cè)重于實(shí)時(shí)監(jiān)控軟件系統(tǒng)的行為以識(shí)別潛在問題并了解其在不同場景下的行為。