前幾天看到一個(gè)很有趣的微博(見圖1:)當(dāng)然這事兒對(duì)發(fā)博的人肯定沒有趣,又查了一下閏秒的概念:

  原來(lái)我們的時(shí)間計(jì)算有兩種方式,一種是類似于古人看太陽(yáng)位置或者用日冕的“天文法”,獲得的時(shí)間稱之為世界史;一種是利用原子振蕩周期計(jì)算的“原子法”,我們生活中用的時(shí)間都是第一種,而計(jì)算機(jī)系統(tǒng)則大量使用第二種。在大部分場(chǎng)合這倆時(shí)間完全一致,但是由于現(xiàn)在地球越轉(zhuǎn)越慢(或許歲數(shù)也大了 Orz),所以還是有微小的誤差,為了平衡這種誤差,由國(guó)際計(jì)量局統(tǒng)一規(guī)定在年底或年中(也可能在季末)對(duì)協(xié)調(diào)世界時(shí)增加或減少1秒的調(diào)整。2012年7 月1日我們見證了一個(gè)閏秒(北京時(shí)間為7:59:60)。


圖1

  合著閏秒是計(jì)時(shí)領(lǐng)域的一種調(diào)整,但是這個(gè)調(diào)整卻給全世界IT系統(tǒng)帶來(lái)了麻煩,除了微博中提到的芬蘭航空管理系統(tǒng),許多使用Linux系統(tǒng)服務(wù)器也發(fā)生了問題,這是因?yàn),Linux內(nèi)核2.6.29之前版本存在bug,在進(jìn)行閏秒調(diào)整時(shí)可能會(huì)引起系統(tǒng)時(shí)鐘服務(wù)ntpd進(jìn)程死鎖。許多使用Linux服務(wù)器的網(wǎng)站都遇到了問題(不過(guò)看報(bào)道,都是國(guó)外網(wǎng)站,國(guó)內(nèi)網(wǎng)站似乎很平靜,難道我們的網(wǎng)站都是用Windows Server?)

  類似的案例,在我國(guó)還有一個(gè)事件,由于出租車計(jì)價(jià)器芯片沒有2月29日,廣州的上千輛出粗車在這天趴窩。

  與時(shí)間有關(guān)的經(jīng)典的bug當(dāng)然還是“千年蟲”了,由于采用了兩位紀(jì)年用于節(jié)省存儲(chǔ)空間,全世界的軟件在2000年1月1日都可能會(huì)宕機(jī)(系統(tǒng)無(wú)法識(shí)別00代表2000還是1900),在那個(gè)互聯(lián)網(wǎng)還不發(fā)達(dá),操作系統(tǒng)不能偷偷在后臺(tái)打補(bǔ)丁的年代,各大軟件公司都在四處郵寄補(bǔ)丁光盤,并在惴惴不安中渡過(guò)了新年。

  從這些案例我想到的是測(cè)試設(shè)計(jì)的問題:如何優(yōu)化我們的時(shí)間相關(guān)數(shù)據(jù)設(shè)計(jì)?

  首先,時(shí)間數(shù)據(jù)的等價(jià)類劃分應(yīng)該更加細(xì)致,除了一個(gè)有效時(shí)間和一個(gè)無(wú)效時(shí)間,還應(yīng)該有閏年、閏月、閏秒數(shù)據(jù)。由于時(shí)間是廣泛相關(guān)數(shù)據(jù),縱使被測(cè)軟件可以正確處理,被測(cè)軟件相關(guān)的其他軟件(操作系統(tǒng),數(shù)據(jù)庫(kù),Java虛擬機(jī)等)也有可能會(huì)出問題(例如Linux內(nèi)核的那個(gè)bug),所以這種廣泛測(cè)試是必要的。這種測(cè)試可以作為一個(gè)單獨(dú)的檢驗(yàn)用例或者探索測(cè)試執(zhí)行。

  其次,時(shí)間的廣義邊界值測(cè)試。大部分測(cè)試者都知道測(cè)試輸入框的顯性邊界值,但是很少有人去測(cè)試時(shí)間這個(gè)隱形邊界值。時(shí)間可能不是我們手動(dòng)輸入的,但是它還是每時(shí)每刻在做為隱形輸入在影響著我們的系統(tǒng)。而當(dāng)時(shí)間處于交界點(diǎn)(跨年,跨天,或者某個(gè)時(shí)刻)時(shí),問題會(huì)發(fā)生。例如我在過(guò)去測(cè)試中遇到每天早上 8點(diǎn)整某個(gè)信息管道會(huì)丟失數(shù)據(jù)。

  再擴(kuò)展一點(diǎn)是,我做測(cè)試時(shí),經(jīng)常揪住省份這個(gè)選擇框不放,別看這是簡(jiǎn)單的錄入信息(提問,中國(guó)有多少個(gè)省級(jí)單位?如果不知道的話,自己去 baidu吧),要么少了,要么多了,要么名字不對(duì),有相當(dāng)?shù)臋C(jī)會(huì)發(fā)現(xiàn)問題。新浪微博不也出過(guò)“湖北省省會(huì)是哪里”回答武漢,系統(tǒng)提示“您的回答有誤”……這種烏龍事件嗎。

  時(shí)間,省份這都是非常簡(jiǎn)單的輸入,但是這都只是看似簡(jiǎn)單而已,內(nèi)里還是有很多門道,因?yàn)樗麄兩婕暗狡渌I(lǐng)域的知識(shí):政治、人文,地理,歷史等等。

  所以,測(cè)試(尤其是黑盒測(cè)試,手工測(cè)試)是一個(gè)入門容易,做好難的職位,單單是時(shí)間這么常見的數(shù)據(jù),有很多潛在知識(shí),從設(shè)計(jì)和分析上都需要注意,更何況復(fù)雜的業(yè)務(wù)系統(tǒng),或者專業(yè)軟件。所以終歸測(cè)試是離不開人的因素的,測(cè)試時(shí)要“動(dòng)腦子”,要不斷提高理解,要不斷的學(xué)習(xí),而不是只對(duì)著用例文檔一行行的做機(jī)器人:這種機(jī)器人工程師,早晚會(huì)被機(jī)器人測(cè)試腳本取代。而那些真正動(dòng)腦子的工程師,才擁有未來(lái)。

  ps:寫完這篇文章的時(shí)候,看到一篇報(bào)道說(shuō)“美國(guó)政府表示閏秒的推行不是好事,他們指出,因?yàn)檫@個(gè)閏秒將會(huì)導(dǎo)致很多計(jì)算機(jī)系統(tǒng)運(yùn)行困難。目前,國(guó)際電信聯(lián)盟(ITU)已經(jīng)接受美國(guó)提出的取消閏秒的提案。不過(guò)關(guān)于這個(gè)提案的討論活動(dòng)預(yù)計(jì)要推遲到2015年。”——這聽起來(lái)好耳熟啊:“我們的軟件無(wú)法實(shí)現(xiàn)這樣的功能,所以請(qǐng)取消這個(gè)需求”……