程序bug導(dǎo)致了天大的損失,要槍斃程序猿嗎?
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
號(hào)外!號(hào)外!走過(guò),路過(guò),不要錯(cuò)過(guò)!日本IT業(yè)的狗血八卦繼續(xù)獨(dú)家放送啦??! 2015年9月3日,隨著東京最高法院駁回瑞穗證券的上訴,維持二審的原判結(jié)果,一個(gè)長(zhǎng)達(dá)10年的訴訟終于畫下了句號(hào)。這個(gè)判例將對(duì)IT行業(yè)產(chǎn)生深遠(yuǎn)的影響:如果程序的bug導(dǎo)致了巨大的經(jīng)濟(jì)損失,應(yīng)該由誰(shuí)來(lái)承擔(dān)?用戶?運(yùn)營(yíng)商?還是系統(tǒng)開(kāi)發(fā)商? bug:計(jì)算機(jī)程序里的錯(cuò)誤 今天故事的主角是,瑞穗(みずほ)證券,東京證券交易所(下文簡(jiǎn)稱東證),和富士通。 各位富士通的同學(xué),雷子真的不是富士通黑啊。你們公司行業(yè)內(nèi)第一,項(xiàng)目多,所以卦點(diǎn)就多?。∫怯忠淮蝹α四銈兊母星?,看下圖能原諒我不…… 嗯,該說(shuō)的也都說(shuō)過(guò)了,下面正式開(kāi)始。 (一)瑞穗證券的烏龍指事件 如果時(shí)光能夠倒流,讓瑞穗證券的交易員田中君(化名)穿越回2005年12月8日東證開(kāi)盤前的那幾分鐘,田中君會(huì)不會(huì)選擇把自己那根烏龍指給掰斷呢? 烏龍指(fat finger):是指股票交易員、操盤手、股民在交易的時(shí)候,不小心敲錯(cuò)了價(jià)格、數(shù)量、買賣方向等。 正是由于田中君的一次錯(cuò)誤輸入,讓他所在的瑞穗證券遭受了超過(guò)400億日元的天價(jià)損失。雖然日元那面額畫得跟冥幣似的,400億日元也還是相當(dāng)值些銀子滴(按照當(dāng)時(shí)的匯率,約為人民幣27億元)。 這天,是日本公司J-Com首次公開(kāi)上市(IPO)的日子。上午9:27,距離開(kāi)盤還有幾分鐘。田中君接到一位客戶的委托:“以61萬(wàn)日元的價(jià)格,賣出1股J-Com的股票”。田中君接到委托后,在瑞穗證券的交易終端上,錯(cuò)誤地輸入了“以每股1日元的價(jià)格,賣出61萬(wàn)股”。 指令發(fā)出后,瑞穗證券的交易軟件檢查到這是一個(gè)異常的交易訂單,給出了一個(gè)警告的對(duì)話框??墒牵袢鹚胱C券交易員這種級(jí)別的操盤手,玩的就是不按套路出牌,每天這種警告對(duì)話框見(jiàn)得太多了好么。田中君甚至都沒(méi)有好好讀一下對(duì)話框里的內(nèi)容,就按下了確定按鈕。于是,這個(gè)巨大的賣單就掛在了東證的交易盤口上。 2分鐘后,田中君發(fā)現(xiàn)了這個(gè)錯(cuò)誤,趕緊試圖通過(guò)交易軟件撤銷這筆賣單??墒沁B續(xù)輸入3次撤單指令,都被東證的交易系統(tǒng)拒絕了(后來(lái)查明是由于交易系統(tǒng)的bug所致)。 田中君又迅速給交易所的負(fù)責(zé)人打電話,要求將這個(gè)賣單撤下。交易所的人表示:“我們無(wú)權(quán)操作,這個(gè)問(wèn)題只能你們自己想辦法”。 這時(shí)盤口交易已經(jīng)開(kāi)始。這個(gè)巨大的賣單首先將開(kāi)盤價(jià)定在了67.2萬(wàn)日元,然后又依次將所有買單成交,最終將J-Com的股價(jià)釘死在跌停價(jià)57.2萬(wàn)日元上。(與天朝不同,日本的漲跌停價(jià)并不是嚴(yán)格的按照10%來(lái)計(jì)算,而是根據(jù)開(kāi)盤價(jià)確定出一個(gè)整數(shù)的價(jià)格范圍) 此刻市場(chǎng)內(nèi)一片大亂。散戶們被這個(gè)巨大空單嚇得驚慌失措,以為J-Com公司出了什么問(wèn)題,紛紛跟風(fēng)拋售。而一些機(jī)構(gòu)和大戶已經(jīng)猜到是出了烏龍指,迅速在跌停價(jià)買進(jìn)。一些有節(jié)操的機(jī)構(gòu),例如德意志證券,買了幾手后覺(jué)得實(shí)在是太不厚道,自覺(jué)停止了搶購(gòu)。而大部分機(jī)構(gòu)紛紛表示:節(jié)操才多少錢一斤,有便宜不占王八蛋??!搶得不亦樂(lè)乎。 可能有同學(xué)不太懂股票交易,大概就是下面這種趕腳。 本來(lái),客戶的委托是下面這樣的...... 然而,手殘的田中君把數(shù)字輸入錯(cuò)了…… 但是,股票價(jià)格有漲跌幅限制。所以頁(yè)面發(fā)布以后,系統(tǒng)又自動(dòng)把價(jià)格改成了下面這樣...... 就算是57萬(wàn),也是非常便宜了好么!大媽,不,大戶們迅速圍觀,爭(zhēng)相爆買...... 在股市這個(gè)游戲規(guī)則里,只要你賣出的股票有人接了,那成交后就必須把貨交給買家才行。可是,J-Com的股票一共才發(fā)行了14000多股,大部分還由公司高管持有,真正在市場(chǎng)上流通的也就3000多股。61萬(wàn)股,讓瑞穗上哪里去弄?總不能自己在家里畫??! 沒(méi)有辦法,瑞穗證券只好發(fā)出了反向買入的決定,開(kāi)始和其他人一起搶購(gòu)籌碼。這樣一來(lái),J-Com的股價(jià)又被拉高到漲停價(jià)77.2萬(wàn)日元,一直持續(xù)到當(dāng)天的交易結(jié)束。在當(dāng)天的交易中,瑞穗證券一共損失了約270億日元。 受到影響的不僅僅是J-Com的股價(jià)。瑞穗證券直到當(dāng)天收盤后,才向外界披露了這一烏龍指事件。而在當(dāng)天的交易過(guò)程中,市場(chǎng)上已經(jīng)有傳聞,一家證券公司搞出了烏龍指,將有重大虧損。由于不知道是哪家券商出了問(wèn)題,所有券商股票都慘遭拋售。 這下證券公司都哭了,紛紛發(fā)表聲明:股東老爺們,真的和我沒(méi)關(guān)系啊......然并卵。其中最慘的是J-Com上市的主要發(fā)行商——日興證券,股價(jià)一度狂跌了8%。而這股不安情緒也影響了所有投資者。當(dāng)天收盤時(shí),日經(jīng)指數(shù)大跌了301點(diǎn)。 (二)事后收?qǐng)?/p> 首先是成交單的交割問(wèn)題。不存在的股票怎么交割啊?雖然瑞穗證券通過(guò)回購(gòu),搶回了大部分的賣單,但還是有9萬(wàn)多股被其他機(jī)構(gòu)和散戶買走了。根據(jù)規(guī)則,瑞穗必須在3天之內(nèi)交貨(日本的交割日是T+3)。前面說(shuō)過(guò),市場(chǎng)上一共才流通了3000多股J-Com的股票,這9萬(wàn)多股真是逼死瑞穗證券也拿不出來(lái)啊。 最后經(jīng)過(guò)協(xié)商,買賣雙方同意用現(xiàn)金來(lái)結(jié)算。清算的價(jià)格定在了每股91萬(wàn)日元——這是瑞穗證券敲下烏龍指前一刻的股票價(jià)格。這次現(xiàn)金交割又讓瑞穗證券雪上加霜,損失擴(kuò)大到400多億。 至于當(dāng)事人田中君,似乎并沒(méi)有受到太嚴(yán)厲的懲罰。瑞穗證券至今也沒(méi)有公布當(dāng)事人的真實(shí)姓名,只知道是一名男性證券經(jīng)紀(jì)人。事件發(fā)生時(shí),正趕上日本公司要發(fā)年終獎(jiǎng)。就因?yàn)樘镏芯囊粋€(gè)錯(cuò)誤操作,一下子把公司一整年的利潤(rùn)都給干掉了,讓瑞穗證券所有員工的年終獎(jiǎng)都泡了湯。有傳聞,田中君成了瑞穗證券里“最討厭的人排行榜”的No.1。 那些趁火打劫的機(jī)構(gòu)大戶也受到了指責(zé)。事后查明,共有22家機(jī)構(gòu)在此次烏龍指事件中獲利。其中瑞士銀行,摩根斯坦利,日興證券,雷曼兄弟,瑞士信貸,野村證券這六家機(jī)構(gòu),從這次事件中一共瓜分了168億,占瑞穗證券損失的40%還多。 盡管這錢來(lái)的不太光彩,可畢竟是按照市場(chǎng)規(guī)則賺來(lái)的,所以金融監(jiān)管部門只能從道德層面對(duì)這些公司進(jìn)行譴責(zé)而已。有人提議,讓這些公司把賺到的錢吐出來(lái)。這些公司表示:這樣做,等于把公司的利潤(rùn)白白送給別人,沒(méi)法向自己的股東交代啊。
后來(lái)在各方的調(diào)節(jié)下,一部分獲利的證券公司同意把錢拿出來(lái),成立一個(gè)保護(hù)投資者利益的基金,這是后話了。 在這次事件中,東證交易所受到了最多的質(zhì)疑。首先瑞穗證券在意識(shí)到錯(cuò)誤掛單后,曾經(jīng)多次發(fā)出取消的指令,但都被交易所的系統(tǒng)所拒絕,這顯然不符合系統(tǒng)的交易規(guī)則。其次,在瑞穗證券與東證負(fù)責(zé)人取得了聯(lián)系的情況下,東證方面仍然放任這筆賣單繼續(xù)執(zhí)行,有監(jiān)管不力之嫌。事后,東證社長(zhǎng)鶴島琢夫引咎辭職。 瑞穗證券方面認(rèn)為,正是由于東證的過(guò)錯(cuò),才讓自己蒙受了400億日元的損失。這個(gè)錯(cuò)誤理應(yīng)由東證來(lái)買單。東證的觀點(diǎn)是:你自己烏龍指敲錯(cuò)了指令,憑啥賴在我身上?對(duì)此,瑞穗證券回?fù)簦喝∠灰字噶畎l(fā)出之前的那段時(shí)間,產(chǎn)生的損失自己認(rèn)了。但是還沒(méi)成交的賣單為啥不讓人家撤銷? 兩個(gè)公司之間扯來(lái)扯去,也沒(méi)把這個(gè)問(wèn)題談攏。于是,2006年9月,瑞穗一紙?jiān)V狀,把東證以及交易系統(tǒng)的開(kāi)發(fā)商——富士通告上法庭。就這樣,漫長(zhǎng)的訴訟開(kāi)始了。
(三)法庭訴訟 對(duì)于這個(gè)案件,事實(shí)已經(jīng)很清楚了:由于交易所的系統(tǒng)bug,在特定的條件下,會(huì)發(fā)生不能撤單的現(xiàn)象。經(jīng)過(guò)詳查得知,這個(gè)bug是富士通的技術(shù)人員在2000年某次程序修改時(shí),不小心埋進(jìn)去的。 本來(lái),程序修改后必須經(jīng)過(guò)嚴(yán)格的回歸測(cè)試,來(lái)驗(yàn)證對(duì)其他業(yè)務(wù)流程有沒(méi)有影響??墒遣粌H富士通忽略了這個(gè)測(cè)試,東京證券交易所在系統(tǒng)驗(yàn)收測(cè)試(UAT)的時(shí)候,也疏忽了這方面的內(nèi)容。結(jié)果,炸彈在這個(gè)時(shí)間點(diǎn)被引爆了。(下圖是包含了bug的cobol代碼) 圍繞著這個(gè)事實(shí),第一個(gè)爭(zhēng)論點(diǎn)是:東證和富士通,應(yīng)該為瑞穗證券的損失負(fù)責(zé)嗎? 起初,東證還想耍賴,把錯(cuò)誤全部推在富士通身上。東證主張:就算是交易系統(tǒng)的bug導(dǎo)致了瑞穗證券的損失,那也是富士通的錯(cuò)。因?yàn)槲业南到y(tǒng)需求里面,是明確規(guī)定了可以撤單的。富士通開(kāi)發(fā)的程序沒(méi)有符合我的需求,才導(dǎo)致了這樣的結(jié)果。 對(duì)于東證的這個(gè)主張,東京地方法院判定:這個(gè)系統(tǒng)的主要責(zé)任人是東證。富士通只是東證的系統(tǒng)供應(yīng)商,屬于連帶責(zé)任人。無(wú)論是主要責(zé)任人還是連帶責(zé)任人,如果被證明犯有重大過(guò)失,都應(yīng)該做出賠償。 那么,程序的bug算是“重大過(guò)失”嗎?這很難說(shuō)。一個(gè)系統(tǒng)里有沒(méi)有隱藏的bug,是沒(méi)法從理論上證明的。就算是測(cè)試再?gòu)氐祝矔?huì)有測(cè)不到的bug流出來(lái)。所以在法律上,通常不會(huì)把所有因?yàn)閎ug導(dǎo)致的損失都?xì)w罪給程序開(kāi)發(fā)商。否則的話,世界上最大的bug生產(chǎn)商——微軟,早就賠得連內(nèi)褲都不剩了。 這就帶出了本案第二個(gè)爭(zhēng)論焦點(diǎn):什么樣的bug才算是“重大過(guò)失”?法院給出了判斷的標(biāo)準(zhǔn)——這個(gè)bug是不是很容易被發(fā)現(xiàn)。 于是,控辯雙方都找來(lái)了由資深程序猿和攻城獅組成的磚家組,在法庭上撕成一團(tuán)。 穗瑞磚家組:臥槽,這個(gè)bug簡(jiǎn)直太明顯了好么?連這個(gè)都測(cè)不粗來(lái),請(qǐng)問(wèn)貴司人員的編程,都是音樂(lè)老師教的嗎? 富士通磚家組:異議あり!這么復(fù)雜的條件組合,你特么能一下子就找出bug來(lái)?。∧銈償〈蹬1屏诵胁恍?! 雙方的磚家團(tuán)吵來(lái)吵去,誰(shuí)也說(shuō)服不了誰(shuí),干脆,在法官面前開(kāi)始review起程序代碼來(lái)了。 而此刻的法官,表情是很鎮(zhèn)靜的...... 但是在法官的心里,簡(jiǎn)直有一萬(wàn)匹草泥馬奔騰而過(guò)啊! 爭(zhēng)辯到最后,一臉懵逼的法官表示:你們說(shuō)得好像都挺有道理的......但是意見(jiàn)相反,所以也不能判定成容易發(fā)現(xiàn).......富士通就不用賠了! 最終,東京地方法院判定:程序bug并不能算是重大過(guò)失,由這部分導(dǎo)致的損失無(wú)需賠償。但是,在瑞穗證券電話聯(lián)絡(luò)東證交易所后,東證未能履行中止異常交易的職責(zé),屬于重大過(guò)錯(cuò)方。另一方面,事情的起因是由于瑞穗證券的烏龍指,所以瑞穗證券也不能完全免責(zé)。從電話聯(lián)絡(luò)那個(gè)時(shí)間點(diǎn)以后產(chǎn)生的損失,由東證承擔(dān)70%,107億日元。 瑞穗證券和東證都對(duì)這個(gè)審判結(jié)果表示不滿,上訴到東京最高法院。2015年9月3日,東京最高法院駁回上訴,維持原判結(jié)果。長(zhǎng)達(dá)10年的訴訟終于塵埃落定。 (四)深遠(yuǎn)影響 看到這里,程序猿和攻城獅應(yīng)該是松了一口氣吧,終于不用為自己寫的bug而買單了。 但是且慢!根據(jù)這個(gè)判例,“bug是否很容易被檢測(cè)出來(lái)”這一點(diǎn),將會(huì)成為今后類似訴訟的判斷基準(zhǔn)。一旦被判定成重大過(guò)失,程序猿們可真是欲哭無(wú)淚了。 現(xiàn)在問(wèn)題來(lái)了:身為程序猿,誰(shuí)也不能保證自己的代碼里沒(méi)有bug。該如何做,才能避免陷入到這種境地中呢? 雷子覺(jué)得,既然無(wú)法從理論上證明程序里所有的bug都被檢測(cè)出來(lái),那么,一些行業(yè)內(nèi)公認(rèn)的指標(biāo),例如測(cè)試時(shí)的case密度,bug密度等,很可能會(huì)成為測(cè)試是否充分的判斷依據(jù)。(對(duì),就算沒(méi)有bug我們也要制造出來(lái)?。?/p> 此外,bug對(duì)應(yīng)得是否充分,也會(huì)成為判斷的重要基準(zhǔn)。一個(gè)bug被發(fā)現(xiàn)后,有沒(méi)有進(jìn)行深刻的挖掘也是很重要的,即所謂的“橫展開(kāi)”??吹竭@個(gè)詞,估計(jì)很多同行會(huì)做噩夢(mèng)吧!這個(gè)話題很大,雷子今后另起文章和各位同行探討。 還有一點(diǎn)不要忘記,無(wú)論是測(cè)試結(jié)果也好,還是bug的對(duì)應(yīng)結(jié)果也好, 要留證據(jù)! 要留證據(jù)! 要留證據(jù)! 重要的事情說(shuō)三遍。 本案也讓東證認(rèn)識(shí)到,舊交易系統(tǒng)的老朽化以及bug過(guò)多等缺陷。隨著近年來(lái)程序化交易的盛行,舊系統(tǒng)已經(jīng)越來(lái)越無(wú)法滿足現(xiàn)代證券交易的需要。比起倫敦和紐約等地的證券交易所來(lái),當(dāng)時(shí)東證系統(tǒng)的響應(yīng)時(shí)間要慢100倍啊。 以瑞穗證券烏龍指事件為契機(jī),導(dǎo)出了2010年金融行業(yè)的重大項(xiàng)目——東證次世代的交易系統(tǒng)“arrowhead”的構(gòu)建。這個(gè)新系統(tǒng),依然由富士通負(fù)責(zé)開(kāi)發(fā)。 法庭上撕得面(ji)紅(chi)耳(bai)赤(lian),回過(guò)頭來(lái)該干啥干啥——東證和富士通,還真是一對(duì)好基友?。?/p> 本文一部分圖片來(lái)自網(wǎng)絡(luò) 聲明:本文為本站編輯轉(zhuǎn)載,文章版權(quán)歸原作者所有。文章內(nèi)容為作者個(gè)人觀點(diǎn),本站只提供轉(zhuǎn)載參考(依行業(yè)慣例嚴(yán)格標(biāo)明出處和作譯者),目的在于傳遞更多專業(yè)信息,普惠測(cè)試相關(guān)從業(yè)者,開(kāi)源分享,推動(dòng)行業(yè)交流和進(jìn)步。 如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)?jiān)髡呒皶r(shí)與本站聯(lián)系(QQ:1017718740),我們將第一時(shí)間進(jìn)行處理。本站擁有對(duì)此聲明的最終解釋權(quán)!歡迎大家通過(guò)新浪微博(@測(cè)試窩)或微信公眾號(hào)(測(cè)試窩)關(guān)注我們,與我們的編輯和其他窩友交流。
該文章在 2024/1/13 17:56:59 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |