互联网软件开发和传统软件开发的不同(转型互联网开发需要适应的那些事)
生活随笔
收集整理的這篇文章主要介紹了
互联网软件开发和传统软件开发的不同(转型互联网开发需要适应的那些事)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
最近,也做了一段時間的互聯(lián)網(wǎng)開發(fā),感覺轉(zhuǎn)型,不僅僅是技術(shù)上的,同時也是工作方式的,工作節(jié)奏的改變。我把對公司的一些理解整理在這邊網(wǎng)上,我看到很好的
文章里,當(dāng)然文章是以測試人員的視角,來寫的,但大致把互聯(lián)網(wǎng)開發(fā)和傳統(tǒng)軟件開發(fā)的不同概括的很好了。我在其中增加了,開發(fā)者的視角,以供想從傳統(tǒng)軟件工程師
轉(zhuǎn)型到互聯(lián)網(wǎng)開發(fā)的兄弟姐妹們一些參考。同時也是自己最近一段時間工作的心得總結(jié)。
互聯(lián)網(wǎng)軟件開發(fā)和傳統(tǒng)軟件開發(fā)的不同
互聯(lián)網(wǎng)測試有什么不一樣(zz)
最近一直有寫這樣一篇文章的想法,因?yàn)樽约汗ぷ鞯淖儎?#xff0c;都是些零散的思路和想法,這里稍作整理,貼出來。正好假期的時候有朋友問到這方面的話題,希望也是一個參考。
其實(shí)說實(shí)話,覺得自己不是很夠資格來寫這個,畢竟開始做互聯(lián)網(wǎng)測試的時間不長,很多方面還在摸索和catchup中。但是另一個方面,如果真都習(xí)以為常了反倒沒有對比的新鮮感了也不想寫了。再加之今天看到韓少的那篇寫給不一樣的自己,覺得把看法寫下來,哪怕若干時日之后覺得現(xiàn)在的看法很stupid也無妨,那就是代表進(jìn)步了。沒有進(jìn)步是最可怕的事情,不是嗎?
當(dāng)然,這個不代表公司的一些做法,更不能代表很多公司,也不能代表不同人,純屬一個剛開始從事互聯(lián)網(wǎng)開發(fā)(但不是剛開始做Web的人的一些個人觀察和思考。
互聯(lián)網(wǎng)行業(yè)的人有意無意的把非互聯(lián)網(wǎng)的軟件都稱為傳統(tǒng)軟件,也就是說我們這種都是從傳統(tǒng)行業(yè),好吧,傳統(tǒng)軟件行業(yè)轉(zhuǎn)過來的。也許在有些人眼里這個帶有一些自詡的成分,當(dāng)然更多人是為了區(qū)分。就像我們做IT的把其他比較實(shí)體的行業(yè)稱為傳統(tǒng)行業(yè)一樣,似乎有某種優(yōu)越感。這里不爭論這些稱謂,意義不大,有沒有價值讓市場去決定。如果把一件事情說得玄乎,那么主要有兩種可能,沒有搞明白,或者裝高深。這兩種都不太好,所以還不如看看到底有什么不同。
如果真要用傳統(tǒng)軟件行業(yè)這個詞,那么這里是指的那種需要用戶去安裝客戶端,或者需要客戶的管理員在機(jī)房去部署的那種軟件,放在光盤里也好,放到硬件里一起賣也好,又或者是為某客戶量身訂做的一套系統(tǒng)。
變和不變總是永恒的主題。先說說我看到的不一樣的地方。互聯(lián)網(wǎng)行業(yè)和傳統(tǒng)軟件的區(qū)別:
1. 最大的不同就是互聯(lián)網(wǎng)的產(chǎn)品很多都是自己來部署和運(yùn)營,用戶只要用一個瘦客戶端就能使用。
這里的瘦客戶端是一個瀏覽器,一個App,或者一個需要安裝的client,但是核心的數(shù)據(jù)和業(yè)務(wù)邏輯主要在互聯(lián)網(wǎng)公司的機(jī)房里面,在IDC,在云端。這里和以前的C/S,
B/S架構(gòu)的企業(yè)系統(tǒng)的主要區(qū)別在于為多大范圍的人來服務(wù)以及誰來運(yùn)營和運(yùn)維這樣的系統(tǒng)。所以自然的,就多了很多的這方面的工作。
縮小范圍到測試這個方面,就需要考慮生產(chǎn)環(huán)境的問題。比如有下面的這些方面:
a. 如何來監(jiān)控生產(chǎn)環(huán)境功能的可用性。
這個需要和運(yùn)維一起來做,但是運(yùn)維針對的是比較通用的部分,比如機(jī)器的資源使用情況、流量和帶寬的情況,但是偏產(chǎn)品業(yè)務(wù)層面的,比如哪些功能是否可用,可能就
需要業(yè)務(wù)測試人員來設(shè)計(jì)和開發(fā)自動化的系統(tǒng)來監(jiān)控了。
b. 如何來發(fā)布功能到正式運(yùn)行環(huán)境(生產(chǎn)環(huán)境)
測試完了一般直接就發(fā)布了,所以不像傳統(tǒng)的軟件有那么長的測試周期,包括internal beta,externalbeta等過程,而且我了解到的情況,很多基于的互聯(lián)網(wǎng)產(chǎn)品平均一天 有多個發(fā)布,可大可小。所以發(fā)布可能就成了測試人員的工作,當(dāng)然有相關(guān)的系統(tǒng)的支持。這里還需要考慮的問題是常見的基于各種條件的灰度發(fā)布,先讓部分用戶用起來。 發(fā)布完了之后還要做生產(chǎn)環(huán)境的驗(yàn)證。
c. 如何來保證或者驗(yàn)證測試環(huán)境和生產(chǎn)環(huán)境是同步的
一旦是互聯(lián)網(wǎng)的這種模式,測試環(huán)境的問題就會變得比較突出,因?yàn)槌3可娴南到y(tǒng)比較多,有些和外部系統(tǒng)的接口可能很難以自己搭建或者用mock。另一方面如果保證測試環(huán)境是好的,到生產(chǎn)環(huán)境也是好的。需要相應(yīng)的機(jī)制和工具來驗(yàn)證和同步。
縮小到開發(fā)這個方面。要考慮到一些互聯(lián)網(wǎng)的特性,比如有以下這些方面:
a 如何快速定位,問題在哪個模塊或著需求設(shè)計(jì)哪幾個模塊,以及給出解決方案。
一般來講,新增加的功能或者模塊,比較容易像一個傳統(tǒng)項(xiàng)目的一樣,制定計(jì)劃,軟件設(shè)計(jì),到開發(fā),測試。但是如果是生產(chǎn)環(huán)境中出現(xiàn)的問題,則需要對原來業(yè)務(wù)以及軟件架構(gòu)非常熟悉,能夠快速定位到問題所在的頁面和涉及的頁面。在一個從傳統(tǒng)軟件轉(zhuǎn)過來的互聯(lián)網(wǎng)工程師來看,其實(shí)web程序,是一堆軟件的集合。每一個web頁面都是一個獨(dú)立小程序。它們或者十分獨(dú)立,只是通過一個鏈接跳轉(zhuǎn),或者一組頁面組成一個程序集合,實(shí)現(xiàn)特定的一個功能。終究是多個dll獨(dú)立的存在。所以,從傳統(tǒng)軟件工程師的角度出發(fā),應(yīng)該是以一個管理程序集合的概念來管理一個web程序。具體怎么做呢?首先負(fù)責(zé)開發(fā)技術(shù)人員分成3類,一類是高級coder,最好是原有的模塊開發(fā)者。它們對模塊的需求,和設(shè)計(jì)實(shí)現(xiàn)架構(gòu)非常了解,但他們只對反饋過來CR做需求分析。屏蔽一些不合理的修改意見,對要修改的需求,進(jìn)行定位分析,設(shè)計(jì)好修改方式,以及判斷修改涉及的范圍。二類是 中級coder,中級coder只和高級coder溝通,對高級coder的設(shè)想落地,把他的設(shè)計(jì)思路實(shí)現(xiàn)。 三類是初級coder 負(fù)責(zé)和高級coder溝通需求以及了解判斷修改的范圍。對中級coder的修改做開發(fā)者的自我測試,完成相關(guān)文檔,由高級coder審核。
?b 如何判斷開發(fā)好的功能OK了。
?
?在高級coder的審核,通過三類coder的文檔,來確認(rèn)coder實(shí)現(xiàn)是否符合原來設(shè)計(jì),當(dāng)然,設(shè)計(jì)時,最好事先就和二類coder一起溝通。隨著小分隊(duì)的不斷默契,可以是初級coder很快掌握,業(yè)務(wù)邏輯,和自測方法,同時可以熟悉,開發(fā)者所使用的工具。不斷成長,繼而成為中級coder。同事中級coder,在不斷實(shí)現(xiàn)設(shè)計(jì)的同時不斷成長,到可以勝任需求分析和軟件設(shè)計(jì)的工作,成為高級coder,這樣整個小團(tuán)隊(duì)就非常厲害了,這個方式類似于抗倭名將戚繼光的鴛鴦陣,專門對付,個體比較強(qiáng)大,武藝高強(qiáng)的倭寇。
?
?
?c 如何保證生產(chǎn)環(huán)境的web程序的穩(wěn)定性
?
?減少發(fā)布次數(shù)是保證web程序的穩(wěn)定性的最有效措施,但是如果是緊急的問題,可以當(dāng)天發(fā)布。例如,我們是給美國那邊做技術(shù)支持,中午可以作為測試截至?xí)r間,中午2點(diǎn)測試通過的當(dāng)天下班5點(diǎn)鐘發(fā)布,如果2點(diǎn)沒有通過測試的,即推遲到后一天。
?
2. 互聯(lián)網(wǎng)產(chǎn)品的節(jié)奏都很快
不像傳統(tǒng)的一個客戶端或者服務(wù)器的軟件產(chǎn)品,可能周期是半年,一年,甚至更長。這樣有比較充足的時間來做項(xiàng)目計(jì)劃,需求評審,然后是概要/詳細(xì)設(shè)計(jì),進(jìn)而有測試設(shè)計(jì)測試用例,然后有不同的測試cycle,同時也可以有很多的時間來準(zhǔn)備測試環(huán)境和自動化測試。
就目前來看,互聯(lián)網(wǎng)的產(chǎn)品這樣做不太現(xiàn)實(shí)。這樣對測試人員也是很大的挑戰(zhàn),可能看到一個需求過幾天就要開測了,用例是臨時開出來的,根本來不及自動化,也沒有很多的時間來做測試設(shè)計(jì),然后測兩天這個功能就上線了。不是切身的感受很難體會到這種速度帶來的差異。所以如何在這么短的時間里面來保證測試的覆蓋度和質(zhì)量,如果減少遺漏?這是現(xiàn)實(shí)的問題,或者說是要求,有一些措施,但是其實(shí)也沒有很好的答案。
3. 有更多的人參與到使用或測試?yán)锩鎭?
互聯(lián)網(wǎng)公司里面,測試vs開發(fā)的比例都很低,1:6,1:7都是很常見的,甚至更高,在這樣的配比的情況下,如果來保證質(zhì)量?必須有更多的方法。比如
a. 開發(fā)人員的自測。
測試耗費(fèi)更多時間很多時候是因?yàn)榇a的質(zhì)量不夠好,有很多,有很多討論,很多的拉代碼的次數(shù)。所以提高開發(fā)提交的代碼質(zhì)量就是一個很重要的方面。有些公司是通過開發(fā)
人員的強(qiáng)制的單元測試來保證的,有些是通過功能級別的自測來保證的。這些可以借助一些數(shù)據(jù)來反映,比如同一個版本拉代碼的次數(shù),或者測試用例的通過率等等。
b. 產(chǎn)品或者運(yùn)營人員的體驗(yàn)。
很多互聯(lián)網(wǎng)的產(chǎn)品不像傳統(tǒng)軟件產(chǎn)品,不是一個產(chǎn)品經(jīng)理來提所有的需求。產(chǎn)品,或者稱為產(chǎn)品經(jīng)理,是一個團(tuán)隊(duì),每人負(fù)責(zé)一塊來提出需求。另外很多需求可能是來自于運(yùn)營團(tuán)隊(duì),和business相關(guān),或者是不同系統(tǒng)的打通。每個產(chǎn)品經(jīng)理或者運(yùn)營,需要在開發(fā)人員實(shí)現(xiàn)了相應(yīng)的功能之后到體驗(yàn)環(huán)境里面來試用產(chǎn)品,就是所謂的體驗(yàn),看這些功能是不是他們想要的。這樣就可以在測試人員測試之前保證沒有明顯的需求理解的問題,避免浪費(fèi)測試的人力和時間。
c. 發(fā)布之前的評審。
不同的角色進(jìn)來看對于一個已經(jīng)測完的工作還有沒有問題,以及發(fā)布的時候需要注意的問題,環(huán)境的問題,配置的問題,數(shù)據(jù)的問題等等。上面的一些做法可能都有幫助,但是如何來推動,如果來檢驗(yàn)都是需要流程和工具來支撐。
4. 有一些是免測試的
不是所有發(fā)布到生產(chǎn)環(huán)境的東西都需要測試,有些改動是不需要測試的。這個沒有一定的標(biāo)準(zhǔn),取決于具體發(fā)布的情況,以及產(chǎn)品和團(tuán)隊(duì)的成熟度等因素。比如一些臨時活動的頁面,一些小的圖片或者樣式的改動,一些小的修復(fù)等等。只需發(fā)布完了之后到外網(wǎng)去驗(yàn)證。?
有哪些可以走免測,這其實(shí)是一個很復(fù)雜的問題,當(dāng)然風(fēng)險也是有的,但是因此而帶來的效率的提高也是很明顯。
5. 海量的用戶帶來的挑戰(zhàn)
其實(shí)有很多,這里列舉幾個:
a. 如何來保證或者驗(yàn)證性能
傳統(tǒng)軟件的性能測試相對要單純一些,可以比較容易搭建一套環(huán)境,流量也比較容易模擬。而互聯(lián)網(wǎng)的一個產(chǎn)品可能有幾百上千臺甚至更多的服務(wù)器,多地多層部署,受到各種因素的影響,比如廣告促銷活動,一下子流量可以沖到很高。所以這方面的做法也會有所不同,全量的模擬不太現(xiàn)實(shí),而且如上面所說,發(fā)布非常快,也沒有那么多的時間去反復(fù)的做性能測試。所以如何來做比較輕量級的性能測試也是一個很大的課題。
b. 瀏覽器的兼容性。
用戶使用的瀏覽器種類可能非常多,包括大家都在罵的IE6,還有IE9的n種模式,版本更新速度火箭一般的Chrome和Firefox,以及很多種國產(chǎn)的瀏覽器。要一一覆蓋是一個很大的挑戰(zhàn),其實(shí)不可能,但是產(chǎn)品團(tuán)隊(duì)肯定希望測試能夠覆蓋更多。對于一些企業(yè)級的產(chǎn)品可以宣稱就支持很少的幾種,但是互聯(lián)網(wǎng)產(chǎn)品很難這樣做,那就等于放棄一些用戶。如何來設(shè)計(jì)策略?有沒有技術(shù)手段?
c.改好的東西,沒有輸入限制,任意操作,如何保證健壯性。
一個小的改動引起的問題可以影響到無數(shù)的用戶,而且很多時候馬上會被發(fā)現(xiàn),那個壓力還是非常大的。整個修復(fù)的過程也是帶電操作,沒有那么多環(huán)境和時間來在內(nèi)部慢慢調(diào)整,如何來保證修復(fù)的質(zhì)量?
6. 問題的修復(fù)
互聯(lián)網(wǎng)的產(chǎn)品相比傳統(tǒng)的產(chǎn)品的一個優(yōu)勢或者說是特性就是問題的修復(fù)比較快,因?yàn)楹芸炀涂梢杂绊懙接脩?#xff0c;而不需要等用戶一個個去打hotfix或者patch,甚至安裝新版本。有很多時候,這種問題的發(fā)生到修復(fù)的時間很短,真是絕大部分用戶都沒有感知。有時候這個也會成為quick &dirty的一個借口,不過一般都會把
生產(chǎn)環(huán)境的問題列為一個考核的指標(biāo)。而且有些問題不是小問題,會構(gòu)成事故。其實(shí)對于這樣的產(chǎn)品,測試人員對于漏測的壓力就更大了。
7. 測試工具和技術(shù)選擇上的差別
大概是因?yàn)榛ヂ?lián)網(wǎng)自身產(chǎn)品的一些特點(diǎn),各大公司都在大量的使用開源的,以及內(nèi)部開發(fā)的平臺和系統(tǒng)。相應(yīng)的,測試方面用到的平臺和工具主要也是這兩種,要么是開源的工具(也可能做一些改造),要么是內(nèi)部自己開發(fā)的工具。相比而言,傳統(tǒng)軟件行業(yè)更會去購買一些商業(yè)的測試工具,比如用于性能測試、覆蓋率或者代碼檢查的工具,還有就是測試用例和缺陷的管理平臺。
? 目前我了解到的情況,國內(nèi)幾大互聯(lián)網(wǎng)公司都是改造和自研的比較多,所以在簡歷里面列一堆大的工具的使用經(jīng)驗(yàn)不一定有多大優(yōu)勢。而對于新人來說需要花不少時間來學(xué)習(xí)和熟悉這些平臺。
以上列舉了一些相比傳統(tǒng)軟件行業(yè)的不同的地方吧,但是對測試人員來說,互聯(lián)網(wǎng)行業(yè)和傳統(tǒng)軟件的相似處:
1. 一樣的需要非常了解產(chǎn)品和業(yè)務(wù)
對于測試人員來說,如果不了解產(chǎn)品和業(yè)務(wù),測試工作很難開展,因?yàn)檫B最基本的對錯(是不是bug)都很難判斷,當(dāng)然除了一些明顯的錯誤,比如js出錯這樣的信息,這種缺陷產(chǎn)品體驗(yàn)的時候就能夠發(fā)現(xiàn)或者等到被用戶發(fā)現(xiàn)了。所以我們還是需要花很多的時間和精力來熟悉產(chǎn)品業(yè)務(wù)。從這個角度看,沒有很大的變化,只是換了一個不同的領(lǐng)域而已,這個差別是不同的產(chǎn)品帶來的,而不是因?yàn)閭鹘y(tǒng)軟件或者互聯(lián)網(wǎng)的差別帶來的。
2. 一樣的需要了解產(chǎn)品的技術(shù)
這個其實(shí)和上面有點(diǎn)類似,測試人員需要去了解產(chǎn)品開發(fā)用到的技術(shù),這對深度的測試,甚至和很多測試技術(shù)和工具的應(yīng)用有很大的關(guān)于,比如性能分析,內(nèi)存泄露的發(fā)現(xiàn),覆蓋率的分析等等。不去學(xué)習(xí)和了解這些,很多工作沒有辦法開展。從方向上來看沒有變化,我們也要去學(xué)習(xí)和實(shí)踐這些東西才能更好的了解。但是具體的技術(shù)可能有所不同,比如互聯(lián)網(wǎng)web的產(chǎn)品可能會常用到JS,PHP,Java,C++等語言,還有各種web服務(wù)器,cache,代理等等。
3. 具體的測試技術(shù)
上面說到了一些產(chǎn)品開發(fā)的技術(shù),其實(shí)還有一塊是測試方面的技術(shù),其實(shí)這一塊細(xì)化來看和傳統(tǒng)的軟件開發(fā)有很多相似甚至相同的地方。比如如果來做靜態(tài)代碼的掃描、局部的性能測試方法和工具、覆蓋率的工具、自動化的一些工具和框架、一些監(jiān)控的工具等等。
從這個角度來看,技術(shù)的差異并沒有很大,當(dāng)然互聯(lián)網(wǎng)有一些特別,比如很多基于web的系統(tǒng)、分布式的、多層的,會對工具提出一些要求,這個差別其實(shí)倒不是很大,因?yàn)楹芏鄠鹘y(tǒng)的服務(wù)器軟件也是這樣。
4. 測試設(shè)計(jì)的方法
上面提到,因?yàn)楫a(chǎn)品發(fā)布節(jié)奏的差異,使得整個流程必須更輕更快,但是針對于一個具體功能的測試的時候,用例的設(shè)計(jì)和執(zhí)行上需要考慮的問題其實(shí)和傳統(tǒng)的沒有太大的差別。因?yàn)檫@個時候大家面臨的問題是一樣的,如何測這個軟件的這個功能。所以一些思路和方法還是能用得上。
綜合以上來看,局部的差異反而比較小,但是涉及到大的形態(tài)和流程方面的差異就會比較大。
也可能正是因?yàn)檫@樣的原因,很多從傳統(tǒng)軟件到互聯(lián)網(wǎng)的人也很快就能夠融入并開始發(fā)揮作用,而且退回幾年來看,現(xiàn)在各大互聯(lián)網(wǎng)公司里面的人大部分也都是來自于所謂的傳統(tǒng)軟件企業(yè)。
我相信不同的領(lǐng)域的發(fā)展速度和機(jī)會是不一樣的,這也是這幾年很多人投身到互聯(lián)網(wǎng)行業(yè)的原因之一,這個就好比經(jīng)濟(jì)學(xué)上所謂的市場對于資源配置的驅(qū)動力一樣,很正常。但是另一個方面,會讓人有一種錯覺,以為換到一個快速發(fā)展的行業(yè),自己立馬變強(qiáng)了。其實(shí)冷靜的來看,并不會如此,只是趕了個浪潮,真正的技術(shù)和能力不會因?yàn)槟銚Q了一個領(lǐng)域或者行業(yè)就變得強(qiáng)大或者高深了,要獲得這樣的提高一定是因?yàn)楦嗟膶W(xué)習(xí),實(shí)踐和思考,以及和別人的交流而慢慢得到的。
上面提到了互聯(lián)網(wǎng)產(chǎn)品,其實(shí)有些時候,這是一個偽命題,因?yàn)樵诟鞔蠡ヂ?lián)網(wǎng)公司都有傳統(tǒng)軟件,比如騰訊百度阿里都有客戶端的產(chǎn)品,而且數(shù)量還不少,有些還有C/S架構(gòu)的產(chǎn)品,國外的google也有chrome,picasa這種桌面的產(chǎn)品,facebook也出了IM客戶端。所以在很大程度上,還是非常的需要比如GUI產(chǎn)品的開發(fā)和測試技術(shù),服務(wù)器類似企業(yè)級產(chǎn)品的方法和能力。當(dāng)然,這些產(chǎn)品背后是連到互聯(lián)網(wǎng)的,所以也有差異的部分,但是沒有想象的那么大。?
? ?另外一個問題,有些時候大家在借互聯(lián)網(wǎng)軟件這個名字來逃避一些東西,比如一些不嚴(yán)謹(jǐn),或者混亂的地方,就全部歸結(jié)到這是互聯(lián)網(wǎng)的特性,這個是一個“度”的問題,要自己去分辨。
另一個問題,對于初入互聯(lián)網(wǎng)開發(fā)或測試的人有什么建議呢?下面這些也是自勉。
1. 正視這種差異帶來的改變,上面說的一些東西真的也是很大的不同,所以要積極的學(xué)習(xí)和了解。
2. 努力的去學(xué)習(xí)產(chǎn)品相關(guān)的知識,包括相關(guān)的開發(fā)技術(shù),這樣才能更好的開展工作。
3. 要經(jīng)常反思,之前在一個環(huán)境下對一個東西研究得很清楚了,但是換個環(huán)境之后可能老的經(jīng)驗(yàn)和知識并不完全適用。所以少說我們以前是怎么樣的?絕不生搬硬套,而是了解了情況,理解了問題之后看哪些做法是可以借鑒的?局部的借鑒可能更靠譜。
也正是因?yàn)檫@樣的原因,大家會發(fā)現(xiàn)學(xué)習(xí)的曲線很陡,而且會樂在其中。
總結(jié)
以上是生活随笔為你收集整理的互联网软件开发和传统软件开发的不同(转型互联网开发需要适应的那些事)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NAS群晖DSM 进阶教程 篇三:DSM
- 下一篇: 常用校验方式以及优缺点(奇偶校验,CRC