天天看點

《JavaScript專家程式設計》——第9章 代碼品質 9.1 定義代碼品質

本節書摘來自異步社群《javascript專家程式設計》一書中的第9章,第9.1節,作者:【美】mark daggett(達格特)著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

品質不是一種行為,而是一種習慣。

——aristotle

寫高品質的javascript是什麼意思?品質能度量嗎?還是說它是一個主觀感受,類似于美和藝術的柏拉圖式的理想?程式員往往會在品質的主觀和客觀了解之間搖擺不定。他們提出了諸如軟體工藝的概念,這是一種用類似手工藝的方法來編寫軟體的方式。軟體工匠常被這樣描述:他們擁有超群的技術,總是能将工作提煉為基本的、本質的部件。這樣一個工匠在電氣上被稱為搖滾明星程式員。這基于兩個标準,一是這個人具有如同藝術家一樣的獨特天賦,二是他工作的産出并不是各個元件的單純結合。然而,很多程式設計是圍繞度量、重構,以及通過程式性的可重複的流程來改進代碼。這表明,品質可以被提取為一系列獨立的和可度量的步驟。

如果品質可以度量,那麼對于javascript開發者來說,有哪些機制可以確定他們寫出高品質的代碼呢?本章将深入探讨編寫高品質javascript的概念,因為涉及到程式設計,我們首先給品質下一個定義,然後提供一個用于評估和改進代碼品質的架構。

9.1 定義代碼品質

正如許多複雜的學科往往會吸引具有不同背景的人一樣,對于程式設計品質的定義往往會跨越藝術與科學之間的栅欄。程式設計行為往往是創造性地解決問題和運用工程師的嚴謹來完善解決方案的融合。程式設計是一種博弈,它存在于編寫可重複步驟的客觀觀察和借由經驗和洞察而爆發出的主觀評判之間。事實上,“品質”這個詞同時包含這兩個方面。barbara w. tuchman解釋了品質的兩面性:

當然,“品質”這個詞有兩方面的含義:首先它是指一個物質的性質或本質特征,比如“他的聲音有指令的性質(his voice has the quality of command)”;其次它是意味着卓越品質的條件,作為與低劣品質的區分(tuchman,1980)。

tuchman接着将品質描述為“自我滋養”,這是一個非常生動的描述。品質也被描述為一種追求,這表明它不是一個目标,而是一個過程。這可能是因為它的定義并不是固定的,它屬于時代精神。為了證明這一點,你可以看看藝術的發展史,它也在不斷排斥或擁抱不同的藝術表現形式。在法國印象派的發展曆程中,它從最初被鄙視的藝術,經過幾年的發展後成為藝術世界的頂峰。他們的畫并沒有改變,隻是對于品質的定義發生了變化。

在本章中,我認為,對于javascript源代碼的評估,主觀和客觀的評價都是需要的。事實上,我認為,你不能将兩者完全分離。但是,在證明這個斷言之前,我有必要正确地呈現這兩種形式。

9.1.1 主觀品質

主觀品質往往描述有啟發性或必要的代碼,或者truchman所說的“天資”。在他的産品品質的文章中,david garvin定義了一種形式的品質,他将其描述為卓越。他将卓越品質定義為:

……從絕對和普遍認識來說,卓越品質是不妥協的标準和高成就的标志。然而,主張這種觀點的支援者認為品質不能被精确定義;相反,它是一種我們隻能通過經驗來辨識的簡單的無法分析的屬性。這個定義在很大程度上借鑒了柏拉圖對于美的讨論。在研讨會上他認為,美是“柏拉圖式”的一種形式,是以它并不能被定義。其他的哲學家稱其為“原始的邏輯”,也就是說,隻有當一個人接觸到顯示其特性的對象的時候,美(也許品質也一樣)才可以被了解(garvin,1984)。

這個定義清楚地表達出,主觀品質依賴于個人的經驗或對技能很熟練的人的指導,這些人會在他們的領域認識到品質并實作卓越。是以,主觀品質基本上是普遍的真理,并不多是由于發現而創造的。

9.1.2 客觀品質

客觀品質認為,如果天才可以被度量,那麼它就可以被量化,被複制。蛋糕的品質不依賴于面包師的天資,反而是成分的準确選擇和計量,以及嚴格遵循配方的​​結果。客觀品質會在一個回報回路中以制造、應用、提煉的形式不斷向主體經驗逼近。這種形式的品質适合于算法、測試套件和軟體工具。在本章的其餘部分,我将介紹一種通過客觀品質提高代碼品質的方法。

繼續閱讀