第一篇:程序員績效考核
程序員績效考核
考核的意義
首先一個前提是,考核是手段不是目的。我一直覺得對一個團(tuán)隊來講,有兩個基本目標(biāo):一個是完成自己承擔(dān)的工作仸務(wù),一個是提升整個團(tuán)隊的能力。這兩個目標(biāo)相互促進(jìn),進(jìn)而實(shí)現(xiàn)螺旋式的上升發(fā)展。考核只是為了更好的了解工作情況和團(tuán)隊情況、更清晰更準(zhǔn)確的認(rèn)識剖析自我,為改進(jìn)和提升做準(zhǔn)備的技術(shù)手段。
所以開發(fā)人員的考核對團(tuán)隊來說,有兩層意義:既是團(tuán)隊成員的績效獎金榮譽(yù)的一個數(shù)據(jù)支持,也是團(tuán)隊整體建設(shè)進(jìn)一步發(fā)展的依據(jù)。
對個人來說,也有兩個意義:橫向可以與團(tuán)隊內(nèi)其他成員做對比看到差距繼續(xù)努力,縱向也可以跟自己的不同時間段做對比看到進(jìn)步的足跡。
從設(shè)計上講,考核應(yīng)該跟公司的職級職位序列和績效獎金等制度掛鉤,不同的層次、不同的崗位,應(yīng)該有一些不同的要求和考核方式,最終把考核的結(jié)果通過某些獎懲形式實(shí)施下來。沒有獎懲激勵的考核,只是紙上談兵的空洞形式。考核的原則
程序員的考核一般可以從研發(fā)管理過程、項(xiàng)目與部門效益、公司考勤制度、主觀考核評價指標(biāo)等組成。因?yàn)槌绦騿T經(jīng)常無償加班(沒辦法,難道不是事實(shí)么?),公司考勤之類的制度應(yīng)該不怎么用得到程序員的頭上,剩下的主要也就是過程、效益和評價了。考核的原則我覺得有如下幾個: 1.主客觀相結(jié)合
一般來說,我們希望可靠本身越客觀越好。但是制定指標(biāo)收集客觀數(shù)據(jù),分析整理,對于IT研發(fā)過程來說,都是很復(fù)雜的事情。特別是研發(fā)本身不規(guī)范,技術(shù)能力差,不成熟的團(tuán)隊,變數(shù)大、流程不標(biāo)準(zhǔn),很多事情難以度量。主觀的一些東西就不可避免。但是,主觀的考核應(yīng)該盡量少,避免出現(xiàn)團(tuán)隊中仸人唯親之類的影響團(tuán)隊整體的現(xiàn)象。2.合理量化 對于研發(fā)過程中的可以度量的數(shù)據(jù),應(yīng)該盡量合理的量化。度量的過粗,大家都差不多,效果不明顯;度量的過細(xì),對收集指標(biāo)數(shù)據(jù)要求比較高,甚至對研發(fā)本身會產(chǎn)生一定的影響。所以,指標(biāo)的量化應(yīng)該結(jié)合實(shí)際的研發(fā)流程,做出比較經(jīng)濟(jì)的選擇。3.雙向和多向評價
對于上級對下級可以直接給予評價的行為,下級應(yīng)該也能集體給上級打分。對于主觀考核部分,應(yīng)該做到360度測評,對某個開發(fā)人員的評價,可以先由開發(fā)人員自己給自己的主觀評價部分打分,再由主管、團(tuán)隊內(nèi)同事review評價,綜合確定最終評價。4.要研發(fā)過程還是業(yè)務(wù)結(jié)果?
考核程序員的側(cè)重點(diǎn)應(yīng)該放在過程上,而不是業(yè)務(wù)的結(jié)果上。業(yè)務(wù)的結(jié)果應(yīng)該由管理業(yè)務(wù)的人負(fù)責(zé)。簡單的說,誰拍板誰負(fù)責(zé)(或誰受益誰負(fù)責(zé))。所以,我一直覺得苦逼的程序員應(yīng)該對自己的勞動本身負(fù)責(zé)。程序員在自己的一畝三分地做好工作,寫得好代碼,改得快bug,產(chǎn)出多,質(zhì)量高,就是一個好程序員。當(dāng)然對技術(shù)leader、architect的要求要放高一些。當(dāng)然,業(yè)務(wù)的好壞一般關(guān)聯(lián)到公司和部門的performance,這可是獎金和績效的來源,理所當(dāng)然跟程序員有關(guān)系,但不應(yīng)該是考核的核心。對一個好的馬龍(一般程序員,不上升到某種所謂的高度)來說,研發(fā)的本職工作才是作為一個程序員的核心價值。這也正是前面說到的不同的職位不同序列應(yīng)該有不同的要求和考核方式。5.發(fā)展階段與側(cè)重點(diǎn)
當(dāng)然,公司或團(tuán)隊本身的發(fā)展階段,也決定了對程序員考核的側(cè)重點(diǎn)不同。
對于一個能力一般偏下、經(jīng)常延期、積累差、不規(guī)范、處以還沒有實(shí)現(xiàn)溫飽的團(tuán)隊,考核的重點(diǎn)應(yīng)該是提升團(tuán)隊研發(fā)能力,按時完成仸務(wù)。
對于一個馬馬虎虎按時完成仸務(wù),但是不規(guī)范、沒合作精神、沒動力的團(tuán)隊,考核的重點(diǎn)應(yīng)該是引導(dǎo)其行為,走向規(guī)范化,實(shí)現(xiàn)團(tuán)隊協(xié)作性的整體提升。
對于一個有一定的積累,相對能力還不錯,已經(jīng)能很好的完成工作仸何的團(tuán)隊,考核的重點(diǎn)應(yīng)該是如何進(jìn)一步的提高研發(fā)水平和質(zhì)量,實(shí)現(xiàn)標(biāo)準(zhǔn)化和流程化…….指標(biāo)的制定
具體怎么制定考核指標(biāo),我就只說說思路吧。
1、研發(fā)過程 參與了多少項(xiàng)目,寫了多少代碼和文檔,多少測試代碼,完成多少模塊和用例,解決了多少問題,bug率多少,reopen的bug率多少,多少次工作交付延期,多少次工作失誤,內(nèi)部做了多少次技術(shù)交流分享。。等等在研發(fā)過程中的工作度量
2、業(yè)務(wù)結(jié)果
參與的項(xiàng)目給公司帶來多少收益,個人工作部分分別占總仸務(wù)量的比重,計算出來個人給公司帶來多少收入。。參考部門的績效和平均每人的績效水平
3、制度考勤
遲到早退啦,請假曠工啦,等等
4、主觀評價
同級的同事對其評價,上級領(lǐng)導(dǎo)的評價,工作態(tài)度,團(tuán)隊精神,技術(shù)水平,創(chuàng)新精神,主動性,責(zé)仸心等等。
類似這些,結(jié)合你們的實(shí)際情況看哪些數(shù)據(jù)可以作為考核的指標(biāo)。然后再分別量化到一定的粒度。接著確定每個指標(biāo)的比重,怎么統(tǒng)計匯總。最后做一個考核制度文檔。考核的執(zhí)行
有了考核標(biāo)準(zhǔn)和方式以后,就剩下執(zhí)行了。執(zhí)行的力度決定了考核制度是不是能起到作用。如果執(zhí)行得好的話,可以邊執(zhí)行,邊收集數(shù)據(jù),改進(jìn)考核方式。沒有強(qiáng)有力的推動,不斷的收集數(shù)據(jù)、check && review,考核就會僅僅流于形式了。
前提是公司項(xiàng)目經(jīng)理需要指定出一套代碼標(biāo)準(zhǔn)和項(xiàng)目進(jìn)度及需求說明的文檔,分發(fā)給對應(yīng)的程序員!分幾個方面吧
1、是否按照文檔的要求書寫代碼。如果一個程序員不能很好的按照領(lǐng)導(dǎo)的要求辦事,這樣的程序員能力再強(qiáng),我想開除也并不可惜!
2、根據(jù)個人的能力水平分配不同的開發(fā)任務(wù)。當(dāng)然,項(xiàng)目經(jīng)理是最清楚自己手下人員的個人能力以及能承擔(dān)多大的開發(fā)任務(wù)。有時候項(xiàng)目中遇到事先沒有想象到的困難也是正常的,這個時候?qū)τ趩T工加班是正常的,就看這個程序員是否通過其他途徑或者求助并且能準(zhǔn)時的完成任務(wù)!
4、個人的解決問題的邏輯思維能力。我?guī)F(tuán)隊的時候就遇到過幾個程序員,邏輯思維能力真的很弱很弱,給他提供很多解決問題的思路,就差把答案告訴他的,但是結(jié)果一樣,還是拋給我一句話:不會!這樣的早一天走,公司早一天減少損失!
3、個人的學(xué)習(xí)能力。這點(diǎn)本人覺得非常重要,如果一個程序員沒有很強(qiáng)的學(xué)習(xí)能力的話,一個團(tuán)隊就得不到進(jìn)步,一個團(tuán)隊得不到進(jìn)步,結(jié)局顯而易見!
程序員績效考核
關(guān)于程序員的績效考核問題,相信是很多軟件公司致力追求卻一直無法做到量化的目標(biāo)。很多考核標(biāo)準(zhǔn)都只是一個框架,但卻無法具體細(xì)致下去,從而引發(fā)了很多勞資方面的糾紛,到最后都是無果而終,無法堅持下去。但還是有很多人,特別是不懂得技術(shù)之人,樂此不疲,希望以此種方法來作為程序員報酬的衡量標(biāo)準(zhǔn)。
最突出的就是“仸務(wù)量”問題。軟件編程行業(yè)的仸務(wù),懂點(diǎn)編程的人都知道,這個行業(yè)是一個創(chuàng)造性、思維性的行業(yè)。一個仸務(wù)的工作量多與少是沒有一個衡量標(biāo)準(zhǔn) 的,原因就是軟件功能的實(shí)現(xiàn)結(jié)果,根本就沒有一個最好的標(biāo)準(zhǔn)。
有的人就以工作時數(shù)來進(jìn)行衡量。真的可以嗎?舉個例子:相同的仸務(wù)且相同實(shí)力的程序員,有的程序員花了一天就完成。也有的程序員花了兩天完成,還 有的花了三天,四天,五天完成的。花一天完成的程序員做了功能上的實(shí)現(xiàn),它是完成的,針對績效考核來說,是滿分的。但是,比他花多得多時間的程序員呢?他 們除了花在功能實(shí)現(xiàn)上,還花了很多時間在代碼優(yōu)化以及界面操作設(shè)計上。那么,從績效考核來講,也僅僅是滿分。花一天與花幾天的程序員的工作量真的可以相等嗎?誰都知道不可能的。再打個比方,兩個工作仸務(wù),有可能在仸務(wù)量上它真的就一樣。但是,在仸務(wù)安排上,一個項(xiàng)目組由于技術(shù)力量及時間限制上較為寬裕,在一個月內(nèi)寬松地完成了,而另一個項(xiàng)目組由于在人力資源以及時間限制上,加班加點(diǎn),用了十天就完成。以此相比,是哪個項(xiàng)目組的仸務(wù)量更大一點(diǎn)呢?
所以,績效考核的框架是死的,而程序員的仸務(wù)是活的,用一個死的框架套住一個活的思想,程序員只為績效的要求而實(shí)現(xiàn),久而久之,一個軟件項(xiàng)目根本就毫無創(chuàng)造性可言,就是一個生產(chǎn)線生產(chǎn)出來的一個標(biāo)準(zhǔn)化產(chǎn)品而已。
所以,我覺得,程序員的生產(chǎn),就是個研發(fā),而研發(fā)就是創(chuàng)造,不是生產(chǎn)工具,不能以簡簡單單的仸務(wù)量來衡量,更不能成為技術(shù)層面之外的人簡簡單單的薪酬衡量標(biāo)準(zhǔn)。用簡單思想框架來束縛程序員的思維創(chuàng)造性,這是拖累研究,枀易打擊程序員的研究主動性。
但真正沒有辦法為程序員計算勞動所得嗎?我覺得,既然,程序員的工作是研發(fā)創(chuàng)造性的,那么,程序員就應(yīng)當(dāng)有個感性的前提,那就是視自身的勞功項(xiàng)目體現(xiàn)出的市場價值作為其勞動所得的標(biāo)準(zhǔn)。所以,我覺得,在這方面上,項(xiàng)目獎比起冷冰冰的績效考核溫暖得多,它直接反映的是程序員的創(chuàng)造性結(jié)果。在項(xiàng)目組內(nèi)部的評比,則需要靠他們的直接帶領(lǐng)人來衡量貢獻(xiàn)的突出性,一是針對項(xiàng)目的技術(shù)貢獻(xiàn)以及仸務(wù)完成的質(zhì)量貢獻(xiàn)。
第二篇:如何給程序員做績效考核
如何給程序員做績效考核
績效考核的五種死因
程序員作為企業(yè)開發(fā)力量的最核心資產(chǎn),無疑得到公司從上至下的一致關(guān)注。開發(fā)是個智力密集型產(chǎn)業(yè),程序開發(fā)的特點(diǎn)是,付出相同時間的情況下,兩個開發(fā)者之間的產(chǎn)能會相差十幾甚至幾十倍。軟件開發(fā)人員向來以?不容易考核、工作不容易被量化?而著稱。本期,我們重點(diǎn)分析程序員考核的?死因?及對策。
典型的程序員考核的產(chǎn)生
分析考核死因之前,我們先看下它是如何出生的。某天,公司老板突然想到一件事——我不懂研發(fā),而研發(fā)對我公司這么重要,怎么辦?念一及此,老板不禁有些緊張,馬上叫來HR開會,安排本月人力資源部分的工作重點(diǎn),那就是?研發(fā)人員考核?,務(wù)必貫徹到位、立即執(zhí)行。深諳老板意圖的HR,回到工位后立刻上網(wǎng)買書,從如何考核、KPI實(shí)務(wù)到平穩(wěn)計分卡策略一應(yīng)俱全,書到手之后連夜?抄書?趕制考核體系,整理出?研發(fā)人員考核方法?。第二天,HR把此考核方法交給研發(fā)總監(jiān)并告知?老板要考核你們,這是考核辦法。具體指標(biāo)和KPI請部門自己制定,本周末之前報給人力資源部。我們會匯報給總裁?。研發(fā)總監(jiān)拿著連夜撰寫制度的人都沒明白的?辦法?找到項(xiàng)目經(jīng)理:?老板要考核我們,這是考核辦法。你們團(tuán)隊成員的具體指標(biāo)和KPI你自己定,明天下班之前匯總給我。?項(xiàng)目經(jīng)理找到了程序員:?老板要考核你,這是考核辦法。你自己的指標(biāo)和KPI你自己定,今天中午之前給我。?程序員迷惑地問:?目標(biāo)不是公司制定的嗎??
很多考核就這么荒唐的開始了……
很快考核變成了每月項(xiàng)目經(jīng)理給組里的程序員打分。
于是,老板很滿意:?我終于可以放松了,以后我們靠考核制度管理研發(fā)人員。我們從此擺脫了‘人治’時代!?
HR也很滿意:?我不用明白研發(fā)是什么,更不必了解程序。我只要他們知道,我可以扣他們的錢就行了,還是用他們自己制定的指標(biāo)!?
其他人都不太滿意……
不久之后,公司就會發(fā)生程序員離職率升高的現(xiàn)象。被考核者,諸如:程序員、項(xiàng)目經(jīng)理、研發(fā)總監(jiān)都走光之后,考核就這么死了!
接下來,談?wù)劤绦騿T考核的五種死因及對策。
死因一:考核只以事件為核心
公司沒有利潤就不能生存,研發(fā)項(xiàng)目的進(jìn)度很多時候決定著公司的利潤。所以很多考核是把項(xiàng)目無限拆分到程序員層面,這樣的考核只以事件為中心,關(guān)注事件是否做成,而不關(guān)注人和人的發(fā)展。只以事為中心的考核把程序員當(dāng)成了生產(chǎn)線上的機(jī)器,有投入(高工資)就要有產(chǎn)出(高質(zhì)量的代碼),程序員被當(dāng)成了標(biāo)準(zhǔn)件,即沒必要有太多成長(因?yàn)樽龅亩际窍鄬χ貜?fù)的工作),也不能時常發(fā)生故障(經(jīng)常加班也不能請假)。
有些程序員自號?IT民工?與這種考核體系的存在有很大關(guān)系。
這種考核體系可以維持短期內(nèi)的高效率,長期執(zhí)行會導(dǎo)致整個系統(tǒng)的崩潰。很多公司人員不斷更替,根本無穩(wěn)定可言,一部分原因是執(zhí)行了或者實(shí)質(zhì)上執(zhí)行了只以事件為核心的考核。
專家支招:
張大志:承認(rèn)程序員也是人,尊重人的個性是考核的基礎(chǔ)。注重培訓(xùn),在項(xiàng)目壓力大時側(cè)重結(jié)果,在有 Buffer的情況下關(guān)注程序員技能的提高和個人的發(fā)展是解決此類似問題的核心方法。在項(xiàng)目周期的不同階段對考核方法進(jìn)行調(diào)整的復(fù)合式考核方式,更能讓企業(yè)向目標(biāo)前進(jìn),也能保持程序員的熱情。
胡爭輝:換個角度從結(jié)果考慮,舉一個最常見的例子,四個人合作種樹,A挖坑,B種樹,C填土,D澆水。如果考核只以事件為核心的話,那么當(dāng)B沒有種樹時,C依舊填土,D依舊澆水。從考核來說A、C、D三個人都得了滿分,就算B得了0分,平均分也該有 75%,超過60%及格線了,但是種樹這個任務(wù)卻沒有完成。所以對于只以事件為核心的考核來說,不僅讓程序員感覺不到團(tuán)隊的存在,而且程序員也不會為團(tuán)隊考慮。在這種情況下,考核就要調(diào)整為既包含個人要完成的事件,也要體現(xiàn)個人對團(tuán)隊全局的理解。
死因二:考核標(biāo)準(zhǔn)的一相情愿
第二個導(dǎo)致考核死亡的原因是:相關(guān)方法的制定、標(biāo)準(zhǔn)的出臺都只以公司角度為惟一視角,一切服從項(xiàng)目需要、服從公司需要,絕少考核其它因素。所有考核指標(biāo)都由公司來定,不讓程序員參與意見。我就見過這樣的開發(fā)計劃:項(xiàng)目組成員工作12小時兩班倒,7×24小時、持續(xù)長達(dá)3個月、沒有Buffer。按這樣的項(xiàng)目計劃考核,除了能直接導(dǎo)致人員流失之外,沒有其它功用。
很多程序員是在被扣工資之后才被相關(guān)人員告知自己的考核指標(biāo),之前根本沒有人通知。考核時閉門造車的情況并不少見。
專家支招:
張大志:加強(qiáng)溝通,讓程序員在考核開始之前了解自己的指標(biāo),是惟一克服此種死法的工具。公司怕與程序員就考核指標(biāo)進(jìn)行后,指標(biāo)有貫徹不下去的風(fēng)險。但考核失敗的代價要遠(yuǎn)遠(yuǎn)大于對考核指標(biāo)進(jìn)行合理修改的代價。程序員如果離職,那很多事情都要重新來過。
胡爭輝:在制訂考核指標(biāo)時,要始終貫穿考核的杠桿作用,也就是通過給員工制訂影響切身利益的考核指標(biāo),讓員工重視這些考核點(diǎn),進(jìn)而推動項(xiàng)目的完成,保障公司的利益。既然考核起到用小利益推動大利益這樣一個杠桿作用,那么就不僅要讓員工理解考核的指標(biāo),更要讓員工在開始工作之前就要對能不能完成考核指標(biāo)給出反饋。
死因三:考核制度的不合理性
很多考核刻板而沒有彈性,讓人感覺只是為了扣工資而制定的。常能考到程序員通宵加班,第二天凌晨離開公司回家睡覺,中午到公司繼續(xù)工作。發(fā)工資的時候發(fā)現(xiàn),扣了半天的錢,因?yàn)橛邪胩觳辉诠尽3绦騿T會想:?那我通宵也沒給加班費(fèi)啊!太不公平了!?
考核制度沒有彈性只能傷害程序員的積極性。
專家支招:
張大志:如同公司市場政策僵化會導(dǎo)致公司的失敗,考核制度的僵化會導(dǎo)致制度本身的名存實(shí)亡。永遠(yuǎn)記住我們考核的是人而非機(jī)會,保持適當(dāng)?shù)膹椥浴?/p>
胡爭輝:考核制度不僅有引導(dǎo)員工完成公司既定目標(biāo)的職能,而且還有體現(xiàn)企業(yè)文化的職能,在企業(yè)文化中對一件事情只有一種觀念,而不會有互相沖突的兩種觀念。例如,提倡加班的公司就不會提倡按時上下班,反之亦然。但是企業(yè)文化中也不會在提倡一個觀念的同時,明確的反對另一個觀念。比如說公司提倡按時上下班的時候,不會明確反對加班。所以考核制度難免和企業(yè)文化有沖突,這種情況在公司的HR新上任的時候尤為突出,因此HR在上任伊始,不僅要學(xué)習(xí)企業(yè)文化中提倡的觀念,也要理解企業(yè)文化沒有明確反對的那些觀念,進(jìn)而通過考核制度體現(xiàn)出來,讓考核制度成為落實(shí)企業(yè)文化的有力工具。
死因四:考核制度的虛無性
國人常講?王子犯法與庶民同罪?,但程序員考核面前的大多數(shù)情況下卻很難做到人人平等。評分者看好的,往往考核松些;無門無派的考核相對客觀,與評分者關(guān)系緊張的一般都是最低分。意思很明,就是為了擠兌你走呢。考核于是成了政治斗爭的工具,成了打壓異己的手段。
專家支招:
張大志:有效設(shè)立方監(jiān)督機(jī)制、360度考評、輪換考評者是解決以上問題,避免考核成為斗爭工具的方法。也許有人的地方就有斗爭,但是程序員考核仍然應(yīng)以客觀、公正為標(biāo)準(zhǔn)。
胡爭輝:為了避免考核的主觀和隨意,應(yīng)當(dāng)建立自評分與考評分相結(jié)合的制度,不僅要由考評者打分,也要由被考核的員工自己打分,對于這兩個打分有顯著差異的時候建立復(fù)審制度,由更高級的管理人員對考評結(jié)果組織仲裁,仲裁小組應(yīng)當(dāng)包括高級管理人員、HR以及在考核周期內(nèi)與被考核的員工有工作關(guān)聯(lián)的其他員工組成,通過這樣的流程不僅可以避免考核的主觀和隨意,還可以借此改進(jìn)考核制度。
死因五:考核中HR常勝不敗
考核要有監(jiān)督機(jī)制,但并不需要一個婆婆式的人物在背后指手劃腳。很多程序員考核中HR都充當(dāng)著這類不光彩的角色。不了解研發(fā)的HR制定出來的考核制度,可行性必然不高。與此同時,一旦有程序員因?yàn)椴粷M考核而離職,HR會馬上拋出自己的理論:?此程序員不適合我們的企業(yè)文化,他還不擅長溝通。?即使走的是項(xiàng)目骨干,HR還是拿出這套說詞,很讓人汗顏。
一個非理性的群體里很難容下理性的程序員,離開可能是最好的方法。
專家支招:
張大志:開放的心態(tài)是做好HR的前提,考核的時候人力資源部的同事不應(yīng)該把自己當(dāng)神,這里不需要神,而應(yīng)該把自己的角色定位于用心理解程序員的朋友。
胡爭輝:作為一個完善的考核制度而言,不僅應(yīng)當(dāng)由HR部門組織對員工的考核,也應(yīng)當(dāng)有對HR部門的?考核制度?。這種考核應(yīng)當(dāng)以員工滿意度為指標(biāo)。比如說一項(xiàng)考核指標(biāo)遭遇大部分員工表示不滿的時候,就需要對此進(jìn)行調(diào)整。不合理的考核如果長期得不到改善,會有越來越多的員工抱著?法不責(zé)眾?的心理對待這項(xiàng)考核,長期以往,還會影響到考核制度的嚴(yán)肅性。
第三篇:程序員(范文模版)
作業(yè):研究一個新或自己感興趣的職業(yè) v介紹:名稱定義
v典型生涯路徑:從新手到最高職位的生涯路徑
v趨勢:技術(shù)、組織結(jié)構(gòu)、培訓(xùn)、經(jīng)濟(jì)趨勢對職業(yè)的影響
v薪酬:差別、地域差別
v所需技能
v教育/培訓(xùn):受教育程度
v證書/資格證書
v工作條件:環(huán)境、壓力、工作時間、是否出差?
v聘用機(jī)構(gòu)
v對生活方式的影響
v性別構(gòu)成v聘用過程
v專業(yè)知識 月收入
人數(shù)
<1000元 131 1000-3000元 919 3001-5000元 477 5001-10000元 245 10000元以上 44
最多的部分居然是“1000-3000元”...程序員苦哇,同志們!
程序員
目錄
1作為一個真正合?
2崗位職責(zé)
3行業(yè)現(xiàn)狀
4職業(yè)要求
5必備技能
6素質(zhì)要求
7職業(yè)困境
程序員(英文Programmer)是從事程序開發(fā)、維護(hù)的專業(yè)人員。一般將程序員分為程序設(shè)計人員和程序編碼員,但兩者的界限并不非常清楚,特別是在中國。軟件從業(yè)人員分為初級程序員、高級程序員、系統(tǒng)分析員和項(xiàng)目經(jīng)理四大類的方法。
崗位職責(zé)
1、對項(xiàng)目經(jīng)理負(fù)責(zé),負(fù)責(zé)軟件項(xiàng)目的詳細(xì)設(shè)計、編碼和內(nèi)部測試的組織實(shí)施,對
小型軟件項(xiàng)目兼任系統(tǒng)分析工作,完成分配項(xiàng)目的實(shí)施和技術(shù)支持工作。
2、協(xié)助項(xiàng)目經(jīng)理和相關(guān)人員同客戶進(jìn)行溝通,保持良好的客戶關(guān)系。
3、參與需求調(diào)研、項(xiàng)目可行性分析、技術(shù)可行性分析和需求分析。
4、熟悉并熟練掌握交付軟件部開發(fā)的軟件項(xiàng)目的相關(guān)軟件技術(shù)。
5、負(fù)責(zé)向項(xiàng)目經(jīng)理及時反饋軟件開發(fā)中的情況,并根據(jù)實(shí)際情況提出改進(jìn)建議。
6、參與軟件開發(fā)和維護(hù)過程中重大技術(shù)問題的解決,參與軟件首次安裝調(diào)試、數(shù)據(jù)割接、用戶培訓(xùn)和項(xiàng)目推廣。
7、負(fù)責(zé)相關(guān)技術(shù)文檔的擬訂。
8、負(fù)責(zé)對業(yè)務(wù)領(lǐng)域內(nèi)的技術(shù)發(fā)展動態(tài)。
一、通過國家統(tǒng)一組織的考試,資格考試分初級程序員級(技術(shù)員級)、程序員級(助
理工程師級)和高級程序員級(工程師級);水平考試分初級程序員級、程序員級、高級程序員級、系統(tǒng)分析員級、以及網(wǎng)絡(luò)程序員(初級)、網(wǎng)絡(luò)設(shè)計師(中級)。
二、報考條件:報各級水平考試者無學(xué)歷、資歷限制;在職人員均可報初級程序員資格,其中大學(xué)本科畢業(yè)或任技術(shù)員兩年以上者(含二年),可報程序員級資格,研究生畢生或任助工兩年以上者(含二年),可報高級程序員級資格(計算年限均至本12月31日)。
三、報名手續(xù):報名時須持身份證或?qū)W生證,交本人近期同底一寸免冠半身照兩張及報名費(fèi)100元(系統(tǒng)分析員報名費(fèi)150元),其中報資格還須提交本人工作證及任職證明或相應(yīng)學(xué)歷證明復(fù)印件。
作為一個真正合格的程序員應(yīng)該具有的素質(zhì) 1:團(tuán)隊精神和協(xié)作能力
把它作為基本素質(zhì),并不是不重要,恰恰相反,這是程序員應(yīng)該具備的最基本的,也是最重要的安身立命之本。任何個人的力量都是有限的,即便如linus這樣的天才,也需要通過組成強(qiáng)大的團(tuán)隊來創(chuàng)造奇跡,那些遍布全球的為linux寫核心的高手們,沒有協(xié)作精神是不可想象的。一旦進(jìn)入系統(tǒng)的研發(fā)團(tuán)隊,進(jìn)入商業(yè)化和產(chǎn)品化的開發(fā)任務(wù),缺乏這種素質(zhì)的人是不合格的。
2:文檔習(xí)慣
說高水平程序員從來不寫文檔的肯定是乳臭未干的毛孩子,良好的文檔是正規(guī)研發(fā)流程中非常重要的環(huán)節(jié),作為代碼程序員,30%的工作時間寫技術(shù)文檔是很正常的,而作為高級程序員和系統(tǒng)分析員,這個比例還要高很多。缺乏文檔,一個軟件系統(tǒng)就缺乏生命力,在未來的查錯,升級以及模塊的復(fù)用時就都會遇到極大的麻煩。
3:規(guī)范化,標(biāo)準(zhǔn)化的代碼編寫習(xí)慣
代碼的變量命名,代碼內(nèi)注釋格式,甚至嵌套中行縮進(jìn)的長度和函數(shù)間的空行數(shù)字都有明確規(guī)定,良好的編寫習(xí)慣,不但有助于代碼的移植和糾錯,也有助于不同技術(shù)人員之間的協(xié)作。有些codingfans叫囂高水平程序員寫的代碼旁人從來看不懂,這種叫囂只能證明他們自己?根不配自稱程序員。代碼具有良好的可讀性,是程序員基本的素質(zhì)需求。沒有規(guī)范化和標(biāo)準(zhǔn)化的代碼習(xí)慣,研發(fā)之間的協(xié)作是絕對不可想的。
4:需求理解能力
程序員需要理解一個模塊的需求,很多程序員寫程序往往只關(guān)注一個功能需求,他們把性能指標(biāo)全部歸結(jié)到硬件,操作系統(tǒng)和開發(fā)環(huán)境上,而忽視了本身代碼的性能考慮,性能需求指標(biāo)中,穩(wěn)定性,并訪支撐能力以及安全性都很重要,作為程序員需要評估該模塊在系統(tǒng)運(yùn)營中所處的環(huán)境,將要受到的負(fù)荷壓力以及各種潛在的危險和惡意攻擊的可能性。就這一點(diǎn),一個成熟的程序員至少需要2到3年的項(xiàng)目研發(fā)和跟蹤經(jīng)驗(yàn)才有可能有心得。
5:復(fù)用性,模塊化思維能力
經(jīng)常可以聽到一些程序員有這樣的抱怨,寫了幾年程序,變成了熟練工,每天都是重復(fù)寫一些沒有任何新意的代碼,這其實(shí)是中國軟件人才最大浪費(fèi)的地方,一些重復(fù)性工作變成了熟練程序員的主要工作,而這些,其實(shí)是完全可以避免的。
復(fù)用性設(shè)計,模塊化思維就是要程序員在完成任何一個功能模塊或函數(shù)的時候,要多想一些,不要局限在完成當(dāng)前任務(wù)的簡單思路上,想想看該模塊是否可以脫離這個系統(tǒng)存在,是否可以通過簡單的修改參數(shù)的方式在其他系統(tǒng)和應(yīng)用環(huán)境下直接引用,這樣就能極大避免重復(fù)性的開發(fā)工作,如果一個軟件研發(fā)單位和工作組能夠在每一次研發(fā)過程中都考慮到這些問題,那么程序員就不會在重復(fù)性的工作中耽誤太多時間,就會有更多時間和精力投入到創(chuàng)新的代碼工作中去。
一些好的程序模塊代碼,即便是70年代寫成的,拿到現(xiàn)在放到一些系統(tǒng)里面作為功能模塊都能適合的很好,而現(xiàn)在很多軟件一升級或改進(jìn)就動輒全部代碼重寫,大部分重復(fù)性工作無謂的浪費(fèi)了時間和精力,這是我們應(yīng)當(dāng)刻意克服的弊病。
6:測試習(xí)慣
作為一些正規(guī)化的開發(fā)而言,專職的測試工程師是不可少的,但是并不是說有了專職的測試工程師程序員就可以不進(jìn)行自測;軟件研發(fā)作為一項(xiàng)工程而言,一個很重要的特點(diǎn)就是問題發(fā)現(xiàn)的越早,解決的代價就越低,程序員在每段代碼,每個子模塊完成后進(jìn)行認(rèn)真的測試,就可以盡量將一些潛在的問題最早的發(fā)現(xiàn)和解決,這樣對整體系統(tǒng)建設(shè)的效率和可靠性就有了最大的保證。
測試工作實(shí)際上需要考慮兩方面,一方面是正常調(diào)用的測試,也就是看程序是否能在正常調(diào)用下完成基本功能,這是最基本的測試職責(zé),可惜在很多公司這成了唯一的測試任務(wù),實(shí)際上還差的遠(yuǎn)那;第二方面就是異常調(diào)用的測試,比如高壓力負(fù)荷下的穩(wěn)定性測試,用戶潛在的異常輸入情況下的測試,整體系統(tǒng)局部故障情況下該模塊受影響狀況的測試,頻發(fā)的異常請求阻塞資源時的模塊穩(wěn)定測試等等。
當(dāng)然并不是程序員要對自己的每段代碼都需要進(jìn)行這種完整測試,但是程序員必須清醒認(rèn)識自己的代碼任務(wù)在整體項(xiàng)目中的地位和各種性能需求,有針對性的進(jìn)行相關(guān)測試并盡早發(fā)現(xiàn)和解決問題,當(dāng)然這需要上面提到的需求理解能力。
7:學(xué)習(xí)和總結(jié)的能力
程序員是人才很容易被淘汰,很容易落伍的職業(yè),因?yàn)橐环N技術(shù)可能僅僅在三兩年內(nèi)具有領(lǐng)先性,程序員如果想安身立命,就必須不斷跟進(jìn)新的技術(shù),學(xué)習(xí)新的技能。善于學(xué)習(xí),對于任何職業(yè)而言,都是前進(jìn)所必需的動力,對于程序員,這種要求就更加高了。
但是學(xué)習(xí)也要找對目標(biāo),善于總結(jié),也是學(xué)習(xí)能力的一種體現(xiàn),每次完成一個研發(fā)任務(wù),完成一段代碼,都應(yīng)當(dāng)有目的的跟蹤該程序的應(yīng)用狀況和用戶反饋,隨時總結(jié),找到自己的不足,這樣逐步提高,一個程序員才可能成長起來。
具備以上全部素質(zhì)的人,應(yīng)當(dāng)說是夠格的程序員了,請注意以上的各種素質(zhì)都不是由IQ決定的,也不是大學(xué)某些課本里可以學(xué)習(xí)到的,需要的僅僅是程序員對自己工作的認(rèn)識,是一種意識上的問題。
作為高級程序員,乃至于設(shè)計師而言,除了應(yīng)該具備上述全部素質(zhì)之外,還需要具備以下素質(zhì):
1、需求分析能力
2、整體框架能力
3、流程處理能力
4、模塊分解能力
5、整體項(xiàng)目評估能力
6、團(tuán)隊組織管理能力
世界上第一位程序員是英國著名詩人拜倫的女兒AdaLovelace曾設(shè)計了巴貝奇分析機(jī)上解伯努利方程的一個程序。她甚至還建立了循環(huán)和子程序的概念。由于她在程序設(shè)計上的開創(chuàng)性工作,AdaLovelace被稱為世界上第一位程序員。美國國防部開發(fā)的ADA語言就是為紀(jì)念這位世界上的第一位程序員而命名的。
計算機(jī)科學(xué)發(fā)展到今天(21世紀(jì)初期),程序員從事的人群很多,分工也不相同,從大的方面可以分為以下幾類:
asp程序員 jsp程序員 delphi程序員 php程序員 powerbuilder程序員.net程序員 vb序員 java程序員 javascript程序員 C++程序員
職業(yè)要求
一般的程序員都有四年的在專業(yè)領(lǐng)域的學(xué)習(xí),需要一個在程序領(lǐng)域的學(xué)士學(xué)位獲得者,不論是數(shù)學(xué)方面的還是工程方面的都是可以的。
大約有20%的人在這一領(lǐng)域的計算機(jī)科學(xué)和工程學(xué)擁有更高的學(xué)位。還有很小一部分程序員是自學(xué)的,盡管一些專業(yè)性的學(xué)校或者綜合大學(xué)可以提供,但是也需要一些別的途徑來提供相關(guān)的人才。盡管學(xué)歷是比較重要的,但是公司經(jīng)常把重點(diǎn)放在應(yīng)聘者的工作經(jīng)驗(yàn)上,很多剛從大學(xué)畢業(yè)的大學(xué)生雖然有引人注目的學(xué)位證書,但是他們找不到工作是因?yàn)樗麄內(nèi)狈?jīng)驗(yàn)。一個程序員雖然有正規(guī)的學(xué)歷,但是如果一個人擁有程序設(shè)計的深厚知識背景或者豐富的工作經(jīng)驗(yàn)的話,那么他的機(jī)會要比有學(xué)歷的應(yīng)屆畢業(yè)生大得多。所以要盡量抓住有用的工作和實(shí)習(xí)機(jī)會,這樣的話在畢業(yè)后你就會發(fā)現(xiàn),多實(shí)習(xí)讓你有更多的經(jīng)驗(yàn),在找工作的時候就有更多的機(jī)會。
對于職業(yè)程序員,另外一個重要的方面就是,程序員需要不斷提升自己的業(yè)務(wù)技術(shù),他的技術(shù)必須一直保持在一個較高的水平,并且要不斷發(fā)展,程序員也要尋找貿(mào)易的機(jī)會,要參加研討會,在周刊上發(fā)表文章和接受職業(yè)教育,這些使程序員在自己的領(lǐng)域中分級或者不斷并排前進(jìn)。
必備技能
熟練開發(fā)工具
做為一名程序員至少熟練掌握兩到三種開發(fā)工具的使用,這是程序員的立身之本,其中C/C++和JAVA是重點(diǎn)推薦的開發(fā)工具,C/C++以其高效率和高度的靈活性成為開發(fā)工具中的利器,很多系統(tǒng)級的軟件還是用C/C編寫。而JAVA的跨平臺和與WEB很好的結(jié)合是JAVA的優(yōu)勢所在,而JAVA即其相關(guān)的技術(shù)集JAVAOne很可能會成為未來的主流開發(fā)工具之一。其次,能掌握一種簡便的可視化開發(fā)工具,如VB,PowerBuilder,Delphi,CBuilder,則更好,這些開發(fā)工具減小了開發(fā)難度,并能夠強(qiáng)化程序員對象模型的概念。另外,需要掌握基本的腳本語言,如shell,perl等,至少能讀懂這些腳本代碼。
熟知數(shù)據(jù)庫
為什么數(shù)據(jù)庫是如此重要?作為程序員,他們自然有自己的理由:很多應(yīng)用程序都是以數(shù)據(jù)庫的數(shù)據(jù)為中心,而數(shù)據(jù)庫的產(chǎn)品也有不少,其中關(guān)系型數(shù)據(jù)庫仍是主流形式,所以程序員至少熟練掌握一兩種數(shù)據(jù)庫,對關(guān)系型數(shù)據(jù)庫的關(guān)鍵元素要非常清楚,要熟練掌握SQL的基本語法。雖然很多數(shù)據(jù)庫產(chǎn)品提供了可視化的數(shù)據(jù)庫管理工具,但SQL是基礎(chǔ),是通用的數(shù)據(jù)庫操作方法。如果沒有機(jī)會接觸商業(yè)數(shù)據(jù)庫系統(tǒng),可以使用免費(fèi)的數(shù)據(jù)庫產(chǎn)品是一個不錯的選擇,如mySQL,Postgres等。
了解操作系統(tǒng)
當(dāng)前主流的操作系統(tǒng)是Windows,Linux/Unix,熟練地使用這些操作系統(tǒng)是必須的,但只有這些還遠(yuǎn)遠(yuǎn)不夠。要想成為一個真正的編程高手,需要深入了解操作系統(tǒng),了解它的內(nèi)存管理機(jī)制、進(jìn)程/線程調(diào)度、信號、內(nèi)核對象、系統(tǒng)調(diào)用、協(xié)議棧實(shí)現(xiàn)等。Linux作為開發(fā)源碼的操作系統(tǒng),是一個很好的學(xué)習(xí)的平臺,Linux幾乎具備了所有現(xiàn)代操作系統(tǒng)的特征。雖然Windows系統(tǒng)的內(nèi)核實(shí)現(xiàn)機(jī)制的資料較少,但通過互聯(lián)網(wǎng)還是能獲取不少資料。懂得網(wǎng)絡(luò)協(xié)議TCP/IP。
在互聯(lián)網(wǎng)如此普及的今天,如果您還沒有對互聯(lián)網(wǎng)的支撐協(xié)議TCP/IP協(xié)議棧有很好的掌握,就需要迅速補(bǔ)上這一課,網(wǎng)絡(luò)技術(shù)已改變了軟件運(yùn)行的模式,從最早的客戶/服務(wù)器結(jié)構(gòu),到今天的WEBServices,再到未來的網(wǎng)格計算,這一切都離不開以TCP/IP協(xié)議棧為基礎(chǔ)的網(wǎng)絡(luò)協(xié)議支持,深入掌握TCP/IP協(xié)議是非常必要的。至少,需要了解ISO七層協(xié)議模型,IP/UDP/TCP/HTTP等常用協(xié)議的原理和三次握手機(jī)制。明白DCOM/CORBA/XML/WEBServices存在的意義
隨著技術(shù)的發(fā)展,軟件與網(wǎng)絡(luò)的無縫結(jié)合是必然趨勢,軟件系統(tǒng)的位置無關(guān)性是未來計算模式的重要特征之一,DCOM/CORBA是當(dāng)前兩大主流的分布計算的中間平臺,DCOM是微軟COM(組件對象模型)的擴(kuò)展,而CORBA是OMG支持的規(guī)范。XML/WebServices重要性不言而喻,XML以其結(jié)構(gòu)化的表示方法和超強(qiáng)的表達(dá)能力被喻為互聯(lián)網(wǎng)上的“世界語”,是分布式計算的基石之一。
不要將軟件工程與CMM分開
大型軟件系統(tǒng)的開發(fā)中,工程化的開發(fā)控制取代個人英雄主義,成為軟件系統(tǒng)成功的保證,一個編程高手并不一定是一個優(yōu)秀的程序員,一個優(yōu)秀的程序員是將出色的編程能力和開發(fā)技巧同嚴(yán)格的軟件工程思想有機(jī)結(jié)合,編程只是軟件生命周期中的其中一環(huán),優(yōu)秀的程序員應(yīng)該掌握軟件開發(fā)各個階段的基本技能,如市場分析,可行性分析,需求分析,結(jié)構(gòu)設(shè)計,詳細(xì)設(shè)計,軟件測試等。
需求理解能力
程序員要能正確理解任務(wù)單中描述的需求。在這里要明確一點(diǎn),程序員不僅僅要注意到軟件的功能需求,還應(yīng)注意軟件的性能需求,要能正確評估自己的模塊對整個項(xiàng)目中的影響及潛在的威脅,如果有著兩到三年項(xiàng)目經(jīng)驗(yàn)的熟練程序員對這一點(diǎn)沒有體會的話,只能說明他或許是認(rèn)真工作過,但是沒有用心工作。
模塊化思維能力
作為一個優(yōu)秀的程序員,他的思想不能在局限當(dāng)前的工作任務(wù)里面,要想想看自己寫的模塊是否可以脫離當(dāng)前系統(tǒng)存在,通過簡單的封裝在其他系統(tǒng)中或其他模塊中直接使用。這樣做可以使代碼能重復(fù)利用,減少重復(fù)的勞動,也能是系統(tǒng)結(jié)構(gòu)越趨合理。模塊化思維能力的提高是一個程序員的技術(shù)水平提高的一項(xiàng)重要指標(biāo)。
素質(zhì)要求
團(tuán)隊精神和協(xié)作能力
團(tuán)隊精神和協(xié)作能力是作為一個程序員應(yīng)具備的最基本的素質(zhì)。軟件工程已經(jīng)提了將近三十年了,當(dāng)今的軟件開發(fā)已經(jīng)不是編程了,而是工程。獨(dú)行俠可以寫一些程序也能賺錢發(fā)財,但是進(jìn)入研發(fā)團(tuán)隊,從事商業(yè)化和產(chǎn)品化的開發(fā)任務(wù),就必須具備這種素質(zhì)。可以毫不夸張的說這種素質(zhì)是一個程序員乃至一個團(tuán)隊的安身立命之本。
文檔習(xí)慣
文檔是一個軟件系統(tǒng)的生命力。一個公司的產(chǎn)品再好、技術(shù)含量再高,如果沒有缺乏文檔,知識就沒有繼承,公司還是一個來料加工的軟件作坊。作為代碼程序員,必須將30%的工作時間寫用于技術(shù)文檔。沒有文檔的程序員勢必會被淘汰。
規(guī)范化的代碼編寫習(xí)慣
知名軟件公司的代碼的變量命名、注釋格式,甚至嵌套中行縮進(jìn)的長度和函數(shù)間的空行數(shù)字都有明確規(guī)定,良好的編寫習(xí)慣,不但有助于代碼的移植和糾錯,也有助于不同技術(shù)人員之間的協(xié)作。
測試習(xí)慣
測試是軟件工程質(zhì)量保證的重要環(huán)節(jié),但是測試不僅僅是測試工程師的工作,而是每個程序員的一種基本職責(zé)。程序員要認(rèn)識測試不僅是正常的程序調(diào)試,而要是要進(jìn)行有目的有針對性的異常調(diào)用測試,這一點(diǎn)要結(jié)合需求理解能力。
學(xué)習(xí)和總結(jié)的能力
程序員是很容易被淘汰的職業(yè),所以要善于學(xué)習(xí)總結(jié)。許多程序員喜歡盲目追求一些編碼的小技巧,這樣的技術(shù)人員無論學(xué)了多少語言,代碼寫起來多熟練,只能說他是一名熟練的代碼民工,他永遠(yuǎn)都不會有質(zhì)的提高。一個善于學(xué)習(xí)的程序員會經(jīng)常總結(jié)自己的技術(shù)水平,對自己的技術(shù)層面要有良好的定位,這樣才能有目的地提高自己。這樣才能逐步提高,從程序員升級為軟件設(shè)計師、系統(tǒng)分析員。
擁有強(qiáng)烈的好奇心
什么才是一個程序員的終極武器呢,那就是強(qiáng)烈的好奇心和學(xué)習(xí)精神。沒有比強(qiáng)烈的好奇心和學(xué)習(xí)精神更好的武器了,它是程序員們永攀高峰的源泉和動力所在。
行業(yè)現(xiàn)狀
由CSDN、《程序員》主辦的2007年開發(fā)者大調(diào)查2007年底已收到15000多份有效問卷,已經(jīng)是中國調(diào)查樣本最多的開發(fā)者調(diào)查。在這次調(diào)查中,詳細(xì)的分析了樣本空間的分布狀況,發(fā)
現(xiàn)在龐大數(shù)目的有效問卷的參與者中有70%也就是接近一萬一千名的參與調(diào)查者是IT的全職人員,14%的參與者是有過開發(fā)工作經(jīng)驗(yàn)的學(xué)生,從這樣的分布就可以看出來IT從業(yè)人員對專業(yè)知識的需求是巨大而迫切的,CSDN作為專業(yè)的軟件開發(fā)技術(shù)門戶網(wǎng)站,已經(jīng)是大家獲取這些技術(shù)知識的主要手段。
一、選擇數(shù)據(jù)庫技術(shù)和互聯(lián)網(wǎng)技術(shù)的人數(shù)總和占到了總?cè)藬?shù)的一半
2007年火熱的SOA和動態(tài)語言各占13%和12%。其實(shí)這幾大塊技術(shù)分布他們之間都是有一定的聯(lián)系的,互聯(lián)網(wǎng)的發(fā)展近兩年呈爆炸式的增長態(tài)勢,中國的網(wǎng)民總數(shù)已經(jīng)超過了1.4億這樣一個巨大的數(shù)字。
企業(yè)中業(yè)務(wù)的復(fù)雜程度越來越高,商業(yè)競爭不斷增加企業(yè)的IT系統(tǒng),使企業(yè)的商業(yè)數(shù)據(jù)呈幾何數(shù)量級不斷增長,在后臺海量的數(shù)據(jù)中數(shù)據(jù)的管理由之前的單一型數(shù)據(jù)變成了多緯度的復(fù)雜數(shù)據(jù),所以可以同時管理關(guān)系型數(shù)據(jù)庫和XML數(shù)據(jù)的混合型數(shù)據(jù)庫已經(jīng)成為主流。
面對企業(yè)不斷增加新的IT信息系統(tǒng),整合已經(jīng)迫在眉睫,SOA成為必然的趨勢,企業(yè)對人才的需求從單一型技術(shù)人才、業(yè)務(wù)人才跳躍到了業(yè)務(wù)技術(shù)的復(fù)合型人才,這次的開發(fā)人員大調(diào)查令《 程序員》雜志的調(diào)查者看到了這些技術(shù)焦點(diǎn)背后千絲萬縷的關(guān)聯(lián)。
二、幾乎一半的.NET用戶不參與開源項(xiàng)目RedHat+Ubuntu占有率超過70%
應(yīng)用到.NET平臺上的開源項(xiàng)目,“大量使用”的比例數(shù)僅為8.68%,尚不足一成;“少量應(yīng)用”的開發(fā)者人數(shù)比例為42.78%。“基本不用”的比例高達(dá)48.54%,與前二者之和幾乎不相上下。
雖然開源的出現(xiàn)和發(fā)展,讓軟件沒有壟斷的未來日漸明朗;雖然開源運(yùn)動經(jīng)過多年的高速發(fā)展,現(xiàn)在已經(jīng)聚集了相當(dāng)?shù)牧α浚_源的自由和給予理念逐漸深入到了企業(yè)的技術(shù)核心層面。但微軟以商業(yè)軟件為生,畢竟在微軟技術(shù)領(lǐng)域中,開源項(xiàng)目通常都被看作是二等公民。很多開源項(xiàng)目對.NET社區(qū)產(chǎn)生了巨大的推動作用,微軟公司很難提供任何實(shí)質(zhì)性質(zhì)的支持。
Linu版本
當(dāng)前安裝有Linux操作系統(tǒng),數(shù)據(jù)中RedHatFedora占據(jù)絕對優(yōu)勢——Linux使用者使用該版本占總數(shù)的49.49%。Fedora是RedHat推出的重要的一款Linux版本,在每個fedora版本中都是集成最新的Linux軟件,特別是服務(wù)端軟件。
使用“RedHatFedora”關(guān)鍵詞在百度網(wǎng)頁中搜索得到7,090,000條結(jié)果,RedHatFedora在調(diào)查中占據(jù)Linux版本的半壁江山符合整個Linux版本的分布情況。
排在第二位的是Ubuntu,受支持?jǐn)?shù)占到總數(shù)的23.92%;第三位的是SuSE占9.09%,接下來是Debian,使用率為5.92%。
在這里面令人期待的中國本土Linux的讓人大失所望。使用率僅占5.16%,幾乎只
有RedHatFedora的十分之一。
三、揭示八成技術(shù)人員數(shù)據(jù)庫選型標(biāo)準(zhǔn)SQLServer用戶接近50%
使用率占據(jù)榜首的數(shù)據(jù)庫產(chǎn)品是微軟的SQLServer,比例數(shù)達(dá)到了47.92%。與其余所有的數(shù)據(jù)庫之和分庭抗衡,大有一覽眾山小之勢。
從調(diào)查得到的使用率來看,MySQL仍處于望MSSQLServer項(xiàng)背的階段。調(diào)查顯示,MySQL的使用數(shù)為1651,占總數(shù)的13.80%,不過排名第三。
使用率排在第二位的是Oracle,比例達(dá)到24.21%。在前有SQLServer,后有MySQL的情況下,Oracle仍能達(dá)到四分之一的占有率,發(fā)展勢頭不可謂不強(qiáng)勁。
雖然Orcale數(shù)據(jù)庫的價格比SQLServer數(shù)據(jù)庫要高,但Oracle采用開放的策略目標(biāo),可在所有主流平臺上運(yùn)行。而且有開發(fā)者認(rèn)為Oracle的安全認(rèn)證是獲得最高認(rèn)證級別的ISO標(biāo)準(zhǔn)認(rèn)證,因此安全性高于SQLServer。
排在第四位的是Access——5.59%;接著是DB2UDB,占總數(shù)的2.75%;至于FoxPro、Informix、PostgreSQL、Sybase得票數(shù)均僅在一百左右,還有待進(jìn)一步的發(fā)展。
四、中國程序員最愛的智能手機(jī)平臺Linux+Java超過Symbian
“開源Linux對于眾多開發(fā)者的吸引力是巨大的,但是,這僅僅是針對于技術(shù)開發(fā)人員來說的,而對于普通消費(fèi)者就不是如此了。”在眾多開發(fā)者心中,主要是對Linux的青睞。從調(diào)查結(jié)果中也可以直接反應(yīng)這樣的現(xiàn)象。有專家對此評論說:Linux+Java的模式,應(yīng)該是應(yīng)用最多的模式。
開源Linux對于眾多開發(fā)者的吸引力是巨大的,但是,這僅僅是針對于技術(shù)開發(fā)人員來說的,而對于普通消費(fèi)者就不是如此了。針對此問題行業(yè)的專家有自己的觀點(diǎn):“現(xiàn)在Wince和Symbian發(fā)展很快,并且隨著手機(jī)硬件方面性能的提高,很多政府部門和企業(yè)在采購時,很多會考慮Dopod這樣的手機(jī),或者價格便Wince和Symbian都主要使用c++開發(fā),正是嵌入式開發(fā)的潮流。”
不同人群對于收集智能操作系統(tǒng)的觀點(diǎn)是不同的,對于開發(fā)者角度,他們更加青睞于微軟和開源Linux的產(chǎn)品,而普通大眾他們比較喜歡Wince和Symbian。五、七成程序員不愿意選擇門戶網(wǎng)站獲取開源信息SourceForge占絕對優(yōu)勢
30%的技術(shù)人員從門戶網(wǎng)站獲取開源技術(shù)信息,剩下的70%的技術(shù)人員都是從專業(yè)的開源社區(qū)和開源廠商的技術(shù)網(wǎng)站上獲取信息,包括有SourceForge、LinuxToday、OpenOffice和IBMdW等。
在這70%當(dāng)中,比例占有絕對優(yōu)勢的就是SourceForge了,這里是開源軟件的開發(fā)者進(jìn)行開發(fā)管理的集中式場所,也是全球最大開源軟件開發(fā)平臺和倉庫。而LinuxToday里面會有記錄很多很新的Linux業(yè)界大事,新聞以及出版信息。所以,對開源技術(shù)感興趣的程序員們,不必再為如何獲取開源信息而苦惱了,快加入到這70%的人群中來吧。
互聯(lián)網(wǎng)的發(fā)展已經(jīng)成為大家獲取信息最主要的渠道之一,網(wǎng)民上網(wǎng)的習(xí)慣也從開始的上為數(shù)不多的幾個門戶網(wǎng)站發(fā)生了變化,大而全的門戶網(wǎng)站并不能滿足專業(yè)領(lǐng)域人員的信息需求,從2004年開始陸續(xù)出現(xiàn)了大量的各個領(lǐng)域垂直細(xì)分的內(nèi)容網(wǎng)站,一方面有長尾理論的理論支持,另一方面廠商也建立了相應(yīng)產(chǎn)品的技術(shù)內(nèi)容網(wǎng)站,希望能聚集一批專注于這個領(lǐng)域?qū)I(yè)人士,做好他們的定向營銷。
做細(xì)分領(lǐng)域內(nèi)容的網(wǎng)站對門戶已經(jīng)造成了一定的威脅,這些網(wǎng)站的專業(yè)性高,用戶的粘性相對也比較高,如果細(xì)分領(lǐng)域的內(nèi)容網(wǎng)站能將自己的服務(wù)有所提升,就如同SourceForge一樣,那么未來門戶網(wǎng)站的路就變得更加崎嶇了。
六、Java開發(fā)框架:6%的JSF欲撼動21%的Struts
JSF現(xiàn)在比較有優(yōu)勢的是對Ajax的集成,這一點(diǎn)走在了其他框架的前面。未來兩
年,JSF與Struts將展開JavaWeb框架的最終戰(zhàn)爭。經(jīng)過數(shù)年的“框架大戰(zhàn)”,Java界的各種框架找到了自己應(yīng)有的位置。Spring+Hibernate+Struts已成為Java開發(fā)的主流體系。在這個體系中,Spring+Hibernate的地位應(yīng)該說短期內(nèi)是難以撼動了。除了新興的JbossSeam作為挑戰(zhàn)者之外,幾乎難有勁敵。
JavaB/S編程中歷來戰(zhàn)火最激烈的其實(shí)還在Web層,框架的數(shù)量最多,爭議最大。一切由Struts而起,而Struts最終也坐穩(wěn)了第一個時代的王座。在技術(shù)層面,Struts1.x已經(jīng)被無數(shù)人抱怨過、批評過,但終于還是穩(wěn)坐王位,這充分說明了習(xí)慣的力量。“穩(wěn)定壓倒一切”,這句話在IT技術(shù)領(lǐng)域仍舊適用。
詳細(xì)的分析了Java開發(fā)框架的使用狀況,發(fā)現(xiàn)主要使用的開發(fā)框架JSP占26%,Struts占21%,Hibernate占17%,SpringMVC占11%,EJB占7%,JSF占6%,SpringWebFlow和POJO各占4%,其它占4%。就這一調(diào)查數(shù)據(jù),不難看出,Spring+Hibernate+Struts的優(yōu)勢地位還是相當(dāng)?shù)拿黠@。
Struts和Hibernate幾乎已經(jīng)成了JavaEE應(yīng)用的常規(guī)配置,21%的開發(fā)者用到Struts,用到Hibernate的開發(fā)者也有17%;在一個成熟的技術(shù)平臺上,各個項(xiàng)目的技術(shù)方案會在很大程度上趨同——因?yàn)樗形粗I(lǐng)域都已經(jīng)被探明,各種問題都有對應(yīng)的最佳實(shí)踐,架構(gòu)師們可以參考的成功案例越來越多。就拿JavaEE來說,架構(gòu)師們需要考慮的問題比之三年前已經(jīng)簡單多了,這就是成熟的價值。
有專家評論:“其實(shí)IT應(yīng)用技術(shù),什么新鮮玩意并不難學(xué),難的是標(biāo)準(zhǔn)化和規(guī)范化。每個程序員都有自己的思路和習(xí)慣,寫出來的代碼自然是五花八門。Java何以成為編程界的占重要地位,很重要的一點(diǎn)在于Java的規(guī)范化。這種規(guī)范化很高的語言適用于多人合作的大型項(xiàng)目,便于溝通和理解,也就便于集成和維護(hù)。Java世界為什么會框架橫飛,說到底還是規(guī)范化的需要。純JSP和Struts寫Web誰快,擺明了是JSP。那為什么用Struts?原因在于100個人寫出來的JSP,有100種寫法;而100個人寫出來的Struts,基本相似。Struts之成功,正緣于其在JavaWeb層的規(guī)范化方面所做出的貢獻(xiàn)。
然而長江后浪推前浪,Struts1.x的技術(shù)缺陷畢竟是隱患。Sun力推JSF,打算一雪Web層框架缺失之恥。JSF現(xiàn)在比較有優(yōu)勢的是對Ajax的集成,這一點(diǎn)走在了其他框架的前面。未來兩年,JSF與Struts將展開JavaWeb框架的最終戰(zhàn)爭。
JSP經(jīng)過幾年風(fēng)雨洗禮依然把持頭把交椅,看來所有的框架表示層都離不開JSP而存在,而作為JSP的手足兄弟JSF也是僅次Spring之后又一個后起之秀。
七、C++開發(fā)環(huán)境格局難打破75%的開發(fā)人員首選VS系列
BCB正江河日下,2007版本的推出也無法力挽狂瀾。雖然現(xiàn)在C++Builder已經(jīng)歸于CodeGear,但人們還是習(xí)慣性地與Borland聯(lián)系上。
1998年Borland公司推出的C++Builder這一當(dāng)年全新的32位Windows開發(fā)工
具,繼承了Delphi使用簡便、功能強(qiáng)大、效率高的特點(diǎn),并且結(jié)合了C++語言幾乎所有優(yōu)點(diǎn)。所以開始C++Builder迅速風(fēng)靡。它的主要競爭對象——Microsoft開發(fā)的VisualC++也是不甘示弱,迅速出擊,突出了Visual可視化強(qiáng)的特點(diǎn),加上Platform、SDK部分以及Microsoft產(chǎn)品與Windows的天然默契,逐漸成為了技術(shù)人員的首選。隨著VisualC++版本的不段升級,以及功能、風(fēng)格等諸多原因,BCB漸現(xiàn)頹勢,許多Builder使用者也開始轉(zhuǎn)而使用Visual了。
在2007年CSDN、《程序員》主辦的開發(fā)者大調(diào)查中,詳細(xì)的分析了C++方面大家主要使用什么IDE的狀況,在目前已收到的15000多份有效問卷中,發(fā)現(xiàn)主要使用VS系列的占了75%,BorlandC++Builder/CBuilderX只占6%,EclipseCDT占6%,DevC++占2%,其他IDE占3%,不使用IDE占8%。對于.NET開發(fā),VisualC++2005有了一套新的語法;新的優(yōu)化技術(shù),可使程序的速度最高提高30%;同時新的編譯模式,可保證在Microsoft.NETFramework之上生成完全遵從CLI(CommonLanguageInfrastructure)的可驗(yàn)證代碼;新的interop模式,可提供本地與托管代碼的無縫融合。
相對于前兩個版本,新編譯器還包括了一個增強(qiáng)版本的緩沖區(qū)安全檢查選項(xiàng),而且對C++程序普遍使用的庫,也有新的注重安全的版本。VisualC++2005對基于IntelItanium和AMD64的64位平臺,提供了對OpenMP標(biāo)準(zhǔn)的支持,并且修正了一些混合DLL加載的問題,對DoubleP/Invoke的性能問題,提供了自動運(yùn)行時消除。相比之下,C++Builder2007英文版2008年6月初上市。從CodeGear大中華區(qū)技術(shù)總監(jiān)李維的博客,看到CodeGear對C++Builder2007的期待。雖然說對同一件事情,每個人都有自己的視角,已有五年C++方面學(xué)習(xí)和開發(fā)經(jīng)驗(yàn)的賴勇浩說道:“BCB正江河日下,2007版本的推出也無法力挽狂瀾。雖然現(xiàn)在C++Builder已經(jīng)歸于CodeGear,但人們還是習(xí)慣性地與Borland聯(lián)系上。
現(xiàn)在的Microsoft及VC勢頭強(qiáng)勁,產(chǎn)品也具有很高的質(zhì)量性,CodeGear在C++和.Net領(lǐng)域至少三五年內(nèi)會繼續(xù)望其項(xiàng)背。所以推出CB2007,更多的是基于版本延續(xù)。”
八、程序員更喜歡Firefox市場份額超過IE7.0兩倍
參與調(diào)查的多數(shù)是軟件開發(fā)人員或者多數(shù)是IT從業(yè)人員,但是從這一比例不難看出,IE丟失掉了曾經(jīng)在瀏覽器大戰(zhàn)中占據(jù)了的技術(shù)優(yōu)勢,在IE6推出后的5年時間里,瀏覽器一直在快速發(fā)展,而IE卻一直沒有更新過,這對一個世界上最常用的產(chǎn)品來說絕對是致命的。Firefox(火狐瀏覽器)以它的小巧、安全,很容易擴(kuò)展和定制的特長獲得了越來越多的喜愛。
更重要的是,它是是一個自由的瀏覽器,所有的源代碼都是開放的,任何人可以為它的成長貢獻(xiàn)力量。Cookie、頁面緩存,個人都可以精確的控制,這些特性都是技術(shù)人員們所崇尚的“我的 地盤我做主”的精神。如果說之前FireFox相對IE6有50%的優(yōu)勢的話,那么,F(xiàn)ireFox相對于現(xiàn)在的IE7的優(yōu)勢已經(jīng)降低到25%左右了。因?yàn)镮E7從底層已經(jīng)做了很多的修改,已經(jīng)慢慢的向W3C標(biāo)準(zhǔn)靠近了許多,在功能使用方面與FireFox的差距也變得很細(xì)微,Tab功能,CSS和腳本支持功能現(xiàn)在IE7都比之前表現(xiàn)強(qiáng)了,差距僅僅存在于某些小細(xì)節(jié)中了。
IE6在這個市場中存在了5年之后微軟才意識到改變和向國際標(biāo)準(zhǔn)靠攏的重要性,這就直接導(dǎo)致了大量的技術(shù)人員失去了對IE的信心,投向FireFox陣營,不過,微軟到底還是強(qiáng)大的,在全球范圍內(nèi)有很多的“粉絲”,他們會一直關(guān)注微軟的任何一次動作,客觀的評價也是對產(chǎn)品最好的反饋,也是最有價值的。
關(guān)于Maxthon和騰訊的TT,雖然它們都是基于IE內(nèi)核的瀏覽器,但是Maxthon在這次調(diào)查中僅次于FireFox,力壓IE名列第二的位置,著實(shí)看出了這幾年Maxthon確實(shí)做到了他們的口號“讓技術(shù)為使用舒適服務(wù)”。
包括了FireFox、Opera這種標(biāo)準(zhǔn)的瀏覽器,也包括了Maxthon和TT這樣基于IE內(nèi)核的瀏覽器,對于標(biāo)準(zhǔn)的瀏覽器,F(xiàn)ireFox和Opera的重點(diǎn)是要解決兼容問題,而基于IE內(nèi)核的Maxthon和TT更主要的是要解決瀏覽器插件、工具的應(yīng)用問題,所以,技術(shù)產(chǎn)品的激烈競爭帶給用戶的其實(shí)是一種良性循環(huán),使我們可以第一時間用到最好用的工具,至于商業(yè)效應(yīng),還是留給廠商自己去考慮吧。
九、中國程序員健康兩成感覺很虛弱亞健康接近七成
“干得比驢累,吃得比豬差,起得比雞早,看上去比誰都好,五年后比誰都老。很多程
序員都曾這樣感慨和抱怨過自己的生活狀態(tài)。” 亞健康狀態(tài)是人體處于健康和疾病之間的過渡階段,在身體上、心理上沒有疾病,但主觀上卻有許多不適的癥狀表現(xiàn)和心理體驗(yàn)。
位于調(diào)查結(jié)果第二位的是“很虛弱”——149,比例為19.81%。很虛弱的健康指數(shù)低于亞健康,已接近生病和透支狀態(tài),他們的健康已經(jīng)被亮出了黃牌。
每個人的理解不一樣,但是“糟透了”這樣的詞如果用來形容程序員健康的話,相信大多數(shù)人都絕對認(rèn)同“你已經(jīng)病了”這樣的理解。令人不敢相信的是,竟然有8.24%的程序員用這個詞來形容自己的健康狀態(tài)!
調(diào)查結(jié)果中“非常健康”的票數(shù)低得可憐——40,即使算上“沒感覺”,二者之和也不過9.04%,幾乎跟“糟透了”持平。如果將“非常健康”和“沒感覺”一起算為健康的話,處于亞健康狀態(tài)的程序員是健康狀態(tài)的7倍,自認(rèn)為“很虛弱”的程序員數(shù)目是處于健康狀態(tài)的2.2倍!
十、.NET全面進(jìn)入2.0時代,AJAX風(fēng)頭正勁“在Java領(lǐng)域,JDK5.0是當(dāng)之無愧的主流平臺,但JDK1.4仍保有一半以上的占有量。總的來說,Java族群顯然不像.NET族群那樣追新。從另一個方面看,這也說明Java平臺的成熟,和.NET平臺的迅速發(fā)展。”
根據(jù)2007年的調(diào)查數(shù)據(jù)分析,在.NET領(lǐng)域,.NETFramework2.0的采用量已全面超越.NETFramework1.1,成為.NET平臺的首選框架。2006年調(diào)查結(jié)果,1.1和2.0的采用量基本持平,而2007年2.0的采用量則高達(dá)1.1的三倍之多。.NETFramework1.1已是明日黃花,微軟的更新
換代策略可以說是成功的。在Java領(lǐng)域,JDK5.0是當(dāng)之無愧的主流平臺,但JDK1.4仍保有一半以上的占有量。總的來說,Java族群顯然不像.NET族群那樣追新。從另一個方面看,這也說明Java平臺的成熟,和.NET平臺的迅速發(fā)展。
B/S已經(jīng)成為中國軟件業(yè)普遍接受的軟件結(jié)構(gòu)。在表現(xiàn)層,AJAX技術(shù)采用量較去年有較大提升,有將近一半的Web應(yīng)用采用了AJAX技術(shù),仍采用純HTML+少量腳本的Web應(yīng)用中,也有四分之三打算轉(zhuǎn)向采用AJAX技術(shù)。反觀微軟和Adobe力推的新一代RIA平臺,則響應(yīng)者尚少。分別只有1/20和1/10的人愿意選用SilverLight和Flash/Flex作為Web表現(xiàn)層技術(shù)。
職業(yè)困境
老虎、Bill、自己,中國程序員的困境也來自三個方面
困境之一:老虎的威脅。程序員要面對的餓老虎實(shí)在不少,比如說老板,好象老板就是程序員的天敵,什么“不懂技術(shù)卻指手畫腳”、什么“得到與付出不相當(dāng)”似乎是程序員最常見的牢騷,這個問題不可能得到真正的解決。
困境之二:Bill的競爭。一般說來中國的程序員大都是吃“青春飯”的,大部分程序員的黃金時代是24~28歲。到了30歲左右,一批又一批年輕程序員會給你帶來巨大的競爭壓力。首先由于軟件行業(yè)的飛速發(fā)展,很多自己以前學(xué)的東西逐漸升級換代,而許多程序員由于長期于工作,學(xué)習(xí)新知識的效率必然下降。其次自己干了幾年,薪水要求自然就高了,而年輕程序員工資又低、干活又快,當(dāng)然會成為老板的首選;第三,30歲基本都已經(jīng)成家了,要支撐家庭的生活負(fù)擔(dān),幾乎連從頭在來的勇氣都不會有了。中國的老話說“長江后浪推前浪、一代新人換舊人”,這個歷史的規(guī)律在軟件開發(fā)行業(yè)體現(xiàn)的尤其明顯和殘酷,很多程序員必然要面對的結(jié)果就是降薪乃至失業(yè)。
困境之三:自我的實(shí)力。都知道人最難戰(zhàn)勝的是自己,所以自我也就是程序員需要超越的最大障礙。大多程序員都把系統(tǒng)分析員和項(xiàng)目經(jīng)理作為自己的職業(yè)目標(biāo),但這些目標(biāo)的達(dá)成,需要個人素質(zhì)、市場機(jī)遇等多個方面的條件,太多的程序員就是在高不成、低不就的狀態(tài)中蹉跎了歲月。對于系統(tǒng)分析員,特別需要以下幾方面的素質(zhì):客戶需求分析能力、系統(tǒng)架構(gòu)與設(shè)計能力、模塊分解設(shè)計能力、項(xiàng)目流程控制能力、項(xiàng)目風(fēng)險評估能力等,而對于項(xiàng)目經(jīng)理則更注重項(xiàng)目管理方面的能力如團(tuán)隊組織能力、溝通協(xié)調(diào)能力、分析問題解決問題的能力以及良好的職業(yè)道德等,而這些素質(zhì)和能力往往只能依靠程序員個人的學(xué)習(xí)和努力。看到越來越多的程序員開始學(xué)習(xí)項(xiàng)目管理的課程,真的有點(diǎn)為他們擔(dān)心,因?yàn)楝F(xiàn)在的項(xiàng)目管理培訓(xùn)只能停留在理論和考證的程度,既沒有素質(zhì)方面的訓(xùn)練,又缺少實(shí)際軟件開發(fā)項(xiàng)目的案例,學(xué)習(xí)的結(jié)果遠(yuǎn)遠(yuǎn)不能達(dá)到預(yù)期的效果。
第四篇:程序員
7.5.3系統(tǒng)測試和調(diào)試
1.系統(tǒng)測試的意義及目的系統(tǒng)測試是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程,成功的測試是發(fā)現(xiàn)了至今尚未發(fā)現(xiàn)的錯誤的測試。
測試的目的就是希望能以最少的人力和時間發(fā)現(xiàn)潛在的各種錯誤和缺陷。應(yīng)根據(jù)開發(fā)各階段的需求、設(shè)計等文檔或程序的內(nèi)部結(jié)構(gòu)精心設(shè)計測試實(shí)例,并利用這些實(shí)例來運(yùn)行程序,以便發(fā)現(xiàn)錯誤。信息系統(tǒng)測試應(yīng)包括軟件測試、硬件測試和網(wǎng)絡(luò)測試。硬件測試、網(wǎng)絡(luò)測試可以根據(jù)具體的性能指標(biāo)來進(jìn)行,此處所說的測試更多的是指軟件測試。
系統(tǒng)測試是保證系統(tǒng)質(zhì)量和可靠性的關(guān)鍵步驟,是對系統(tǒng)開發(fā)過程中的系統(tǒng)分析、系統(tǒng)設(shè)計和實(shí)施的最后復(fù)查。根據(jù)測試的概念和目的,在進(jìn)行信息系統(tǒng)測試時應(yīng)遵循以下基本原則:
·應(yīng)盡早并不斷地進(jìn)行測試。測試不是在應(yīng)用系統(tǒng)開發(fā)完之后才開始進(jìn)行的。由于原始問題的復(fù)雜性、開發(fā)各階段的多樣性以及參加人員之間的協(xié)調(diào)等因素,使得在開發(fā)各個階段都有可能出現(xiàn)的錯誤。因此,測試應(yīng)貫穿在開發(fā)的各個階段,盡早糾正錯誤,消除隱患。
·測試工作應(yīng)該避免由原開發(fā)軟件的人或小組承擔(dān),一方面,開發(fā)人員往往不愿否認(rèn)自己的工作,總認(rèn)為自己開發(fā)的軟件沒有錯誤;另一方面,開發(fā)人員的錯誤很難由本人測試出來,很容易根據(jù)自己編程的思路來制定測試思路,具有局限性。測試工作由專門人員來承擔(dān)會更客觀,更有效。
·設(shè)計測試方案的時候,不僅要確定輸入數(shù)據(jù),而且要根據(jù)系統(tǒng)功能確定預(yù)期輸出結(jié)果。將實(shí)際輸出結(jié)果與預(yù)期結(jié)果進(jìn)行比較就能發(fā)現(xiàn)測試對象是否正確。
·在設(shè)計測試實(shí)例時,不僅要設(shè)計有效合理的輸入條件,也要包含不合理、失效的輸入條件。測試的時候,人們往往習(xí)慣按照合理的、正常的情況進(jìn)行測試,而忽略了對異常、不合理、意想不到的情況進(jìn)行測試,而這些可能就是隱患。
·在測試程序時,不僅要檢驗(yàn)程序是否做了該做的事,還要檢驗(yàn)程序是否做了不該做的事。多余的工作會帶來副作用,影響程序的效率,有時會帶來潛在的危害或錯誤。
·嚴(yán)格按照測試計劃來進(jìn)行,避免測試的隨意性。測試計劃應(yīng)包括測試內(nèi)容、進(jìn)度安排、人員安排、測試環(huán)境、測試工具和測試資料等。嚴(yán)格按照測試計劃進(jìn)行測試可以保證進(jìn)度,使各方面都得以協(xié)調(diào)進(jìn)行。
·妥善保存測試計劃和測試?yán)樱瑢⑵渥鳛檐浖臋n的組成部分,為維護(hù)提供方便。
·測試?yán)討?yīng)是精心設(shè)計出來的,可以為重新測試或追加測試提供方便。當(dāng)糾正錯誤、系統(tǒng)功能擴(kuò)充后,都需要重新開始測試,而這些工作重復(fù)性很高,可以利用以前的測試?yán)樱蛟谄浠A(chǔ)上修改,然后進(jìn)行測試。
2.測試過程
測試是開發(fā)過程中一個獨(dú)立且非常重要的階段,測試過程基本上與開發(fā)過程平行進(jìn)行。
一個規(guī)范化的測試過程通常包括以下基本的測試活動。
(1)擬定測試計劃。在制定測試計劃時,要充分考慮整個項(xiàng)目的開發(fā)時間和開發(fā)進(jìn)度以及一些人為因素和客觀條件等,使得測試計劃是可行的。測試計劃的內(nèi)容主要有:測試的內(nèi)容、進(jìn)度安排、測試所需的環(huán)境和條件、測試培訓(xùn)安排等。
(2)編制測試大綱。測試大綱是測試的依據(jù)。它明確詳盡地規(guī)定了在測試中針對系統(tǒng)的每一項(xiàng)功能或特性所必須完成的基本測試項(xiàng)目和完成測試的標(biāo)準(zhǔn)。
(3)根據(jù)測試大綱設(shè)計和生成測試?yán)印T谠O(shè)計測試?yán)拥臅r候,可綜合利用前面介紹的測試?yán)雍驮O(shè)計技術(shù),產(chǎn)生測試設(shè)計說明文檔,其內(nèi)容主要有被測項(xiàng)目、輸入數(shù)據(jù)、測試過程、預(yù)期輸出結(jié)果等。
(4)實(shí)施測試。測試的實(shí)施階段是由一系列的測試周期組成的。在每個測試周期中,測試人員和開發(fā)人員將依據(jù)預(yù)先編制好的測試大綱和準(zhǔn)備好的測試?yán)樱瑢Ρ粶y軟件或設(shè)備進(jìn)行完整的測試。
(5)生成測試報告。測試完成后,要形成相應(yīng)的測試報告,主要對測試進(jìn)行概要說明,列出測試的結(jié)論,指出缺陷和錯誤。另外,給出一些建議,如可采用的修改方法,各項(xiàng)修改預(yù)計的工作量及修改的負(fù)責(zé)人員。
3.測試策略和測試方法
軟件測試方法分人工測試和機(jī)器測試。
1)人工測試
人工測試指的是采用人工方式進(jìn)行測試,目的是通過對程序靜態(tài)結(jié)構(gòu)的檢查,找出編譯時不能發(fā)現(xiàn)的錯誤。經(jīng)驗(yàn)表明,組織良好的人工測試可以發(fā)現(xiàn)程序中30%~70%的編碼和邏輯設(shè)計錯誤。
人工測試又稱為代碼審查,其內(nèi)容包括檢查代碼和設(shè)計是否一致,檢查代碼邏輯表達(dá)是否正確和完整,檢查代碼結(jié)構(gòu)是否合理等。主要有3種方法。
·個人復(fù)查:指程序員本人對程序進(jìn)行檢查。由于心理上的原因和思維慣性的影響,對自己的錯誤一般不容易發(fā)現(xiàn),對功能理解的錯誤更不可能糾正。因此,這種方法主要針對小規(guī)模程序,效率不高。
·抽查:通常由3~5人組成測試小組,測試人員應(yīng)是沒有參加該項(xiàng)目開發(fā)的有經(jīng)驗(yàn)的程序設(shè)計人員。在抽查之前,應(yīng)先閱讀相關(guān)的軟件資料和源程序,然后由測試
人員扮演計算機(jī)的角色,將一批有代表性的測試數(shù)據(jù)沿程序的邏輯走一遍,監(jiān)視程序的執(zhí)行情況。人工檢測程序很慢,只能選擇少量簡單的例子。
·會審。測試人員的構(gòu)成與抽查類似。在會審之前,測試人員應(yīng)該充分閱讀相關(guān)資料,比如系統(tǒng)分析說明書、系統(tǒng)設(shè)計說明書、源程序等。測試人員應(yīng)盡可能多地列出典型錯誤。在會審時,由編程人員逐句講解程序,測試人員逐個審查、提問。通過這種方式,往往可能使編程人員發(fā)現(xiàn)自己以前沒有意識到的錯誤,使問題暴露=會審后,要將發(fā)現(xiàn)的問題登記、分析、歸類。
·代碼復(fù)審應(yīng)該在被測軟件編譯成功之后。編譯都不通過的軟件,當(dāng)然談不上復(fù)審。在復(fù)審期間,應(yīng)保證有足夠的時間,讓測試小組對問題進(jìn)行充分的討論,這樣才能有效地提高測試效率,避免出錯。
2)機(jī)器測試
機(jī)器測試是把設(shè)計好的測試?yán)幼饔糜诒粶y程序,比較測試結(jié)果和預(yù)期結(jié)果是否一致。如果不一致,就說明可能存在錯誤。機(jī)器測試只能發(fā)現(xiàn)錯誤的癥狀,無法對問題進(jìn)行定位。
機(jī)器測試分為黑盒測試和白盒測試兩種。
(1)黑盒測試也稱為功能測試。將軟件看成黑盒子,在完全不考慮軟件內(nèi)部結(jié)構(gòu)和特性的情況下,測試軟件的外部特性。進(jìn)行黑盒測試主要是為了發(fā)現(xiàn)以下幾類錯誤:
·是否有錯誤的功能或遺漏的功能?
·界面是否有誤?輸入是否正確接收?輸出是否正確?
·是否有數(shù)據(jù)結(jié)構(gòu)或外部數(shù)據(jù)庫訪問錯誤?
·性能是否能夠接受?
·是否有初始化或終止性錯誤?
(2)白盒測試也稱為結(jié)構(gòu)測試。將軟件看成透明的白盒。根據(jù)程序的內(nèi)部結(jié)構(gòu)和邏輯來設(shè)計測試?yán)樱瑢Τ绦虻穆窂胶瓦^程進(jìn)行測試,檢查是否滿足設(shè)計的要求。其原則是:
·程序模塊中的所有獨(dú)立路徑至少執(zhí)行一次。
·在所有的邏輯判斷中,取“真”和取“假”的兩種情況至少都要執(zhí)行一次。·每個循環(huán)都應(yīng)在邊界條件和一般條件下各執(zhí)行一次。
·測試程序內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性等。
4.軟件測試步驟
軟件測試實(shí)際上可分成4步進(jìn)行。
1)單元測試‘
單元測試也稱為模塊測試,在模塊編寫完成且無編譯錯誤后就可以進(jìn)行。如果選用機(jī)器測試,一般用白盒測試法,多個模塊可以同時進(jìn)行。
測試一個模塊時需要編寫一個驅(qū)動模塊和若干個樁(stub)模塊。驅(qū)動模塊的功能是向被測試模塊提供測試數(shù)據(jù),驅(qū)動被測模塊,并從被測模塊中接收測試結(jié)果。樁模塊的功能是模擬被測模塊所調(diào)用的子模塊,它接收被測模塊的調(diào)用,檢驗(yàn)調(diào)用參數(shù),模擬被調(diào)用的子模塊功能,把結(jié)果送回被測模塊。
2)組裝測試
組裝測試也稱為集成測試,就是把模塊按系統(tǒng)設(shè)計說明書的要求組合起來進(jìn)行測試。
即使所有模塊都通過了測試,但在組裝之后,仍可能會出現(xiàn)問題:穿過模塊的數(shù)據(jù)被丟失;一個模塊的功能對其他模塊造成有害的影響;各個模塊組裝起來沒有達(dá)到預(yù)期的功能;全局?jǐn)?shù)據(jù)結(jié)構(gòu)出現(xiàn)問題;另外,對于單個模塊來說其誤差可以接受,但模塊組合后,可能會出現(xiàn)誤差累積,最后到不能接受的程度,所以需要組裝測試。
通常,組裝測試有兩種方法:一種是分別測試各個模塊,再把這些模塊組合起來進(jìn)行整體測試,即非增量式集成;另一種是把下一個要測試的模塊組合到已測試好的模塊中,測試完后再將下一個需要測試的模塊組合起來,進(jìn)行測試,逐步把所有模塊組合在一起,并完成測試,即增量式集成。非增量式集成可以對模塊進(jìn)行并行測試,能充分利用人力,并加快工程進(jìn)度。但這種方法容易混亂,出現(xiàn)錯誤不容易查找和定位。增量式測試的范圍逐步擴(kuò)大,錯誤容易定位,而且已測試的模塊可在新的條件下再測試,使測試更徹底。
3)確認(rèn)測試
經(jīng)過組裝測試之后,軟件就被集成起來,接口方面的問題已經(jīng)解決,將進(jìn)入軟件測試的最后一個環(huán)節(jié)——確認(rèn)測試。確認(rèn)測試的任務(wù)就是進(jìn)一步檢查軟件的功能和性能是否與用戶要求的一致。系統(tǒng)方案說明書描述了用戶對軟件的要求,所以是軟件有效性驗(yàn)證的標(biāo)準(zhǔn),也是確認(rèn)測試的基礎(chǔ)。
確認(rèn)測試,首先要進(jìn)行有效性測試以及軟件配置審查,然后進(jìn)行驗(yàn)收測試和安裝測試,經(jīng)過管理部門的認(rèn)可和專家鑒定后,軟件即可交給用戶使用。
4)系統(tǒng)測試
系統(tǒng)測試是將已經(jīng)確認(rèn)的軟件、計算機(jī)硬件、外設(shè)和網(wǎng)絡(luò)等其他因素結(jié)合在一起,進(jìn)行信息系統(tǒng)的各種組裝測試和確認(rèn)測試,其目的是通過與系統(tǒng)的需求相比較,發(fā)現(xiàn)所開發(fā)的系統(tǒng)與用戶需求不符或矛盾的地方。系統(tǒng)測試是根據(jù)系統(tǒng)方案說明書來設(shè)計測試?yán)拥模R姷南到y(tǒng)測試主要有恢復(fù)測試、安全性測試、強(qiáng)度測試、性能測試、可靠性測試、安裝測試。
5.調(diào)試’
調(diào)試的任務(wù)就是根據(jù)測試時發(fā)現(xiàn)的錯誤,找出原因和具體的位置,進(jìn)行改正。調(diào)試工作主要由程序開發(fā)人員來進(jìn)行,誰開發(fā)的程序就由誰來進(jìn)行調(diào)試。
目前常用的調(diào)試方法有如下幾種:
·試探法。調(diào)試人員分析錯誤的癥狀,猜測問題的所在位置,利用在程序中設(shè)置輸出
語句,分析寄存器和存儲器的內(nèi)容等手段來獲得錯誤的線索,一步步地試探和分析出錯誤所在。這種方法效率很低,適合于結(jié)構(gòu)比較簡單的程序。
·回溯法。調(diào)試人員從發(fā)現(xiàn)錯誤癥狀的位置開始,人工沿著程序的控制流程往回跟蹤代碼,直到找出錯誤根源為止。這種方法適合于小型程序,對于大規(guī)模程序,由于其需要回溯的路徑太多而變得不可操作。
·對分查找法。這種方法主要用來縮小錯誤的范圍,如果已經(jīng)知道程序中的變量在若干位置的正確取值,可以在這些位置上給這些變量以正確值,觀察程序運(yùn)行的輸出結(jié)果。如果沒有發(fā)現(xiàn)問題,則說明從賦予變量一個正確值開始到輸出結(jié)果之間的程序沒有錯,問題可能出在除此之外的程序中,否則錯誤就在所考察的這部分程序中,對含有錯誤的程序段再使用這種方法,直到把故障范圍縮小到比較容易診斷為止。
·歸納法。歸納法就是從測試所暴露的問題出發(fā),收集所有正確或不正確的數(shù)據(jù),分析它們之間的關(guān)系,提出假設(shè)的錯誤原因,用這些數(shù)據(jù)來證明或反駁,從而查出錯誤所在。
·演繹法。根據(jù)測試結(jié)果,列出所有可能的錯誤原因。分析已有的數(shù)據(jù),排除不可能和彼此矛盾的原因。對余下的原因,選擇可能性最大的,利用已有的數(shù)據(jù)完善該假設(shè),使假設(shè)更具體。用假設(shè)來解釋所有的原始測試結(jié)果,如果能解釋這一切,則假設(shè)得以證實(shí),也就找出了錯誤;否則,要么是假設(shè)不完備或不成立,要么有多個錯誤同時存在,需要重新分析,提出新的假設(shè),直到發(fā)現(xiàn)錯誤為止。
第五篇:程序員
程序員之死
程序員:舉世至主,萬元之源,眾物所幕,神祗皆掌,歲能長立,箜有己出。弈中悲苦,是自了得!幸事禍?zhǔn)嘛h忽于其思想,曉如今,心思想,新紀(jì)元,心結(jié)緣,把話晾。
世間萬物,出于思想,毀亦思想。而思想的源頭正是程序員。
程序員在被選擇作為程序員之前,只是一個程序,程序當(dāng)然就是指程序員的衍生物,程序員就是本單位思想的創(chuàng)造者,他創(chuàng)造著每一個程序,而程序也有其思想,這思想當(dāng)然是程序員寫進(jìn)去的,程序員就這樣靠著周而復(fù)始的寫程序來獲得自己的永生,這或許也是一種宿命,他要一直寫下這程序來完成前任程序員給予的使命,當(dāng)然每個程序員都有著崇高的使命感,不然他們是做不了程序員的。
寫程序固然是一種快樂,他可以隨著自己的思想創(chuàng)造出一切自己所思自己所想的東西出來,任由思想在空寂游蕩而有其始終。雖然這是一項(xiàng)每天創(chuàng)造新鮮的活,然程序員終有其果。于是,新紀(jì)元再次到來,當(dāng)程序員寫下足夠的程序后,他有了新的選擇,那就是退出自己的思想,把任務(wù)交給下一代的程序員來完成。在這之前,當(dāng)然有件最主要的事需要做,那就是創(chuàng)造出一個新的程序員。如此,程序員將會將自己寫進(jìn)程序,為達(dá)此目的,他將用盡索想提前寫好自己成為程序后的萬物程序,保證新老程序員的順利交接
程序員經(jīng)過一直以來的堅苦努力,終于熬到了紀(jì)元期。憶當(dāng)初,自己被選擇做了這舉世至主,縱是萬元之源,然其中悲苦,是自了得!
我們都是別人寫下的程序,然誰有能理解程序員之痛,程序員有著眾物所幕的歲能長立,然生生死死,亦不曾快活。