作者:鄒溪源,長沙資深互聯(lián)網(wǎng)從業(yè)者,架構(gòu)師社區(qū)特邀嘉賓!
一
1)
有一天,我的朋友Y童鞋分享了他正在做的一個內(nèi)部開源項目,這個開源項目從外表上看,跟目前市場上那些代碼生成器本沒有特別大的區(qū)別,所以我興趣并不大。
在他給我介紹了一下具體需求之后,我才體會了他的意思,并提起了那么一丟丟興趣。。
畢竟,聽起來有點“鬼扯”,為啥?因為,他居然試圖依靠這個項目來生成”單元測試“。。。。
他:定義好數(shù)據(jù)庫表和結(jié)構(gòu),然后就生成邏輯方法和代碼、以及界面,還同時把“單元測試”代碼給生成了,免得程序員要花時間去思考代碼邏輯之余,還要想怎么寫出可測試代碼。
我:這樣生成的代碼還有靈魂么。。
他:有啊,編寫高可測試代碼,不就是我輩中人,這些有追求的碼農(nóng)應(yīng)該實現(xiàn)的目標么?
我:這種模式怎么越看越想埃里克埃文斯大佬說的“Smart UI”模式啊。。
他:你倒這么說,也有那么一點點像。
2)
我:當(dāng)然,能夠生成單元測試倒也可以。畢竟大部分單元測試看起來似乎是一模一樣的。無外乎就是“ Arrange\Act\Assert”,AAA操作猛如虎,測試代碼一把梭。
他:我這個東西,生成的代碼,除了看起來提高了單元測試覆蓋率之外,其實,并不能提高代碼的質(zhì)量。
我:是什么逼得你要花時間去開發(fā)這樣的代碼生成器呢?
他:還不是被這班菜雞開發(fā)者們產(chǎn)出的劣質(zhì)產(chǎn)品鬧騰的。我不是想著省測試的錢,又能提高產(chǎn)品的質(zhì)量么?就自然而然只能靠壓榨“程序員”來實現(xiàn)了。但是讓我來對這么多人的代碼進行審查,還是太難了。這不,用單元測試來操作,不就可以了?
3)
我:你們太難了。為啥這么趕???
他:這不是甲方爸爸要加需求,他說得倒是好:加需求也就幾行代碼,多簡單。但是我們這邊,就得忙翻天,太特么累了。
我:那能不能多招幾個測試?
他:端到端測試,只是看起來將缺陷扼殺在搖籃而已,實際上。。隱藏在冰山下的缺陷呢。??蛻艟褪切“资蟀?。再說,我們現(xiàn)在家業(yè)太小,測試有兩個了,再招就請不起了。。功能是不能少的,bug是不能多的,我只能想想單元測試這種辦法了。
我:好吧。。我們也一樣。。
二
1)
之前有個朋友老張介紹了一個故事,仿佛跟這個有點類似。他有幸參與了一個交通信息化的項目,這個項目的業(yè)主是國企單位,屬于“體制內(nèi)”的企業(yè)。
在過去一波有一波的信息化發(fā)展過程中,這些體制內(nèi)的企業(yè)仿佛成為了許多IT企業(yè)競相薅羊毛的對象。為啥,國企項目多、錢也不少,關(guān)鍵是國企對軟件質(zhì)量要求不高啊。
許多企業(yè)借助國企項目,他們依托所謂“快速上線”的神器,將中華民族艱苦奮斗的精神發(fā)揮到了極致,公司能夠在最短的時間內(nèi),將原本停留在腦海里的軟件,快速的轉(zhuǎn)化成為實現(xiàn),并部署到甲方爸爸的現(xiàn)場環(huán)境中。
至于軟件的質(zhì)量、軟件的工程化水平,對不起,不重要?用戶體驗?性能?功能可用性?重要么,不重要。先快速上線回款再說。于是,這些企業(yè)獲得了業(yè)績的騰飛,老板們賺得盆滿簸贏,好不自在。
而且老板們還會吹:我們公司最大的優(yōu)點,就是在逆境下生存的能力,能夠在最短的時間消化需求,做出最符合客戶需求的軟件。
好吧,仿佛這也是軟件工程的一種方向?快速開發(fā)。。。。
2)
然后,有那么幾年,市場突然間就“做爛“了。一方面,國家將投資方向重點放在了房地產(chǎn)領(lǐng)域,對信息化的投入也逐漸收緊了許多;另外一方面,企業(yè)過去匆忙上線了太多的軟件系統(tǒng),不同軟件系統(tǒng)之間的對接溝通困難,操作過程缺乏連貫性,使得基層員工開始抗拒這些”看似“能夠帶來效率提升,卻容易出現(xiàn)各種質(zhì)量問題導(dǎo)致自己過去幾天工作量返工的所謂”信息化“系統(tǒng);另外,大家也都很清楚,效率提升其實帶來的是”裁員“,首先被裁的…
總之,有那么一段時間,國企對信息化是“棄若敝屣”的。
三
1)
但,隨著“互聯(lián)網(wǎng)”和“共享出行”的興起,又讓這個概念重新熱炒了起來。
老張他們公司也有幸接到了一個這樣的項目,公司還是一家非常大的出租車公司,擁有二十多家子公司,員工超過2萬人。這個項目的目的是打通出租車和旅客的關(guān)系,借助于手機實現(xiàn)快速出行,同時打通企業(yè)內(nèi)部信息孤島,讓總公司領(lǐng)導(dǎo)能夠第一時間看到各種數(shù)據(jù)的流轉(zhuǎn)情況,為建立科學(xué)決策提供依據(jù)。
老張被選為這個項目的負責(zé)人。在項目啟動會上,他意氣風(fēng)發(fā),向業(yè)主和公司老板們保證,將帶領(lǐng)公司團隊與甲方團隊一起,以飽滿的姿態(tài)打響這場戰(zhàn)役,為業(yè)主的業(yè)績騰飛貢獻自己的一份力量。
然而,但項目啟動后,他才深刻的明白這究竟是一個怎樣的坑。
2)
首先是業(yè)主關(guān)系,由于業(yè)主是一家涉及大幾萬員工和二十幾家子公司的大型集團公司,需要梳理的業(yè)務(wù)表單非常復(fù)雜,業(yè)務(wù)流程和體系,遠比甲方爸爸預(yù)想的要復(fù)雜得多。
其次是開發(fā)周期短,不知從何時起,國企對于軟件系統(tǒng)的印象就是“簡單、容易、很快就能實現(xiàn)”,仿佛一個需求只要說出來,這般不要命的程序員們就能很快的實現(xiàn)功能。當(dāng)老張跟他們提到需求太多,根本做不完時,甲方爸爸甚至說:怎么可能有做不出來的軟件系統(tǒng),是不是你能力不行?
再次是外部系統(tǒng)多,由于不同的子公司往往采購了不同的系統(tǒng),要統(tǒng)一對接到一個系統(tǒng) 。
還有就是涉及的技術(shù)點多,需要在許多領(lǐng)域進行專門的技術(shù)攻關(guān),由于公司暫時缺乏相關(guān)資源,使得開發(fā)過程屢屢收到阻塞。
3)
經(jīng)過長達幾個月的需求調(diào)研,老張編寫了一份超過一千頁紙的需求規(guī)格說明書,并獲得了業(yè)主的批準,但項目正式開始時,他卻只獲得了短短半年的開發(fā)周期。此時,他手上能夠調(diào)動的開發(fā)者資源,才不過10余人。
為了干完這個項目,他和項目團隊的成員不得不犧牲周末和假期,辛苦堅持了半年,才把項目功能都開發(fā)完,但在項目實施環(huán)節(jié)時,由于子公司與總公司的意見不統(tǒng)一,根本用不起來。
最終,項目崩盤,公司倒閉,甲方將近一年的投入近乎白費。老張和項目團隊也白白辛苦了大半年,還得去勞動仲裁,找老板討薪。
回顧這段時光時,老張說了一段話:企業(yè)信息服務(wù)化的項目,看起來合同工價很高,其實都是坑啊。有的業(yè)主,根本不懂什么叫“合適的軟件”。
在互聯(lián)網(wǎng)如此發(fā)展的今天,這些業(yè)主,要的還是“快速開發(fā)”。但凡想到什么就往里面加,程序員不猝死太難了。往往今天提,明天就要,用了一次就不用了,我根本不知道這些軟件,干出來有什么意義。
四
仔細想想,許多傳統(tǒng)企業(yè)領(lǐng)導(dǎo)想轉(zhuǎn)型到互聯(lián)網(wǎng),不就是這樣么,恨不能一天就把項目干完,干完項目就“升官發(fā)財”,至于項目能不能用,誰知道呢。。
也許,他們要的并不是軟件,而是一種“代碼生成器”。嗯,輸入“甲方爸爸的一萬種需求”,輸出“一個功能齊全、包容萬物、自由變化的軟件”。。
作為有追求的碼農(nóng)們,我們能像Robert大叔在《代碼整潔之道-程序員的自我修養(yǎng)》一書中寫的方法:選擇“拒絕”么。額。。生存要緊。。偶爾吐吐槽,飯還是得恰啊。
長按訂閱更多精彩▼
如有收獲,點個在看,誠摯感謝
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!