最近在做介面測試的時候遇到乙個不算太大的問題,但卻值得深思,先說說問題的背景,還有我一步步修復這個問題的過程。
大家都知道,當應用程式對資料庫進行寫操作的同時往往都會記錄下最後一次寫操作的時間,有時候我們需要對這個時間進行檢查,既檢查我執行了寫操作以後,我期望的時間欄位被更新為當前時間。好像很簡單嘛,既然期望他是當前時間,那我就判斷查詢到的時間是不是當前時間就好了,於是:
privatevoidcheckcurrenttime(date date)
毫無疑問,這樣是絕對錯誤的,為什麼?因為當你呼叫這個方法判斷某個時間是不是當前時間的時候,其實它已經不是當前時間了,因為它已經過去了,儘管可能只有毫秒級的誤差,程式判斷不像人那樣智慧型,它是精確的,稍有差別也是錯誤,所以用這個方法判斷顯然是不行的。好吧,那麼改改,我給它乙個誤差範圍:
privatevoidcheckcurrenttime(date date)
嗯……這樣應該沒什麼問題了,先解釋下,這裡判斷了兩個條件:首先,我要檢查我需要判斷的時間是在真正的當前時間之前的;其次,我規定它們的誤差應該在
5秒以內(
5秒鐘已經很長了,什麼事情也應該能做完了,當時我是這麼想的)。的確,在理想情況下這樣的判斷似乎沒什麼問題,然而,情況通常都是不怎麼理想的。經過這樣的改變以後,開始幾天每天執行都沒問題,可是,突然有一天,關於當前時間判斷的測試全部都掛掉了,這怎麼可能?沒道理啊,開發也沒有改動過相關的**,這些測試**也沒有人改過,
?經過除錯,最後發現,原來是因為資料庫的伺服器時間有問題,比正確的時間早了大概有七八分鐘,問題終於找到了,幸好不是程式本身的問題,好吧,下點血本,把誤差時間調大一點——十分鐘!這下好了,所有測試又都可以跑通了,我想這下總應該不會出問題了吧。
的確,在相當長的一段時間裡,這個判斷方法工作良好,但是,我還是要說但是,突然有一天,它們又都掛掉了(是不是很耳熟?),真是沒天理啊,用不著反覆折磨我吧!沒辦法,除錯吧,結果卻讓我哭笑不得。還是伺服器時間的問題,這次不是又因為超出了誤差範圍而掛掉的,相反,要檢查的時間和真正的當前時間誤差只有幾秒鐘,那為什麼會掛掉呢?因為它:
date.before(now)
,這裡判斷被檢查的時間一定要早於當前時間,上面提到了伺服器的時間是可能和真實的時間有誤差的,可誰也不能規定伺服器時間的誤差就一定要是早於正確時間的啊!於是我又改進了一下檢查當前時間的方法:
privatevoidcheckcurrenttime(date date)
這裡就只檢查兩個時間差的絕對值在規定的範圍內了,應該不會再有什麼漏洞了吧……
雖然只是乙個小小的時間判斷方法,然而令我沒想到的是它涉及的因素是如此多,細細想想這個方法改進的過程,我不禁冒出一絲冷汗,到底在我們的測試中還有沒有類似的隱患存在?原本看似合情合理的判斷,卻會因為某些沒有預料到的外部錯誤而變得不堪一擊,甚至有些滑稽。這都是因為我們平時思考問題的方式太過正常化了,所以才會被所謂的常規思維一步一步導向錯誤,看來作為測試人員,還真的是要時刻提醒自己——我應該是不正常的!
C語言(思維陷阱)
程式設計開發的初學者若能掌握 機器思維 的技巧往往能事半功倍,但熟練掌握該技能後卻要避免陷入思維陷阱。拓展 所謂機器思維,就是貼近計算機執行的原理,充分利用計算機的優勢。電腦最大的特點就是效率高,最擅長的事情就是迴圈操作,因此我們能使用迴圈來處理很多事情。但是一旦形成這樣的思維習慣,也許就會陷入思維...
SEO思維陷阱 收錄與索引傻傻分不清
seo的收錄量一直是站長們常常關注的資料之一,而在特殊的情況下我們也會產生一系列的疑問,例如 收錄量以及索引量究竟是不是乙個概念?很多人認為site加 所查詢出來的資料就是收錄,其實不然,岑輝宇本以為目前大部分seoer對這些概念應該有乙個清晰的思路,但前兩天在群裡乙個群友提出這乙個問題,為什麼通過...
關於SEO思維陷阱 收錄與索引傻傻分不清
收錄量 索引量?索引量就是收錄量?這個問題丟擲來,估計會讓很多站長矇圈 傻傻分不清。大多情況下來看,很多站長都把索引量當成收錄量,混為一談,這也是 seo優化中的思維陷阱。當時在qq群的交流中,岑輝宇用了乙個比喻來進行分析,收錄就像交女朋友一樣,而建立索引就像結婚生子一樣,簡單來說就是女朋友與老婆的...