千年蟲是怎麼回事

今年您將會在新聞中不斷聽到關於“2000年­”的問題。而且在此過程中您會聽到很多互相矛盾的信息。還會有很多關於“世界末日”的奇談怪論在互聯網上流傳。您應該相信什麼?
在本文中,我們將討論2000年問題(也叫做Y2K問題),以便您能確切地瞭解將會發生什麼以及將要對其採取什麼措施。您還可以通過各個鏈接進行深入的探索。通過這些信息,您可以得出自己明智的結論。
什麼是Y2K問題?
Y2K問題的原因很簡單。直到前不久,計算機編程人員一直都習慣於在他們的軟件中使用兩位數的佔位符來表示日期中的年份。例如,典型的保險公司保單或信用卡的到期日期都以 MM/DD/YY(例如08/31/99)格式存儲在計算機文件中。編程人員這樣做有多個原因,其中包括:
  • 人們在日常生活中都是這樣處理日期的。當您用手寫支票並使用“斜槓”格式來表示日期時,你就是那樣寫的。
  • 存儲2位數字要比存儲4位數字少佔用硬盤空間(現在硬盤空間不算什麼事,因爲硬盤價格低廉;但是在老式的機器上這卻是個大問題)。
  • 直到前不久,一些標準機構才推薦使用4位數的日期格式。
  • 沒人會想到軟件的壽命會有那麼長。在1970年編寫軟件的人沒有理由相信該軟件在30年以後仍然在使用。

“千年蟲”是怎麼回事
­
當輸入“00”來代表年份時,兩位數的年份格式會給大多數程序造成問題。軟件不知道究竟應該把“00”理解爲“1900”還是“2000”。於是大多數軟件把它默認爲1900。也就是說,大多數編程人員編寫的代碼或者假設那兩個數字前面有“19”,或者根本就沒有考慮到世紀問題,因此將其默認爲“19”。這本不是問題,除非程序要執行很多有關日期的計算。例如要計算您的年齡,程序將取今天的日期,然後從中減去您的出生日期。如果今天的日期和您的出生日期不是跨越不同的世紀的話,這個減法會很正常的運算。如果跨越不同的世紀,則這個運算將不會正常運行。例如,如果程序認爲今天是00年1月1日,而您的出生日期是65年1月1日,則它可能會算出您今年是-65歲而不是35歲。因此,日期計算得出錯誤的輸出,軟件崩潰或產生錯誤的結果。
需要認清的重要一點是,問題的所在僅此而已。這就是2000年問題的全部內容。很多編程人員在他們的程序中使用兩位數來表示年份,因此程序的日期計算在2000年1月1日將不能得出正確的答案。問題僅此而已。
顯然,解決方案是修復這些程序,使其能正常運行。標準解決方案有下面幾個:
  • 改寫軟件代碼,使軟件能理解像00、01、02等這樣的年份指的是2000年、2001年、2002年等。
  • 通過使用4位佔位符來表示年份並且把所有軟件的代碼改寫爲能處理4位數的日期來“真正解決問題”。(關於此問題的有趣思考——爲什麼使用4位數來表示年份?爲什麼不用5位數,甚至6位數?因爲大多數人都會認爲不會有人在距今8,000年的時間後仍然使用那個軟件,這似乎像是合理的假設。現在您可以明白我們是如何陷入Y2K問題的了。)
這些修復方法從概念層面上看很容易解決——找到代碼,找出每個日期計算並將其更改爲能正確處理日期就行了。問題在於在軟件中有幾百萬個地方需要修復,每次修復不得不用手工進行,隨後還要進行測試。例如,一家保險公司可能有2千萬或3千萬行代碼在執行其保險金計算。在代碼內部可能有10萬或20萬個日期計算。根據代碼的編寫方法,編程人員可能不得不用手工進入代碼,並修改程序中使用日期的每個點。隨後他們還必須測試每個更改。在大多數情況下測試是個難題——可能需要很長時間。
假設每個更改並測試需要一天,並且需要進行10萬次更改,而一個人一年工作200天,則這意味着需要500人一年的時間才能完成所有這些更改。再假設多數公司沒有500名閒置的編程人員在那裏坐上一年來做這件事,並且公司不得不僱用這些人來從事這件事,您就會明白爲什麼修復這個問題的代價會如此昂貴。假設一個編程人員的費用是一年15萬美元(包括一切費用,如編程人員的薪金、福利、辦公空間、設備、管理、培訓等),您就會明白,若要修改一個大型程序中的所有日期計算可能要花掉公司幾千萬美元。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章