2009年11月15日 星期日

微軟再裁撤800名員工

微軟再裁撤800名員工 
文/陳曉莉 (編譯) 2009-11-05 
http://www.ithome.com.tw/itadm/article.php?c=57940
根據TechFlash報導,微軟已於周三通知被裁的員工,並證實這已超過當初預估的5000名。

科技部落格TechFlash周三(11/4)報導,微軟周三再裁撤了800名員工,超出原本微軟在今年初預估的5000名裁員規模。

微軟在今年1月揭露了首度的大規模裁員計畫,預計在18個月內裁減5000名員工;而微軟近日提交給美國證券管理委員會(SEC)的2010財年第一季財報(2009年7月~9月)中表示,該公司已完成年初的裁員計畫,縮減了約5000個職位以及4600名員工。

不過,微軟卻在本周三額外裁撤了800名員工。根據TechFlash報導,微軟已於周三通知被裁的員工,並證實這已超過當初預估的5000名。

雖然微軟表示經過此新一波裁員後,已提前完成此一裁員計畫,但微軟仍舊不排除未來裁員的可能性,指出該公司將會根據業務需求持續進行人力調整。今年10月微軟全球員工人數約為9.1萬。(編譯/陳曉莉) 

2009年11月12日 星期四

台哥大跨年斷訊事件:委外工程師遭求刑2年

台哥大跨年斷訊事件:委外工程師遭求刑2年 
文/蘇文彬 (記者) 2009-10-30
http://www.ithome.com.tw/itadm/article.php?c=57871

 

該名工程師透過違反合約的特定路徑入侵台哥大委託維護的主機,致使主要營運和備援系統同時當機,造成北部大斷訊。

年初台灣大哥大北部地區斷訊事件,經調查為台哥大所委託諾基亞西門子(NSN)離職工程師惡意入侵破壞,該工程師遭求刑2年。
今年初跨年夜台灣大哥大新竹以北地區發生大規模斷訊事件,影響百萬用戶通訊權益,事件發生後台灣大哥大遭外界質疑資安措施不足,導致駭客入侵造成系統當機。
今天台灣大哥大發出聲明指出,整起斷訊事件經檢調偵辦確認為台哥大電信網路系統、維護委外業者NSN離職工程師惡意入侵所致,板橋地檢署依刑法入侵電腦、破壞電磁紀錄提起公訴,具體求刑2年。
台哥大表示,北部地區使用兩套NSN門號可攜認證服務網路系統,置於兩機房內由簽有維護合約的NSN負責系統維護、保養。該工程師先前任職NSN時即負責台哥大主機維護管理,以違反合約的非法途徑入侵主機破壞原始設定,讓主要和備援兩個網路系統同時當機,造成新竹以北網路斷訊。
事發後,台哥大與NSN調查蒐證後交檢調偵辦,確認該工程師為造成斷訊的犯罪者起訴,台哥大表示,未來將做好防範措施,確保未來不再發生入侵事件。

安全鏈條的強度取決於最弱一環

安全鏈條的強度取決於最弱一環 
文/iThome (記者) 2009-10-27
http://www.ithome.com.tw/itadm/article.php?c=57683

管理機制上採取分工的目的,就是為了防弊,防弊就是安全。可是到了電腦世界,我們難道就不需要防弊了嗎?

在臺灣,我實地參觀過很多企業的資訊部門,發現他們都有很嚴重的安全問題卻不自知,甚至是營業額達數百億元的上市公司,儘管導入了種種資安設備,但是,我還是認為這些公司的資訊安全不及格。
安全的強度,就像是鏈條,整體鏈條的強度取決於最弱的那一環。一間公司的安全防線中,即便所採用的技術達到90分的水準,但管理制度只有20分,兩者相加,整體安全強度還是只有20分。這個最弱的一環其實也是很多企業常忽略的一環。
有一家上市公司將IT部門分成五個科,一個專管資料庫、一個負責網路架構建置,另外三個科則是系統開發一科、二科和三科。將使用者部門分成三群,由每個開發科負責一群。從系統分析、開發、營運、維護到除錯,都是相同一個科來負責,這正是一般企業常採行的作法。
以人事系統來舉例,人事部在每個月底,會利用系統結算當月薪資。這間公司由開發一科的小王來負責人事系統的開發與維護。
漏洞在哪裡呢?小王可以在28日晚上,偷偷修改系統程式,自動將每個人的薪水減少十元,再全部放入另外一個秘密帳號中,隔天等人事部門薪資結算完成,再將系統程式更新為原來的版本。公司薪水支出總數不變,系統程式相同,沒有人會知道小王偷了每一個人的錢。只能仰賴其他會計資料的勾稽才有可能在事後發現,而不能防範於未然。
這種讓同一個人負責開發和維護的作法,缺乏專業分工,完全違背基本任務分工的管理原則,這正是臺灣資訊部門最大的弊病,就會導致不安全。
任何超過十個人的企業,會計跟出納一定不是同一人,管錢的人不管帳,管帳的人不管錢。雖然兩個人也可能串通作弊,但是人越多,串通的難度越高,就能達到防弊的效果。如果都由同一個人負責,就完全無法制衡。
管理機制上採取分工的目的,就是為了防弊,防弊就是安全。可是到了電腦世界,我們難道就不需要防弊了嗎?在沒有電腦的年代中所建立的種種管理機制,例如專業分工這些管理制度中的基本概念,都有其意義,不會因為IT出現就需要拋棄。
但是,現在有很多企業的CIO,拚命導入各種技術性的資安產品,卻連這麼簡單的管理問題都沒有處理,缺乏分工才是會發生安全漏洞的地方。
在有制度的美國大公司中, IT部門的組織架構上,一定會將開發人員和日常作業人員分開成兩個部門,兩個部門的成員不會混合。
開發者依據需求變更請求修改程式後,就必須將程式放到獨立的測試環境中,再由作業人員進行差異分析,找出新舊版程式的異同。然後由開發者和作業者以及雙方主管共同開會,審視這些有差異的程式碼。審查完畢後,由上線人員負責編譯程式,更新系統,開發人員完全不能再接觸到程式碼。作業者無法私自修改程式內容,開發者也無從暗中更新系統,這樣就能建立安全性。企業即使無法採取這樣大動干戈的作法,至少也要做到部分分工,沒有分工就沒有安全性可言。
以上只是眾多例子中的一個。大部分人談論資訊安全時,多半只講到安全的技術,很少有人論及安全的管理。公司高層必須要有決心來推動像權責分工這樣的安全管理,而不是多花兩百萬元採購資安設備。因為整個安全鏈條的強度,取決於最弱的那一環。口述⊙范錚強,整理⊙王宏仁
作者簡介:
范錚強-中央大學管理學院特聘教授
曾任國立中央大學資管系主任多年,任內創立資管所碩士班,曾應邀到北京大學光華管理學院任客座教授。學術方面,擔任過中華民國資訊管理學會第一、二屆常務理事,以及第三、四屆理事長。范教授長期擔任多項政府專案審查人,包括經濟部軟五計畫、ABCDE計畫、企業體系電子化計畫、商業體系電子化計畫、物流運籌業電子化計畫、行政院科技顧問組旗艦計畫等。

遠東商銀、第一銀行通過ISO 27001三年重新驗證

遠東商銀、第一銀行通過ISO 27001三年重新驗證 
文/黃彥棻 (記者) 2009-10-22
http://www.ithome.com.tw/itadm/article.php?c=57503

對銀行業而言,ISO 27001資安驗證不只在內部IT流程有幫助,對企業銀行也有正面意義。因而業者都願意繼續取得ISO 27001驗證

為了砥礪企業持續在資訊安全上政策與作為上的精進,ISO 27001資安驗證在3年到期後,企業都必須進行資格完整複審一次,才可以能到第二次的資格驗證。臺灣銀行業者中,已有遠東商銀、第一銀行第一個3年資安驗證資格到期。這兩間銀行表示,因為通過ISO 27001對公司營運以及IT整體管理有大的成效,驗證到期後,都決定重新複審資格,持續取得ISO 27001資安驗證。
臺灣BSI副總經理蒲樹盛表示,以驗證公司立場來看,目前多數先前取得ISO 27001資安驗證的企業,在3年認證到期後,若沒有IT預算的壓力,多數都會重新驗證、取得第二次的3年認證資格,只有少數因為公司支出刪減,或者是當初只是為了虛應故事的單位,不會繼續取得驗證。他認為,這除了證明企業普遍重視資安外,更證明資安已經是企業營運的重要關鍵之一。
遠東商業銀行在今年6月,通過ISO 27001三年到期後的重新審驗。遠東商銀資訊管理處處長邱維川表示,金融業高度依賴IT提供各種服務,遠東商銀選擇導入ISO 27001,就是希望能提供一個內部包含IT甚至是金融產品開發上,做到安全又符合標準的作業程序。
他說:「當所有開發流程作業程序很清楚,許多產品、系統規畫和建置的時間,因為有遵循的標準,反而可以縮短開發時間、更有效率。」邱維川以2008年統計數據為例,導入ISO 27001後,作業系統與服務效率整體提升40%,系統中斷服務時間(Downtime)也大幅減少。
ISO 27001資安認證對於遠東商銀在香港分行業務拓展上,幫了很大的忙;但對內部同仁而言,因為相關管控措施已經內化到每日的工作流程,同仁不僅有同樣溝通語言,對自己的角色扮演與權責更為清楚。他認為,這些都有助於遠東商銀同仁對內、對外提供服務時,在資安上把關。
第一銀行資訊中心副總經理柯明川指出,一銀今年7月通過ISO 27001重新驗證,回首過去3年,一銀不僅大幅提高內部IT資安控管能力,對於銀行業務發展上,例如海外分行作業集中化或者新業務的申辦,都產生極高的效益。
他說,第一銀行在今年初就提出「ISO 27001三年重新驗證專案」,在ISO 27001驗證到期後,還要通過重新驗證。柯明川指出,取得ISO 27001後,對於一銀在Open Server實體管理上,有很大的進步,「連資訊風險更是逐年下降20%,」他說。
ISO 27001最大的效益反而是有利於第一銀行許多海外分行業務的推廣與申請。柯明川指出,海外分行連線作業要集中回臺北,甚至是海外分行要增加網銀等新興業務,當地政府都是因為看到一銀已取得ISO 27001認證,而同意一銀可以開辦相關業務。
第一銀行系統開發處副處長陳淑峰補充表示,金融業要申請或新增業務時,經常需要舉證公正第三者審查通過的標準,像是今年8月紐約海外分行要連線回臺北,也是因為第一銀行提出ISO 27001資安驗證的客觀標準,才得以順利進行。文⊙黃彥棻

線上購物停擺七小時 PChome:系統維護

線上購物停擺七小時 PChome:系統維護 
文/蘇文彬 (記者) 2009-10-20
http://www.ithome.com.tw/itadm/article.php?c=57657

 

儘管晚間六點半已恢復服務,但PChome長時間且在白天暫停線上購物服務,仍引發網友諸多猜測。

國內知名網路購物業者PChome線上購物今天無預警停止網購服務長達七小時。對於這次不尋常的服務停擺,PChome官方表示,只是進行系統維護。
今天上午11點,PChome線上購物平台突然無預警停擺,網友進入線上購物頁面,第一時間發現錯誤訊息。稍後PChome系統貼上公開說明,表示因系統進行維護而暫時停止交易,不僅無法下單,也看不到商品頁面陳列。晚間6點半左右,PChome線上購物終於恢復服務,但暫停服務時間長達7個小時左右。
對今天線上購物平台暫停服務,PChome行銷處公關副理楊璿表示,主要是系統正進行維護,內部正對資料庫程式作更新,所以暫停線上購物的交易,待更新完成後就會恢復網購服務。
雖然晚間6點半左右PChome線上購物已恢復,但PChome線上購物這次長時間停擺令人懷疑是否背後有重大原因。事實上記者在下午四點多與PC home連絡時,該公司當時表示,何時可以恢復上線並不確定。
由於先前曾有下單網友回應曾接到自稱PChome商店街賣家來電的詐騙電話,疑似買家個人資料外露,因此有網友就懷疑,PChome是否被駭客入侵因而需要暫停,確保系統安全。
不過經過細查,其實讓網友個人資料外洩的應該是PC home商店街裡的店家,因此,對於網友反應,楊璿表示,PChome已要求商店街賣家與下單網友聯繫時以加密方式進行,以避免交易資訊外露。
事實上,對於大型網購平台交易而言,由於網路購物交易的便利性,24小時全天候開放下單購物,需隨時確保系統穩定與安全性,以避免因系統問題產生可能的消費糾紛。例如日前戴爾烏龍標價事件,第二次出錯即因為系統問題,將原本高價的筆電以極低價格出售,引發第二次消費糾紛。
像PC home購物網站在上班時間內突然長時間停機,相當不符合大型網站系統維護或昇級方式。通常來說,為避免影響前端服務並波及到使用者,除了會在後端建立備援系統外,也會選擇在網路流量最少的時候,例如深夜時段,以及周末假期時。甚至像PC home這樣的升級方式,如果是計畫之內的系統維護,照常理也會對使用者進行事前的宣導。
例如,對於Yahoo!的拍賣、超級商城、購物中心三大電子商務平台的系統維護方式,Yahoo!公共關係部資深總監歐玫英就表示,在系統例行性的維護或更新昇級時通常不會影響到前端服務,若真因系統穩定、安全需要而暫停服務,為避免影響用戶權益Yahoo!也會事先公告時間及影響性,並選擇在清晨或假日等離峰時間進行更新、昇級。

2009年11月11日 星期三

記憶體資料庫存取效能提升6-20倍的祕密

http://www.ithome.com.tw/itadm/article.php?c=57465&s=1

2009-10-12

--幫關聯式資料庫裝上了渦輪引擎
如果你對系統的反應時間要求嚴苛,而且發現效能瓶頸總是卡在資料往返磁碟的存取過程,不妨考慮記憶體資料庫,它可以提升6~20倍的存取效率


很多線上交易的作業不容許等待,例如股票交易、電話費率計算、線上的訂票服務,或者客服系統。如果等待時間過長,或者客戶總是買不到想要的東西,滿意度就會往下掉。如果你對系統的反應時間要求嚴苛,而且發現效能瓶頸總是卡在資料往返磁碟的存取過程,不妨考慮記憶體資料庫,它可以提升6~20倍的存取效率。
少了硬碟瓶頸,資料存取大躍進
當記憶體的價格越來越平易近人,IT人員不用為了記憶體空間的運用錙銖必較,市面上也出現記憶體資料庫這類解決方案,使資料的存取省掉磁碟存取過程,效能因此加速6~20倍
徹底了解IBM與Oracle記憶體資料庫解決方案的差異
兩家的解決方案在基礎設計架構上差異不大,同樣有快取及單機兩種模式,也都提供Hot Standby備援機制。主要差異在後端串連資料庫的開放性
該用記憶體資料庫嗎?
記憶體資料庫同樣有完整的備份與復原方案,所以需考量的是調整架構的軟、硬體成本

少了硬碟瓶頸,資料存取大躍進

在硬體快速發展的情況下,記憶體的容量與處理器運算速度,以超越想像的發展大幅成長,價格也越來越便宜。過去在記憶體的容量少、價格高的時候,資料庫的應用,為了善用有限的記憶體空間,系統只能把需要使用的資料上載到記憶體,待資料處理完成之後,便釋放記憶體空間供給其他系統使用。
然而,時至今日,記憶體的取得越來越便宜,無論個人電腦或是伺服器,動輒都有數GB甚至數十GB的記憶體。這樣的變化也使得軟體運作的模式隨之改變。
由於記憶體和處理器不再是執行效能的主要瓶頸,磁碟的存取(Disk I/O)和網路反而成了拖慢效能的最大元兇。於是記憶體資料庫(In Memory Database)應運而生,它與傳統的關聯式資料庫相同,採用SQL語法、可以撰寫預存程序,提供索引、備份、復原及備援等所有關聯式資料庫具備的管理機制,也會產生快照檔(Checkpoint File)及交易日誌檔(Transaction Log)。
當企業可以把資料直接放到記憶體進行存取與計算,少了存取磁碟的往返過程,效能比起傳統的資料庫(Disk Based Database)足足快上6~10倍。
當資料存取效能影響獲利,加速就是必要
事實上,資料庫的發展已經相當成熟,企業只要搭配足夠等級的硬體設備,系統的存取效能已能滿足多數應用的要求。尤其對於內部的使用者而言,就算需要等個幾秒鐘,也是可以容許的範圍。
然而,對於即時交易型的應用就另當別論,差個幾秒影響所及,不是「等一下」的時間差而已。尤其是電信及金融產業,他們也是採用記憶體資料庫的第一批客戶。
以股票與期貨的電子下單為例,是分秒必爭的交易,客戶在乎的是「成交與否」與「價格高低」,因為有沒有買到、成交價格多少,直接影響到投資的利益。所以客戶對於系統下單的效率,要求比較嚴苛。
再者,以運動彩券為例,使用者下注某位球員、比數及賠率等都是關注的焦點,慢個幾秒可能就是「賺」和「賠」的不同結局了。這些是資料庫的存取效率有明顯影響的案例。
再就企業角度而論,電信產業的易付卡應用,餘額的計算對於企業而言是效能要求相當嚴苛的應用。電信公司不可能讓客戶在餘額扣光之後,還毫無限制地通話。所以當易付卡用戶開始撥打電話,系統就要持續地計算扣款金額、比對帳戶餘額,當餘額低於下限的時候,例如只剩50元,必須要發出訊息提醒使用者。
另一種應用是針對客戶服務部門。事實上,客戶在電話線上等待操作人員回覆的時間,與企業的服務形象正相關,同時也影響仍在線上等待接聽的客戶數量。尤其特定領域的客戶服務部門,例如銀行的信用卡、帳單的查詢或者與產品銷售相關的電話服務,動輒數百位客服人員在線上接聽電話,當客服人員接聽電話時,要能夠馬上調出客戶的資料,以因應後續的諮詢與處理。
另外,臺灣高科技製造業生產線的監控作業,需要五分鐘計算一次良率並產出報表,因此目前也有採用記憶體資料庫的企業。臺灣澳圖美德資訊長杜奕鋒解釋:「如果資料庫存取的效能存在瓶頸,可能發生上一個五分鐘的良率還沒算完,下一個五分鐘的良率又要開始計算的情況。」
這類的報表問題在其他產業也有不同程度的瓶頸,許多企業運用晚上資料庫的離峰時間,設定排程做一些運算或產出報表,然而當某一個排程因為各種因素而未成功執行,隔天的作業可能就大受影響。
傳統的解決方式──快取
在沒有記憶體資料庫之前,針對磁碟存取造成拖慢資料庫效能的瓶頸,資訊部門已衍生一些因應的方式。
就以上述所舉高科技製造業的良率計算為例,過去的作法是每5分鐘產生一個快照檔(Checkpoint File),丟到另一臺主機專門應付報表用途。然而額外建置伺服器的軟、硬體及儲存設備的成本頗高。
而多數企業比較可能採取的技巧是──增加記憶體,然後用各種快取(Cache)技巧提升效能。
在資料庫方面,企業可以把使用者經常查詢的資料上載到記憶體,以加速查詢的效能。快取的設計方式有很多種,例如當使用者查詢某一筆資料時,把時間相近或者順序相近的其他資料,連帶也快取到記憶體,那麼如果下次查詢的資料落在快取的範圍中,就不用再回磁碟去找資料。
這樣的作法,可以增加快取擊中率(Cache Hit Rate),如果資料量不大或者記憶體容量足夠,企業甚至可以選擇把特定幾個使用者經常查詢的資料表(Table)整個上載到記憶體。然而,企業需要快取的資料通常有一定的規模,所以擊中率未必能夠達到百分之百,當使用者需要的資料不在記憶體中,仍需存取磁碟。
還有一個加速查詢的方式,是將查詢結果製作成網頁。有一些Web應用,不同使用者查詢的結果大同小異,那麼開發者可撰寫程式,事先把查詢結果製作成網頁,所以使用者查詢的是早已產生好的網頁,即省掉資料庫重複存取造成的負擔。
這麼做的先決條件,是查詢結果的變異性不大,資料可能間隔數小時或數天之後,才會有所變化,那麼就可以考慮以這種方式處理。
當然,快取的技巧已經不只應用在資料層面,現在連程式及物件也有快取的解決方案。像是Oracle的Coherence及開放源碼的JCACHE及OSCache,用意都是把常用的功能或物件快取在記憶體以加速效能的設計。

快取擊中率(Cache Hit Rate)

就處理器而言,所謂的「快取(Cache)」,是指處理器架構中的「高速緩衝儲存器」,它位於處理器與記憶體之間。由於處理器的執行效能優於主記憶體,所以用快取來暫存可能頻繁存取的指令或資料,用以縮短存取 記憶體的時間。
而「快取擊中率」,指的是快取中暫存的資料是剛巧符合處理器需求的比例。例如處理器所需讀取的資料,100次中有70次在快取內找得到,便表示快取擊中率是70%。
而就軟體領域而言,「快取」指的就是記憶體。以應用程式為例,當記憶體發展到一個程度,開發者假定使用者的電腦有更大的容量可以存放資料,就會調整設計方式。例如文書或影像處理軟體,它們將更多的資料上載至記憶體,如此一來使用者存取資料時,快取擊中率便提高。
同樣的,資料庫應用也因為記憶體急速發展而有所改變,當使用者運用各種快取技巧,把使用者可能用到的資料上載至記憶體,便增 加了快取擊中率,也減少磁碟存取的機會。

記憶體資料庫與傳統資料庫相較,效能提升6~20倍
就資料的存取加速而言,無論是快取資料於記憶體,或事先產出結果頁的方式,加速的部分,其實僅在「查詢」層面。一旦使用者觸發「寫入」的行為,例如透過電子下單買/賣商品,快取的設計就發揮不了作用,系統仍需寫入資料至硬碟。
也就是說,針對「讀取」和「寫入」行為都很頻繁的應用,快取的作法幫助有限。唯有整個資料庫都搬到記憶體上運行,讀取和寫入資料的速度才能明顯加快。
加快多少呢?
根據Oracle針對自家記憶體資料庫TimesTen所做的測試,讀取1筆資料需要的時間是5微秒,也就是說1秒鐘可以查詢20萬筆資料;而更新一筆資料則需15微秒,等於是1秒鐘可以更新6.67萬筆資料。
對照專門測試IT產品並計算性價比的TPC(Transaction Processing Performance Council),在2009年以不同廠牌伺服器測試Oracle 11G標準版資料庫的存取效能,最佳的存取效能記錄是每秒完成10654.37筆交易,所謂「交易」有可能是查詢或者更新行為。
兩相對照起來,TimesTen 11G和Oracle 11G的存取效能有6~20倍的差距。
而IBM在相同軟硬體環境下,測試自家SolidDB和DB2的存取效能,更新資料SolidDB快5.26倍,而查詢資料的效能,SolidDB則快了19.27倍,也差不多是這樣的比例。
一般而言,資料庫應用通常是查詢的次數遠高於更新的頻率,以線上交易為例,使用者通常是廣泛地查詢各類商品後,才選定商品下單購物。在這樣的行為模式之下,記憶體資料庫對於存取效能的幫助更加明顯。

引擎針對記憶體特性最佳化,讀取效能比快取更好
記憶體資料庫在市場已經有幾年的時間,不過臺灣IT界對這類產品的熟悉度有限。事實上,就IBM和Oracle推出的解決方案而言,它就是一個運行於記憶體的關聯式資料庫,可以單機運行,或者建置在傳統資料庫的前端。
對於熟悉關聯式資料庫的IT人而言,導入記憶體資料庫的學習門檻並不高。
那麼記憶體資料庫何以能超越傳統資料庫,提供快6至20倍的效能呢?首要原因是它把資料存放於記憶體,因此省去往返磁碟讀寫資料的過程,克服I/O的瓶頸。
其次,企業就算利用快取機制,把讀取頻繁的資料表甚至整個資料庫都上載到記憶體,仍舊不敵記憶體資料庫的讀取效能。原因在於,記憶體資料庫調整了演算法,它的引擎已針對記憶體的特性做了最佳化的處理。
交易日誌檔存於硬碟,關機資料不漏失
即使記憶體資料庫有優異的效能,不過很多臺灣企業沒聽說過這方面的解決方案。而相關解決方案廠商最需要努力的方向,是IT人對於資料存放於記憶體的信任程度。
硬碟畢竟是比較可以信賴的儲存設備,記憶體在一般的觀念中,屬於暫存資料的設備,伺服器一旦關機,資料將隨之消失。更不用說一個打雷、閃電或是供電不穩,記憶體就有可能發生漏失資料的情況。
事實上,相關廠商也了解這方面可能造成的問題,以IBM和Oracle的記憶體資料庫而言,為確保資料的完整性,快照資料庫的Checkpoint File和記錄每筆交易的Transaction Log,仍舊是存放於硬碟,當資料有所漏失或者發生伺服器需要關機重啟的情況,透過本身系統硬碟中的快照集和交易日誌,可復原資料庫至意外事件發生前的狀態。
當然,如果經費充足企業不妨選擇以兩臺主機搭配熱備援(Hot Standby)機制,當主要資料庫無法正常運行,自動由備援資料庫接手。
以IBM和Oracle記憶體資料庫的Hot Standby機制來說,在主要(Active)資料庫的伺服器出現異常狀況而無法正常運作時,系統會自動切換至備援(Standby)資料庫的那臺伺服器,接續線上的交易作業,使企業提供的服務不至中斷。
除此之外,備援資料庫還可分擔應用程式的查詢要求(Request),達到負載平衡的效果。
傳統的備援機制,在正常的狀態下,主要資料庫的任何異動,會透過Transaction Log將內容同步至備援資料庫。然而,除了同步資料,備援資料庫的資源幾乎是閒置的。
而目前兩家的記憶體資料庫解決方案,備援資料庫在預設情況下,不允許執行新增、修改及刪除資料的工作,但是可以處理讀取的要求,也就是說,它可以分擔來自應用程式的查詢需求。
快取模式下,記憶體資料庫的後端還有一個傳統資料庫
除此之外記憶體資料庫分為快取(Cache)及單機(Stand Alone)兩種運作模式。單機模式當然就是由記憶體資料庫獨立運行,藉由存放於硬碟的日誌及快照檔確保資料安全無虞。
不過,根據IBM和Oracle的經驗,多數企業選擇快取模式,畢竟不是所有的資料服務,都需要搭配極限的回應速度,資料全部都存放在記憶體資料庫的話,相對而言投資於記憶體的成本也會墊高。
而在快取模式下,記憶體資料庫只存放部分需要加速回應的資料表,而後端串連儲存資料於硬碟的傳統資料庫,前端記憶體資料庫的任何異動,會同步至後端的資料庫。若設計上前端的記憶體資料庫只提供查詢的機制,由後端資料庫負責處理資料的新增、刪除及修改,那麼後端的異動,也可同步至前端。

適合計算不複雜且高吞吐量的資料庫應用
記憶體資料庫加速存取的效果明顯,不過,並非所有的資料庫應用都適合,分析它的特性,我們歸納出有以下3種特徵的應用,適合採用此類解決方案:
● 對資料存取的反應時間(Response Time)要求嚴苛
● 交易吞吐量大
● 計算不複雜
綜合3項特性,杜奕鋒認為:「B2C的電子商務網站可以考慮記憶體資料庫解決方案。」目前電信及金融業在國內外都有導入的案例。以電信業為例,每年耶誕、元旦及春節的簡訊量,經常超出資料庫的負荷,若善用記憶體資料庫,便可以更即時地消化簡訊用戶的需求。
那麼,哪些情況不適合採用這類的解決方案呢?目前看來,包含複雜運算的商業智慧應用,未必適合採用記憶體資料庫,原因在於記憶體資料庫目前尚不支援MPP(Massive Parallel Processing,巨量平行處理)架構。
也就是說,一個SQL指令無法由多個處理器平行處理,所以運用記憶體資料庫執行大量資料的複雜運算,效益未必明顯,因為「處理器」有可能成為效能瓶頸。
此外,如果資料庫的交易行為需要跨多個資料表,而且這些資料表的資料量很大的話,企業勢必要把巨量的資料都上載到記憶體資料庫,那麼就得評估此類解決方案的性價比(性能/價格)是否划算。
再者,雲義科技研發部協理王建興表示舉例:「現今有許多大型網站,例如Facebook運用多臺伺服器建置一個叢集(Cluster),組成一個巨量的記憶體快取,以加速網站的存取。」也是可行。
不過,可以確定的是,雖然,記憶體資料庫的可靠性未必低於傳統資料庫,但它目前仍然難以完全取代傳統資料庫。杜奕鋒表示:「最終還是需要一個硬碟保存的版本。」
再者,就成本考量,記憶體的成本高於硬碟,所以就現階段的企業案例,大多應用記憶體資料庫存放即時性需求高的資料,並不會把所有資料移往記憶體,因為這麼做並不划算。
所以對於企業而言,到底是採購多臺機器並設計快取,還是在少數伺服器上充實記憶體數量,並搭配記憶體資料庫,何者是划算的選擇,得視應用而定。這方面企業得評估多方條件,精算自身適合的解決方案。

資料「In Memory」的設計已存在多年

現今仍有不少企業擔心記憶體資料庫的可靠性 ,然而這並不是一個很新的技術。事實上,在IBM與Oracle推出的記憶體資料庫之前,市面上早已存在其他搭配記憶體資料庫的應用或產品。
只不過它們搭配的資料庫,並非傳統的關聯式資料庫,而是採用專屬的資料格式,而「In Memory」的用意,無非是希望加速存取的效能。
例如,在香港有一家稱為「MemDB」的公司,設計者專門為中小企業開發會計、零售、庫存、條碼列印及客戶管理軟體。這家廠商設計了運行於記憶體的物件導向資料庫,用它來儲存中小企業的會計、商品及客戶等資料。

不過,MemDB並不單獨販售記憶體資料庫,而是設計在應用系統中,透過程式存取。
這麼做的優點,是對於中小企業而言,系統占用的空間不多,而且使用簡單。缺點則是目前IT人員普遍對物件導向資料庫並不熟悉,而且企業若未來希望移轉MemDB中的資料至關聯式資料庫,以便自行管理,必須尋求廠商的協助。
其次,商業智慧應用產品QlikView也有「In Memory」的概念,企業匯入QlikView的資料,是以專屬格式運行於記憶體,有效加速了分析與執行的速度,而且根據廠商提供的資訊,資料壓縮比為1:20,所以可以節省記憶體的空間使用量。不過,專屬格式也代表被平臺綑綁,未來若有分享資料或轉換平臺的需求,同樣需考量資料移轉的問題。

事實上,也有一些線上遊戲業者自行實作「In Memory」的資料處理模式。因為線上遊戲玩家的位移、地圖及個人資訊,有即時更新的需求,一場戰役可能數千人同時上線,因此資訊異動的頻率很高,任何經驗值的變動都會影響戰役的勝敗。對廠商而言,記憶體化的資料存取才能應付如此巨量又即時性的需求。

這些例子顯示記憶體中的資料存取應用,已在各領域出現。只是評估解決方案時,是延續關聯式資料庫應用的產品,還是自行開發或者選擇格式專屬的封閉產品,是企業必須考量的重點。

徹底了解IBM與Oracle記憶體資料庫解決方案的差異

目前關聯式資料庫中,已正式推出記憶體資料庫解決方案的廠商,包括IBM的SolidDB及Oracle TimesTen,兩者的功能及架構大同小異。
主要的不同是IBM SolidDB支援串連多種異質資料庫,Oracle則限自家產品。SolidDB的開放性讓企業的選擇性更多,然而另一個層面也代表異質資料庫之間的語法差異,也會使開發及改寫的成本較高。Oracle因支援資料庫的限定,沒有這方面的負擔。
相同之處都有兩種模式可應用,並具備提升可靠度的機制
這兩家的解決方案,都分為快取及單機兩種模式。快取是比較多企業採取的策略,把需要加快存取速度的資料置於記憶體資料庫,而其他沒有即時性需求的部分,仍存放在傳統資料庫。而且他們都有Hot Standby,能提供企業高可用性的記憶體資料庫解決方案。
有快取及單機兩種應用模式可選擇
雖然Oracle和IBM提供快取(Cache)及單機(Stand Alone)兩種選擇,但目前多數的企業案例以前者為主。在快取模式下,記憶體資料庫只存放即時性需求高的資料,而大多數的資料仍存放於後端的傳統資料庫。
以線上交易為例,前端的記憶體資料庫,存放與交易相關、有高速存取需要的資料,由於少了硬碟的效能瓶頸,可以提供使用者更快的回應速度(Response Time)。而記憶體資料庫中的異動,透過Transaction Log仍會同步到後端的傳統資料庫。
而單機模式下,記憶體資料庫是獨立運行的系統,如果整體資料庫的資料量不大,可以考慮這樣的架構。企業不用擔心發生無法預期的狀況,導致伺服器當機或需要重新啟動時,儲存在記憶體資料庫中的資料將隨關機而消失。事實上無論快取或單機的運作模式,系統都會將Transaction Log和Checkpoint File儲存於硬碟,所以系統在重新開機後,可以恢復資料庫至關機前的狀態。
Hot Standby可供負載平衡及故障復原
事實上,從硬碟「倒」資料至記憶資料庫,算是比較沒有效率的故障復原(Failover)方式,企業可以善用IBM和Oracle提供的Hot Standby機制,當主要(Active)記憶體資料庫的伺服器,因軟、硬體種種的原因而導致無法正常運行時,能自動切換至備援(Standby)記憶體資料庫,接續線上的交易作業,使服務不中斷。
Hot Standby機制除了故障復原的作用之外,還兼具負載平衡的作用。也就是當主要伺服器正常運作時,備援的記憶體資料庫並非閒置狀態,等待切換,它可分擔來自應用程式的查詢需求,這使備援的那臺伺服器可以分擔主要資料庫的部分流量與工作。
當然,若要達到真正的負載平衡,可以設定多臺資料庫同時為「Active」狀態,不過,針對不同來源同時更新同一筆資料的衝突管理,管理者就必須手動設定管理原則。
不同之處IBM強調整合異質資料庫,Oracle較重視網格應用
分析兩家解決方案的不同之處,主要是IBM透過CDC(Change Data Capture)機制,使快取模式下,後端連接的資料庫沒有廠牌的限制。而Oracle則利用Cache Grid機制,使多臺TimesTen可以共享資料。
IBM的CDC機制使後端不限資料庫廠牌
相對於Oracle TimesTen的快取模式,限制只能搭配自家Oracle資料庫,IBM的SolidDB在最新6.3版,結合CDC(全名是InfoSphere Change Data Capture)機制,使後端可以串連各種廠牌的資料庫。
事實上,複製資料至異質資料庫的方式很多種,例如透過程式,設計資料同時寫入兩個資料庫。此外,也可以在資料庫中設定Trigger,當資料庫的內容發生任何異動,便自動觸發程式同步到另一個資料庫。然而,無論採用哪一種方案,都可能發生程式出問題或者資料庫「漏接」,導致資料庫內容不一致的情況。而且也會占用資料庫的資源。
而有了CDC 同步資料的好處,是透過Transaction Log異動資料,處理速度快,且耗用資源少。由於各家資料庫的Transaction Log格式都有一些差異,而透過CDC的運作,它介於SolidDB及後端資料庫之間,所以當任何一方資料有異動時,CDC的Access Server便解讀並轉換Transaction Log,成為目標資料庫可解讀的格式,達到資料同步的目的。

Oracle的Cache Grid架構,使記憶體資料庫可共享資料
Oracle TimesTen最新版11G推出的Cache Grid,也是有別於IBM的重要特色。Oracle一直致力於Grid(網格)的應用,在記憶體資料庫方面也不例外。在Cache Grid架構之下,TimesTen資料庫可以在各自獨立運行的情況下,又共享資料。
Cache Grid適合相同應用但資料區分成不同主機的情況。以證券交易為例,券商依北、中、南區因客戶不同而區分不同的交易資料庫,但是當原本南部的客戶經由北部的交易主機下單時,北部的資料庫會詢問Cache Grid下的所有資料庫,是否有該筆客戶資料,如果有的話,複製到本機並回覆應用程式。
記憶體資料庫加速了資料存取的速度,但Cache Grid架構下,資料若在別臺TimesTen中,透過網路傳輸會稍微折損效能。不過Oracle原廠表示,由於資料庫傳送單筆資料的訊息量很小,所以對效能的影響並不明顯。

該用記憶體資料庫嗎?

企業對於記憶體資料庫的常見疑慮在於:資料儲存在記憶體中安全嗎?斷電時怎麼辦?事實上,你還有一份足供備援的Transaction Log檔儲存於硬碟,所以並不需要擔心資料會消失。
其他問題如:備份機制為何?使用的語法還是SQL嗎?改寫系統的主要負擔何在?還有,使用上划算嗎?關於這些問題,這裡都有完整的回答。
Q1一旦斷電,資料就不見了?
這是目前大部分企業面對記憶體資料庫的最大疑慮,尤其記憶體的可信賴度遠低於硬碟。
然而記憶體資料庫除了儲存資料於記憶體,也有記錄檔存放於硬體,所以可以避免資料漏失的情況發生。
若是採用快取模式,記憶體資料庫的角色則類似「快取(Cache)」,所以相同的內容會同步到後端的傳統資料庫(Disk- based Database)。而即使在單機模式下也不用擔心,因為記憶體資料庫的交易日誌檔(Transaction Log)和快照檔(Checkpoint File)仍是儲存於硬碟,所以可以透過這些檔案復原。
Checkpoint File主要的作用是依管理者的設定,每隔一段時間對資料庫做一次快照(Snapshot),儲存資料庫當時的樣子,管理者可以利用快照集還原資料庫在某一個時間點的內容。
而記憶體資料庫在發生電腦當機或斷電的情況,在重新啟動時便透過Checkpoint File還原資料庫至最近一次快照的狀態,而從快照那個時間點到當機前的異動,則搭配Transaction Log填補,如此便可還原至斷電前的狀態。
以上是補救資料的方法,不過,相較於此,企業更在意的是線上作業停擺。
關於這方面,IBM和Oracle都推出Hot Standby的機制來因應。在正常的狀態下,主要(Active)資料庫透過Transaction Log將交易同步至備援(Standby)資料庫。除此之外,備援資料庫還可分擔應用程式的查詢要求(Request),達到負載平衡的效果。
而當系統偵測到主要資料庫的運作發生異常,即自動切換到備援資料庫,接續線上的交易作業,管理者不需要手動設定或重新啟動電腦。

Q2在快取模式下,如果記憶體資料庫和後端的傳統資料庫斷線,系統如何處理?
若在記憶體資料庫的後端串連傳統資料庫,前後端雙方的資料同步,主要還是根據Transaction Log的內容。所以,即使發生斷線的狀況,主機恢復連線時,仍可透過Transaction Log補齊斷線階段異動資料。
這部分由於TimesTen的Transaction Log已調整成與Oracle資料庫相同的格式,所以兩者的資料同步沒有困難,管理者甚至可以設定逐筆更新或者定時批次處理。
而IBM則採取開放策略,SolidDB的後端可串連多種廠牌的資料庫,而資料的同步由CDC(Change Data Capture)機制處理,它自動轉換Transaction Log的內容,以符合各廠牌資料庫的格式,達到同步的目的。
Q3與其建置記憶體資料庫,何不擴充記憶體就好?
單純把記憶體放大的作法,與記憶體資料庫相較,存取效率還是會有數倍的差距。
傳統應用記憶體快取的作法,是把讀取機率比較高的資料,快取在記憶體,如此一來,可以增加查詢的Hit Rate(擊中率),減少磁碟存取(Disk I/O)的機會。事實上,依據資料庫的設計原理,在一般情況下,使用者查詢一筆資料,資料庫通常會連帶把該筆資料前後的資料,也一併快取在記憶體,方便後續的查詢使用。
然而使用者下一次的查詢,若未在快取的範圍之內,仍必須回硬碟查詢。再加上,使用者若有「寫入」的動作,勢必得將異動更新到實體資料庫,所以尤其是針對寫入動作頻繁的資料庫應用,增加記憶體以提升存取效能的作法,效果有限。
再者,記憶體資料庫的引擎,與傳統資料庫的設計有所不同,甲骨文大中華區臺灣技術諮詢部資深諮詢經理黃久安表示:「傳統資料庫找資料的方式,需要比較多的判斷。」而記憶體資料庫已針對記憶體的特性,做了最佳化的處理,所以效能優於資料庫搭配更大記憶體快取容量的作法。
Q4它的查詢語法與傳統資料庫有差別嗎?
就IBM和Oracle提出的記憶體資料庫方案而論,他們本身都是典型的關聯式資料庫,差別僅在於存取與執行的載體,是記憶體而非硬碟。
所以,也同樣採用SQL語法,對於熟悉關聯式資料庫應用的IT人,沒有太大的學習門檻。
不過,記憶體資料庫仍無法避免傳統資料庫存在的各家SQL語法有小差異的情況。這方面IBM SolidDB遵循ANSI SQL-92標準,而Oracle TmesTen則採用Oracle PL/SQL。
Q5既有系統若改採記憶體資料庫,主要的負擔何在?
無論採取快取或單機模式的記憶體資料庫,架構調整與程式的修改是主要的工作,哪些資料表需要藉助記憶體資料庫強化存取的效能,必須定義出來的。
架構面的調整方式與成本有關,如果資料量很大的話,整個資料庫改成記憶體資料庫的成本很高。
就資料庫的成本來看,根據廠商提供的建議售價,Oracle Standard版是5,800美元/處理器、Enterprise版的售價是47,500美元/處理器,TimesTen的售價是14,500美元/處理器。而IBM SolidDB的售價大致上是35,300美元/100 Processor Value Unit(PVU),而PVU的算法又與伺服器及處理器的等級有關。
大致上看來,記憶體資料庫的售價有可能高於傳統資料庫。再加上,伺服器的記憶體價格高於個人電腦。所以資料量、記憶體、資料庫授權如何搭配的性價比最高,企業需要進一步精算。
確立架構之後,畫出程式改寫的範圍。當架構改變,資料庫連結必須隨之調整。而就IT人員而言,程式的改寫是最主要的負擔。
臺灣澳圖美德資訊長杜奕鋒分析:「傳統寫SQL語法,為了避免Disk I/O,會盡量減少磁碟存取的次數。而在記憶體資料庫中,因為磁碟導致的瓶頸因素消失,SQL的寫法或多或少會有不同。」
尤其各家資料庫的SQL語法有小差異,所以程式及SQL的改寫是免不了的。這方面原先即採用Oracle的企業,導入TimesTen的負擔會小一點,因為兩者都採用PL/SQL,不用調整SQL語法。而選擇SolidDB則有不被特定資料庫平臺綑綁的好處。

2009年11月3日 星期二

如何面對與避免Legacy Code

如何面對與避免Legacy Code 
文/iThome (記者) 2009-10-01 

http://www.ithome.com.tw/itadm/article.php?c=57107

借助極限編程的作法,可以避免程式變成孤兒,此外,有效的測試能讓程式的修改者更具信心

大多的程式人都不愛他人遺留下來的程式碼(有些人甚至是用「痛恨」等更激烈的字眼),尤其是當這些程式碼的原作者已經離職而且無法聯絡上。這樣的程式碼,有人將它們稱為「Legacy Code」,中文則譯為「既有程式碼」。

這類的程式碼的特性,並不是在於它存活了很長一段時間,而是在於已經沒有人能夠理解甚至進一步修改。從這邊可以觀察出來,Legacy Code造成的困擾,正是在這兩個面向上──一個是理解,另一個則是修改。

既有程式碼可能代表著組織長久的經驗及智慧
Legacy Code固然會造成困擾,但是它偏偏又存在。大多數的軟體開發組織,都難免面臨開發成員來來去去的情況,只要有人離開,這人所負責的程式碼,便搖身一變成為Legacy Code。

尚在維護的系統毋需多言,只要還在線上運行一天,就不能因為有人離職而把它廢掉。而共用程式碼,對於開發組織的價值同樣很大,因為它代表組織長久以來的許多經驗及智慧的結晶。這些程式碼,通常代表著可重複使用的程式碼,使用它們可以大幅提升生產力。而這生產力的來源,不單只是因為它減少了撰寫程式的時間,同時這些程式碼經過反覆地運用,早已久經測試、百鍊成鋼。

這些程式碼累積了許多的經驗,長期以來的考驗及修改,有能力應付各種可能的情況。

砍掉重練未必是最好的選擇
Legacy Code無法拋棄,然而也讓人退避三舍,因為之所以會被稱為「Legacy」,是因為已經沒有人熟悉、能夠很有把握地修改。但只要我們還無法捨棄、作廢,終究必須試著和它和平相處,甚至進一步善用它的力量。

面對Legacy Code的第一個難題,就是了解並熟悉這些既有的程式碼。程式人都不愛了解別人所寫下的程式碼,寧願重寫。這是因為重寫新的程式碼,能夠有機會運用新的技術,另一方面,心中又會有那種「昨日種種譬如昨日死」的痛快感覺。

把一切打掉全新做起,就像毀壞一切的大革命,將建立起全新的國度,而在新的國度裡,一切都是那麼美好。不過,事實上,大多數人寫的程式碼一旦過了「保存期限」,終是落到慢慢「腐敗」的局面,新的世界並未來到,而程式人只是選擇再一次「砍掉重練」。

借助極限編程的作法,避免程式碼成為Legacy Code
對Legacy Code的了解與熟悉,是處理Legacy Code的基本功課,一點都不了解,就別說要做什麼處理了。

從技術的角度來處理這個議題,可以從兩個方向努力:加強閱讀程式碼的技巧及提升所寫程式碼的可讀性。

那麼,從管理上又要如何協助面對Legacy Code呢?簡單來說,就是從管理上盡量避免程式碼變成Legacy Code,也就是避免程式碼變得「沒有人能夠理解甚至修改」。

著名的極限編程(eXtreme Programming,XP)對此便多有著墨。或許你的組織並不是採用極限編程或者是其他輕量級的開發方法,但這精神也值得多加借鏡。

XP的12項實務中,系統隱喻(System Metaphor)、程式共享(Collective Ownership)、搭檔編程(Pair Programming)、以及編程標準(Coding Standards)等,都能避免程式碼漸漸成為Legacy Code。

關鍵在於,首先,它建立起組織裡共同而且持續性的符號及撰寫風格,使得每個程式人寫出來的程式碼幾無分別,其次,避免特定程式碼總是由特定人所維護。

這兩個關鍵是有關聯的,倘若不能做到所有程式人都使用相同的符號(主要是命名方式)以及撰寫風格,那麼同一份程式碼,便很難交由其他人維護或改寫。兩人搭檔編程的作用,不僅在於讓一人專職監看,同時也有利於內含在程式碼中的資訊及知識在組織中流動。

搭檔編程不見得廣為眾人所接受,但是它的基本精神值得參考。組織除了可以透過分散程式碼的撰寫及維護責任之外,也可以透過其他的方式,讓程式碼中的資訊及知識,有效地在組織之中流動。

大家都知道,由於時間的限制,工作的交接通常僅具形式,缺乏實質作用。因此,程式碼的撰寫及維護責任,倘若能平均的分散在組織中,而且資訊及知識也能有效流動,這便是一個長期持續作用的事情,即便有人員異動,程式碼也不容易成為Legacy Code,因為沒有任何人是任何程式碼的唯一主人。

Legacy和Non-Legacy Code區分的關鍵在測試
以上是針對避免Legacy Code產生而提出的應對方向。但即使是自己所寫下的程式碼,曾經深知所有細節,也有可能因為時間的過去,而對這些細節不復記憶,這些程式碼也有可能成為Legacy Code。倘若已經存在Legacy Code時,要如何與它和平相處呢?這顯然是一門大學問。

Michael Feathers曾經對Legacy Code下了另一個定義,他認為Legacy和Non-Legacy Code區分的關鍵,在於測試。

我想,如果害怕看不懂一組數量龐大的程式碼,是淺層恐懼的話,那麼Michael Feathers便捕捉到人們對於Legacy Code的深層恐懼──害怕修改數量龐大的程式碼。

的確,具備閱讀程式碼技巧的程式人,不難快速理解一組程式碼的基本運行架構,即使規模龐大。但是,我想絕大多數的程式人,都害怕修改規模龐大的程式碼,因為你深深明白,你知道如何修改來達成目的,但是,你也知道這修改真正難的地方,不在於了解並且修改程式碼,而是難在你不知道是否會引出許多意料之外的副作用。

Legacy Code只要能正常運作的話,本身並不會造成傷害,傷害都是企圖修改時產生的。所以,Michael Feathers明白地指出關鍵在於測試。有足夠的測試資本包括為了測試而寫的程式碼和測試案例,在了解大致運作方式之後,便有信心修改,因為測試會協助你找出因修改而發生錯誤的所在。

安心修改的前提──程式能有效測試
關於這個主題,Michael Feathers有本相當著名的書籍值得推薦──《Working Effectively with Legacy Code》。在這本書中,你會看到一套完整的理論及方法。簡單來說,測試是處理Legacy Code時的重要工具,必須倚靠它做為修改的信心後盾,以檢視修改作用是否造成不預期的副作用。

除了測試之外,這本書中所建議的技巧,可以協助我們找出Legacy Code中需要被截斷的相依性。為什麼相依性需要被截斷?因為相依性是修改發生時,衝擊所會傳遞的路徑。

依據他的建議,我們必須要適當地截斷一些相依性,使得我們能夠針對我們所做的修改進行測試。因為很明顯地,倘若沒有截斷一些相依性,縮小改變影響的範圍,那麼修改所影響的層面,便有可能隨著相依性擴散出去,這麼一來,測試的難度以及需要覆蓋的範圍便高上許多。

從測試來談Legacy Code是很有趣、也很實用的觀點。的確,處理Legacy Code的難處在於修改,想要安心地修改就要能有效地測試。透過截斷相依性的技巧,來輔助測試進行,更能確保我們對Legacy Code的修改更具信心。