“運行正確”的程序就是高質量的程序嗎?不貪污的官就是好官嗎?時下老
百姓對一些腐敗的地方政府深痛惡絕,對“官”不再有質量期望。只要當官的不貪污,哪怕毫無政績,也算是“好官”。也有一些精明的老百姓打出旗號:寧要貪污
犯,不要大笨蛋。相比之下,程序員是夠幸福的了。因為我們能通過努力,由自己來把握軟件的命運。那么就不要輕易放棄提高軟件質量的權利了。
“運行正確”的程序不見得就是高質量的程序。這個程序也許運行速度很低并且浪費內存;也許代碼寫得一塌糊涂,除了開發者本人誰也看不懂也不會使用。正確性只是反映軟件質量的一個因素而已。
軟
件的質量因素很多,如正確性、精確性、可靠性、容錯性、性能、效率、易用性、可理解性、簡潔性、可復用性、可擴充性、兼容性等等(還可以列出十幾個)。這
些質量因素之間“你中有我,我中有他”,非常纏綿。如果程序員每天要面對那么多質量因素咬文嚼字,不久就會迂腐得象孔乙已,并且有找不到女朋友的危險。
1 正確性與精確性
正確性與精確性之所以排在質量因素的第一位,是因為如果軟件運行不正確或者不精確,就會給用戶造成不便
甚至造成損失。機器不會主動欺騙人,軟件運行不正確或者不精確一般都是人造成的。即使一個軟件能100%
地按需求規格執行,但是如果需求分析錯了,那么對客戶而言這個軟件也存在錯誤。即使需求分析完全符合客戶的要求,但是如果軟件沒有100%
地按需求規格執行,那么這個軟件也存在錯誤。開發一個大的軟件項目,程序員要為“正確”、“精確”四個字竭盡精力。
與正確性、精確性相關的質量因素是容錯性和可靠性。
容錯性首先承認軟件系統存在不正確與不精確的因素,為了防止潛在的不正確與不精確因素引發災難,系統為此設計了安全措施。在一些高風險的軟件系統,如航空航天、武器、金融等系統中,容錯性設計非常重要。
可
靠性是指在一定的環境下,在給定的時間內,系統不發生故障的概率??煽啃员緛硎怯布I域的術語。比如某個電子設備,一開始工作很正常,但由于工作中器件的
物理性質會發生變化(如發熱),慢慢地系統就會失常。所以一個設計完全正確的硬件系統,在工作中未必就是可靠的。軟件在運行時不會發生物理性質的變化,人
們常以為如果軟件的某個功能是正確的,那么它一輩子都是正確的??墒俏覀儫o法對軟件進行徹底地測試,無法根除軟件中潛在的錯誤。平時軟件運行得好好的,說
不準哪一天就不正常了,如“2000年”問題。因此把可靠性引入軟件領域是有意義的。我曾買了一本關于軟件可靠性的著作,此書充滿了數學公式。我發現以我
目前的學歷實在難以看懂書上講了些什么。請寬恕我的愚昧,我把此書給“供”起來,沒敢用筆畫一處記號。
2 性能與效率
用戶都希望軟件的運行速度高些(高性能),并且占用資源少些(高效率)。舊社會地主就是這么對待長工
的:干活要快點,吃得要少點。程序員可以通過優化算法、數據結構和代碼組織來提高軟件系統的性能與效率。優化的關鍵工作是找出限制性能與效率的“瓶頸”,
不要在無關痛癢的地方瞎忙乎。如果你想職稱升得快,光靠增加課時能頂屁用;你就該一年寫它幾十篇文章,爭取破格升教授。
3 易用性
易用性是指用戶感覺使用軟件的難易程度。用戶可能是操作軟件的最終用戶,也可能是那些要使用源代碼的程序員。現代人的生活節奏快,干啥事都想圖個方便。所以把易用性作為重要的質量因素無可非議。
導
致軟件易用性差的根本原因是開發人員犯了“錯位”的毛?。核詾橹灰约河闷饋矸奖?,用戶也一定會滿意。俗話說“王婆賣瓜,自賣自夸”。當程序員向用戶展
示軟件時,常會得意地講:“這個軟件非常好用,我操作給你看,……是很好用吧!”軟件的易用性要讓用戶來評價。當用戶真的感到軟件很好用時,一股溫暖的感
覺油然而生,于是就用“友好”來評價易用性。
4 可理解性與簡潔性
可理解性表達了人們一種質樸的愿望:我化錢買了它,總得讓我明白它是什么東西。我小時候的一個伙伴在讀中學時,就因無法理解電荷之分正負,覺得很煩惱,便早早地綴學當工人。
可
理解性也是對用戶而言的。開發人員只有在自己思路清晰時才可能寫出讓別人能理解的程序。編程時還要注意不可濫用技巧,應該用自然的方式編程。我們的確不知
道自己的得意之舉究竟是錦上添花,還是畫蛇添足。就象蒸出一籠饅頭,在上面插一朵鮮花,本想弄點詩情畫意,卻讓人誤以為那是一堆熱氣騰騰的牛糞。
簡潔是一種美,不管是自己還是用戶都會有同感。在生活中,與簡潔對立的是“羅里羅嗦”。中國小說中最“
婆婆媽媽”的男人是唐僧。有一項民意調查:如果世上只有唐僧、孫悟空、豬八戒和沙僧這四類男人,你要嫁給哪一類?請列出優先級。調查結果表明,現代女性毫
不例外地把唐僧擺在老末。一個原始的應用問題可能很復雜,但高水平的人就能夠把軟件系統設計得很簡潔。如果軟件系統臃腫不堪,它遲早會出問題。簡潔是人們
對工作“精益求精”的結果。
廢話大師有句名言:“如果我令你過于輕松地明白了,那你一定是誤解了我說的話。”我最近有一種奇怪的體
會:如果把學術文章寫得很簡潔,讓人很容易理解,它往往中不了;只有加上一些玄乎的東西,把本來簡單的弄成復雜的,才會增加投稿的命中率。事實上,我可以
在5分鐘之內說清楚三年來讀博所做的工作,根本用不著寫100多頁的博士論文。我是在臨近畢業時,才發覺自己完全不適合讀博士學位。將來工作后,我一定要
好好編程,重新做人。
5 可復用性與可擴充性
復用的一種方式是原封不動地使用現成的軟構件,另一種方式是對現成的軟構件進行必要的擴充后再使用??蓮陀眯院玫某绦蛞话阋簿哂辛己玫目蓴U充性。