荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: jek (Super Like Cat), 信区: Program
标  题: 完美程式設計指南--前言
发信站: 荔园晨风BBS站 (Thu Apr  4 06:54:18 2002), 转信


書名:完美程式設計指南
出版日期:1999/10/12
書號:957-8239-22-X
ISBN:957-8239-22-X
原作者:史提夫. 馬魁
譯者:余孟學


我第一次見到Steve Maguire是在1986年,當我們聘他來寫麥金塔版的Excel時。作
為一名特別謹慎而專注的程式寫作者,他令我印象深刻。當時我是Microsoft
Multiplan,Word與Chart的開發經理。這間公司正快速成長,而我們產品與開發過
程中的問題也愈來愈多。Steve在解決這其中的一些問題上出過力,而且以這本書
成為我們想出來解決這些問題的許多好作法的紀錄者。接下來我要先提一下我自己
的經歷。

1981年,我被比爾蓋玆跟Charles Simonyi合聘加入微軟公司商業應用程式團隊工
作。回顧當時,有七名程式員在進行一個商業應用程式的開發-Microsoft
Multiplan. 其他三十名程式員則在進行程式語言與作業系統產品的發展。公司裡
剩下的一百人進行技術文件的撰寫、銷售、行銷與管理工作。當時,Multiplan的
七名程式員都被塞到一棟位於華盛頓州Bellevue鎮商業區的辦公大樓裡的一個大房
間中。我們跟其他開發MS-DOS跟Basic的工作者沒在同一棟建築裡,他們在兩個十
字路口之外。不過這並不是什麼大問題,當時我們這間小公司只有一個人人想要達
成的前景:讓每個桌上的電腦都跑我們微軟的程式。

我們用來開發Multiplan的系統對當時的PC軟體開發而言是相當特殊的。我們將核
心產品以C語言撰寫-當時大部分的程式還是用組合語言或Pascal寫成的。我們在
一台跑Unix的PDP-11電腦上完成自己的編輯與編譯程式。C語言寫的原始碼被編譯
成p-code,下傳到目的平台。當時我們得替每個微處理器建立出一套p-code解譯器
來執行我們開發的程式。

1983年底,我們已經有了在8080/Z80,6502,Z8000,68000,TI 99/a與8086上執
行的p-code解譯器。那時候,我們的每套主要商用軟體都有專門人員在進行開發-
一個試算表、一個文書處理器、一個簡單的資料庫記錄管理程式,跟一份商用繪圖
套裝程式。我們有專門的環境開發人員使用組合語言來撰寫這些p-code解譯器。我
們也有一組人員在發展編譯器與程式開發工具。除了少許作業系統服務相關的東西
,這整個三十人的應用程式開發團隊可以說是自給自足的,建立自己用的程式開發
工具、編譯器、解譯器與產品的原始碼。

在1981年,我們的主要目標在於銷售隨機搭售的產品。我們與硬體製造商合作,修
改我們的產品以搭配製造商的硬體與銷售管道。然後我們會交給硬體製造商一張磁
片與可以照相排版的使用手冊。硬體廠商自己擔負起整個產品的製造、發行與支援
的工作。

1982年時,我們開始轉而強調零售管道。與硬體廠商的合作經驗讓這項轉移過程迅
速許多。我們只需要幾個行銷人員將產品賣給硬體製造商,幾個產品開發人員來發
展產品,幾個技術寫作者來撰寫使用手冊,至於測試、專案管理、產品製造、產品
發行、產品支援與銷售的部分,則都已經由硬體製造商支援了。要將目標轉移到零
售管道,我們得在微軟內部找出一套完成全部特定產品發展與支援的辦法。

更早,我們還在替IBM跟蘋果電腦開發產品時,我們自行銷售的第一套產品是
IBM-DOS版的Multiplan跟蘋果二號版的Multiplan,不過那時我們還在開發許多隨
機搭售產品。我們替Unix,Xenix,TI 99/a,Tandy M100,MSX(日本一種八位元
的家用電腦),非IBM的MS-DOS相容機器,Commodore 64,Atari,蘋果公司的蘋果
三號、Lisa跟麥金塔電腦,OS/2,Windows與其他特別的硬體環境開發試算表、文
書處理程式、商用繪圖程式與資料庫產品,有些環境本身還有好幾種機型。在IBM
相容電腦成為主流機型前,我們已經為每一種跑MS-DOS的機器量身修改過我們的應
用軟體。在Tandy,王安,Paradyne,Consumer Devices,Eagle,Victor,
Olivetti,DEC Rainbow與其他MS-DOS機器上都有過我們的產品。(譯:這裡有許
多在台灣還沒普及過就從世界市場上消失了的廠牌,不另譯。)除了面對這些不同
系統平台,我們還發展了許多特定語言版本的商用軟體。

早期產品只有英文版本的,今天我們則開發了超過三十種語言版本的產品,針對不
同語言與文化改寫或修改,包括阿拉伯文版、澳洲版、馬來文版、中文版、捷克語
版、丹麥文版、荷蘭文版、英國版、芬蘭版、法文版、法屬加拿大版、德文版、希
臘文版、希伯來文版、韓文版、義大利文版、日文版、挪威版、葡萄牙文版、俄文
版、西班牙文版、土耳其文版、美國版等。

在1985年,IBM PC在市場上的成功減輕了些產品開發的複雜度。我們必須支援的不
同視訊標準只剩下主要的IBM相容機型上的模式(CGA跟單色文字模式)。不過在
1988年左右,對不同視訊模式需要的支援開始多得超出預估的數量,IBM先是發展
了EGA視訊延伸標準,接著又發展了VGA標準,然後接著而來的是各種不同的SVGA模
式與標準。

對其他硬體周邊配備的支援也變得愈來愈複雜。我們得支援超過兩百種不同的雷射
與點陣列表機。幸運的,輸入裝置的種類沒有變化太多。原先就有IBM標準鍵盤與
擴充鍵盤,而大部分指向裝置依循著微軟滑鼠標準。

今天硬體上的許多複雜性與變異性都已經消失或被統合進一個複雜而完整的介面裡
。我們只需要替兩種主要系統製作產品-Windows跟麥金塔。但是新等級與新尺度
的複雜性取代了硬體支援的複雜度。現在軟體開發者得熟悉訊息傳遞式的圖形使用
者介面程式寫作與物件導向設計跟程式寫作方式。他們得透過Windows上的物件連
結與嵌入(OLE)和麥金塔上的出版與訂閱機制來支援產品延伸性,而且他們得支
援同個產品系列裡一致性的特性與可程式性的使用方法。

在1984年,我們產品中漸增的複雜性與製作零售產品所需的高標準讓我們建立了一
個品質確認小組。1984年,我們稱這個小組為測試小組,到今天我們還是這樣稱呼
這個小組,雖然我們測試小組的人數已經從1984年的五個人增加到超過五百人了。
今天我們的測試小組確實是個先進的品質確認小組,從各種消費者的偏好習慣來進
行產品品質的檢測。

在建立測試小組以前,商用程式開發者們必須仰賴硬體製造商的消費者們測試產品
,以找出錯誤所在,這種做法一直挺有效的。直到我們開始在對硬體製造商的消費
者們推出產品前,直接對末端使用者推出零售版的產品,我們碰到問題了。有段時
間,在我們的測試小組能力夠強以前,程式開發員得自己測試零售產品。曾經歷過
那段時間的開發者們都學到了他們得在寫作跟除錯程式碼時非常小心的避免產生錯
誤。他們了解推出一項會出錯的產品要付出多大的代價。

不過,當測試小組愈來愈龐大時,開發小組愈來愈依賴測試小組來找尋程式裡的錯
誤。開發小組很快習慣了這種讓測試小組負責找出所有問題的態度。這造成了底下
這些嚴重的問題-產品時間表延期,錯誤百出的產品特性,未完成的產品功能,或
甚至讓產品取消推出-必須有些對策來避免這些事情發生。許多開發人員對於產品
在推出後還在程式中被找到問題一點也不覺得羞恥。他們憤憤不平的問道,"為何
測試人員沒在我們推出產品前找到問題?"而測試人員一定會回應,"那為何你們要
在產品中製造問題?"

最後,開發人員開始明白測試人員永遠也不可能找到一份軟體中的所有錯誤。錯誤
可能出現在設計上,規格上,或是顧客需求的分析上,而且測試人員在測試中沒辦
法涵蓋所有程式碼或使用方式。程式的錯誤可能隱藏在隱密而鮮少測試到的程式碼
中,可能被程式其他部分功能的運作所暫時掩蔽著-甚至測試環境都可能掩護錯誤
免於發現。測試人員很難找到這些問題,由於這些因素,測試小組經常只能在產品
中找到百分之六十的程式錯誤。

程式開發人員擁有更多知識與工具來檢測程式碼。當開發人員決心利用他們的工具
去作這件事時,他們可以在程式中找到超過百分之九十的問題。如果開發人員負起
他們原先丟給測試人員的除錯責任,產品使用者只會發現百分之四十的錯誤。如果
開發人員與測試人員合作找出錯誤,末端使用者只會找到少於百分之四的問題,而
且這百分之四可能在產品對外公開測試時就被使用者找到。

早先,在1989年,許多開發經理與帶領者開會討論這個問題。會議之後,他們了解
了一件事,並改變了態度:找尋問題、更正錯誤是開發部門的責任。開發人員過去
讓程式裡的臭蟲橫行,現在,避免臭蟲出現在測試人員面前而後溜到使用者面前的
責任回到了他們身上。開發團隊定下了"隨時都有近乎可推出的產品"的目標。這表
示說,當一項功能被標示為完成時,所以在這功能上找到的錯誤都將在新功能加上
前獲得修正。如果在以標示完成的功能上找出了嚴重的問題,工作進度將停滯不前


我們將這種新的態度稱作"零失誤"。程式碼由開發部門建立並檢測,然後在零失誤
的態度下交給測試部門。幸運的,幾個開發小組已經體驗過開發零失誤程式所需的
許多技術。Steve Maguire在這些日子裡在各小組間解決了許多問題,並在本書中
定下許多我們用來寫作穩固而零錯誤的程式技巧。

微軟改善,而且總是在改善產品開發工具與產品開發過程。在1981年,公司內只有
程式開發人員、使用手冊撰寫者跟小型的銷售、行銷與管理小組。現在我們有產品
行銷、通路、銷售、支援、測試、使用者教育(技術寫作與出版)、計劃管理與其
他許多的專門人員。在今日微軟特別小組的複雜架構下,我們要確定發展穩固程式
碼的技巧不會失傳、誤解或被遺忘。Steve Maguire的這本書應該對我們跟讀者們
讓這些技巧繼續被活用有所幫助。

現在我是微軟的開發與測試總監。我的部分工作是列出並宣傳最好的作品。我非常
感謝Steve花時間寫了這樣一本有益於管理者與程式寫作者們發展世界級程式而且
讀起來如此令人快樂的書。Steve捉住而且描述了許多在微軟宮公司用來發展穩固
而可發行的程式碼的技巧。這本書將成為所有微軟的程式寫作者的建議讀物。

 David M. Moore

微軟開發總監

1993年一月,於華盛頓州Redmond市

--
 === I love Puss forever ===

※ 修改:·jek 於 Apr  4 06:54:38 修改本文·[FROM: 192.168.1.241]
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.1.241]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店