軟件業職位總結

目前軟件界職位分類:

銷售類:售前工程師、售後工程師、系統集成工程師;
測試類:測試工程師,產品測試經理;
項目管理類:項目經理,QA工程師;
系統類:網絡工程師,基礎設施工程師;
安全類:安全系統管理員,網絡安全管理員,安全開發工程師;
維護類:數據庫管理員,系統管理員,系統運行維護管理員
開發類:需求分析師、開發工程師、人機系統開發工程師、系統分析師、架構師;

1、隨着軟件的複雜度越高,軟件業中的職位進一步細分。有利於合作,以更好地解決問題,提高效率。越來越細分的軟件職位對與有志從事軟件業的人員來說是個不好的消息,不知道將來向上往哪個職位奮鬥!幫助大家瞭解目前軟件業有哪些職位,這些職位具體承擔哪些工作,這些工作大致需要哪些技術知識或素質。確定從業信心,看到從事軟件行業自己會有哪些可能的選擇。在大家的軟件職業生涯中可能會遇到各種各樣的工作機會,每種職位的發展各不相同,每個人的特點或性格都不同,對於日新月異的IT業發展,提前確定目標並規劃是非常有益的。

在介紹每類職位的同時,我們來了解一些業內常用的工具比如:測試類會用到:WinRunner、LoadRunner、TD;項目管理會用到SourceSafe、StarTeam、ProjectManager;開發設計類會用到Enerprise Architect、Rose Rational。對於有志向未來從事某類職位的人瞭解一些業內使用的工具和一些工作情況,避免閉門造車、盲目學習,或是在面試中能夠提出這些工具表明自己用過或者接觸過這些提升自己的競爭力。

2、幫助大家瞭解典型的軟件企業的技術組成,當看到一個陌生的企業發出的招聘時能夠真正理解這些職位的技術要求,在應聘時良好的心理準備。每個軟件企業專著的領域不同,比如有的主要業務電信通訊業,有的專著醫藥軟件,有的主要做物流軟件。雖然這些企業的主要業務和客戶都不相同但是工作機制基本相同,總歸都有類似的組織結構,各個職位和技術力量可能分配的比重不同而已。不要看到招聘中的要求有些自己沒有掌握也沒有接觸過就退縮,只要你以前確實爲這類職位類型準備過經過刻苦的學習積累過工作經驗,那就去試試。

3、既然已經瞭解典型軟件技術類職位組成,這些職位要求的技術要求的性格素質各不相同,有着不同的職業特點,你在哪方面有興趣,你的特點更適合在哪方面發展,希望此次講座對你有所幫助。

售前工程師:

軟件行業與其他行業一樣都有類似的營銷人員,相比那些在商場、電視購物中推銷產品的銷售人員,軟件業的銷售類職位要求很高的技術知識、對軟件產品詳盡掌握(包括產品應用的範圍、技術特性、同類產品的技術比較、客戶技術應用的環境、軟件的行業特點、性價比的演示),售前工程師之所以是“工程師”就在於他要掌握非常專業的專業技能,不像商場銷售電視、電飯鍋的導購員經過幾天的培訓就能上崗,一個優秀的售前工程師可能做過多年某個行業軟件開發,積累了多年對此行業軟件的理解,非常瞭解這類軟件的行業需求,在各類企業中的應用情況,他會知道如何配置或者實施自己的軟件來滿足用戶的需求,當用戶問起一些技術特點時他能從容應對並且展示出自己對銷售軟件的信心,還能將銷售的軟件的某些技術優勢潛移默化的傳遞給客戶。現在的軟件市場巨大多數是買方市場,客戶的業務需求被軟件公司挖掘的都差不多,如何使自己的產品在客戶的客戶的心理中的技術面上佔據重要的地位,不僅要完全掌握當前流行的技術,還得充分了解客戶的詳細需求,能將這些產品的技術和功能和客戶的需求合理親切的吻合在一起,這些是一個優秀的售前工程師要具備的基本素質。還有一些公關方面的能力。

舉個例子:有一個客戶是國內一家著名的電器製造企業,正準備上一套計算機管理系統。售前工程師在拜訪客戶的之前詳細地準備了一套產品ppt來演示涉及生產計劃、採購、製造、倉庫、銷售、財務、考覈等各方面的功能。由於系統實施很複雜,用了將近一星期的時間來準備材料,自以爲得很充分了。在客戶那裏給客戶演示產品剛開始一段時間,客戶就打斷了售前的介紹問了三個問題:

你知道我的企業管理中有那些問題嗎?你的軟件具體能解決我企業的什麼問題?
你有多瞭解我這個電器行業你的軟件在那些方面有所體現?
我花幾百萬買你的軟件我的投入值不值得?

由於事先只關注自己的產品沒有深入瞭解該客戶,對整個行業又不是很有經驗,只能支支吾吾地回答了一些類似“有效降低庫存,提高訂單的反應速度,提高客戶的滿意程度”等套話。客戶很客氣地終止了我的演講婉言謝絕了這次推銷臨走時他告訴筆者,他需要的是一套適合電器行業的能解決他公司實際管理問題的軟件系統而不是我們這套軟件。

售前的工作不僅是上面所提到的,他的工作越來越像諮詢工程師,好的售前擁有卓越領悟力優秀的客戶溝通能力。給客戶強大技術優勢感和信任感。同時真正能夠發現、理解、解決客戶的問題。

舉個例子:像OracleIBM 、MS、華爲的售前工程師,技術能力、行業知識、穿着舉止、收入;國內小公司售前就差一些。

售後工程師和系統集成工程師:

都屬於技術支持工程師,當客戶把軟件買下了,在使用的時候總會出現各種故障,不單是小軟件公司的售後要經常跑到客戶那去解決軟件運行報錯,安裝故障,誤操作錯誤,數據恢復等等問題。越是大公司它的售後技術支持力量越大,因爲他們的軟件承載的業務非常重要,一點異常或是錯誤都會給客戶帶來巨大的損失也會讓自己在業內蒙受羞辱。售後工程師首先是要對自己負責的產品非常精通,熟悉每個組件的運行情況,產品的安裝環境,客戶的業務運行狀態等等。在出現問題及時趕赴現場爲客戶解決故障,挽回損失。系統集成工程師的技術特點與售後工程師類似,在客戶把軟件買下後分析客戶的業務需求完成產品的實施,最終滿足客戶的要求。

爲什麼將銷售放在第一個講,不僅是銷售類的薪酬高、技術要求高,另一個原因是我的個人觀點:軟件業經過這麼多年的發展,正在轉變爲“傳統行業”,傳統行業的一個特點是銷售非常重要。

1、“傳統行業”的特點2:8 ,20%的企業佔有市場的80%份額,軟件業的大公司逐漸分化分別控制不同行業的軟件需求,如金碟、用友在國內財務軟件類的巨頭,東軟則是醫療類軟件巨頭,數據庫類的有ORACLE MySQL、 SQL SERVER、DB2分別屬於ORACLE、MS、IBM公司三家公司的數據庫產品幾乎瓜分數據庫產品的銷售市場。在桌面操作系統類XP,VISTA,WIN7和Ubuntu RedHat 雪豹;服務器類的WebLogic、WebSphere、IIS、Glassfish;隨着虛擬化,雲計算技術的發展未來的軟件業的格局可能會更加集中,將爲客戶提供更加專業的服務。

2、需求推動技術發展到技術引領需求發展的轉變,在軟件業的初期都是有這樣那樣的業務需求,比如圖像處理、三D建模軟件,都是有着很多的需求,哪個軟件能率先滿足這些需求,他的公司就能迅速發展。在大家的軟件都實現了用戶的需求時,哪個軟件實現的效果好運行的穩定操作人性化那麼它的公司就會淘汰那些不向前發展的公司。比如:netAnts flashGet xunLei 現在各家公司做軟件都做得不錯價錢也都公道,怎麼才能讓客戶信賴自己的產品和公司呢,那就是引導客戶的需求,這時就是技術引領需求發展了。比如現在的主數據、元數據管理,SOA等。

3、諮詢服務在軟件業的比重越來越大,IBM有很多業務都是諮詢服務一份報告30頁,一個月時間60萬。軟件業的售前活動非常像諮詢服務,售前工程師通過拜訪客戶,與客戶交談了解業務情形和特點,發現並理解目前存在的問題,提出針對的解決方案,並將自己的解決方案與別的公司做技術和經濟性的對比。

測試技術經過這麼多年的發展,在大學已經有軟件測試的專業,在很多年前就有軟件測試研究方向。我讀碩士研究生時的研究方向就是網絡協議的一致性測試。在這裏只是介紹測試職位在實際工作中的具體工作是什麼。一個測試工程師的工作大致上是在完全理解軟件的業務需求後根據每個功能點和它的分類;編寫功能測試例,將測試例分組歸類成測試套件。測試例是測試文檔中最基礎的組成部門,測試工程師根據測試例去測試軟件,測試的軟件是在經過開發部門單元測試後提交給測試部門用來做集成測試和系統測試。隨後咱們介紹一下測試工作的種類:單元測試、集成測試、系統測試、迴歸測試、性能測試、安全測試。測試軟件可以是人工操作通過鼠標點擊鍵盤錄入來實現,也可以編寫測試腳本,或者在人工操作測試的過程中通過專業測試軟件錄製測試腳本,然後再手工修改部分代碼,以後就可以自動執行測試,不用再手工測試。提高了測試效率和測試的準確性。因爲一個軟件的測試例在編寫的時候軟件業務需求、技術需求等文檔基本都已定稿,所以測試文檔確定以後是很少修改或變更。測試腳本或測試程序也變化不大,每次的迴歸測試如果都是手工測試那麼工作量可想而知,迴歸測試一般都是由測試腳本來自動測試。因爲編寫的測試腳本最終運行後要給出測試結果,一般的測試結果分三類:通過、失敗、未決。

關於測試的分類一般分爲以下:單元測試、集成測試、系統測試、迴歸測試、性能測試、安全測試。單位測試一般有開發部門自己完成,主要測試自己編寫的代碼實現的功能、組件接口是否符合設計文檔,輸入輸出是否正確。在完成單元測試後提交給測試部門。管理規範的公司或者通過CMM3級的組織都會有代碼管理工具如StarTeam SourceSafe等。測試部門會在開發部門提交代碼後下載最新版的代碼,集中編譯上傳到測試環境中,進行集成測試。集成測試用來測試軟件的各組成部分是否能按設計要求組合在一起實現預定的功能,做各模塊聯調測試,檢查各模塊的接口是否一致、各模塊間的數據流和控制硫是否按照設計實現其功能、以及結果的正確性驗證,可以是整個產品的集成測試,也可以是大模塊的集成測試。集成測試之後就是系統測試:它是針對整個產品的全面測試,既包含各模塊的驗證性測試(驗證前兩個階段測試的正確性)和功能性(產品提交個用戶的功能)測試,又包括對整個產品的健壯性、安全性、可維護性及各種性能參數的測試。迴歸測試是當軟件需求發生變化,程序代碼也完成更新,這時要測試一下修改或新增的代碼對已有未變化的功能是否有影響。防止修改了舊bug增加了新bug。或者增加了新功能原有的功能卻不能用了!性能測試一般會測試軟件併發用戶數,響應時間,大數據的處理,長交易處理能力,宕機恢復能力等一般會使用LoadRunner。安全測試主要基於工具分析和掃描,檢查是否存在危險如:注入攻擊、拒絕服務、配置操縱、訪問控制、日誌僞造等等。

產品測試經理

屬於測試工程師的老闆或上級,具有豐富的產品測試經驗和需求領悟能力。曾經的一個測試事故讓我對產品測試經理的能力有了非常深的印象。有一次系統新增加了一項與之前功能相關且名稱相似,測試工程師沒有理解業務需求編寫出來的測試例幾乎沒有覆蓋新增加的功能,被產品測試經理檢查出並糾正。敏銳的洞察力和良好的分析、研判能力來分析市場發展趨勢,可以提出軟件的發展或進步方向。把握用戶需求,完成需求分析到測試轉變,對產品設計的生機和改進要能提出關鍵的意見。負責或配合其他部門,持續改善產品。負責測試團隊的日常管理工作。

測試類職位的特點

職位的重要性和地位在穩步上升,與開發類平分秋色。在前些年人們往往看不起測試職位,一方面它位於整個項目的下游,如果沒有開發就沒有測試,測試總是跟在開發後面。另一方面軟件系統的複雜性和應用環境簡單,測試在項目起的作用較小。但是這兩方面隨着開發技術的發展尤其測試驅動開發TDD,還有是人們對軟件質量的關注使得測試逐漸和開發地位基本持平。我原來在的單位技術性的員工有100多,開發技術部的有40人,項目部30人,測試部30人。

且職業壽命在積累中逐漸增長類似醫師。自動化測試、一致性測試、互操作測試等等技術的發展使測試工程師在工作中不斷積累了經驗,不像開發類的技術和工具都不斷更新。而測試類的工程越來越值錢,越老對軟件的理解越豐富。

在軟件業技術是非常重要的,在從事技術類高級職位的工程師,不僅有非常好的技術,還能帶領一支技術隊伍,像導師一樣幫助他們給於技術支持和指導,確定工作方法,指明工作方向,解決隊伍在項目過程中遇到各種技術問題。同時還要具備領導能力。我在讀研究生的時候老師讓我給本科生帶輔導,我對這樣工作一點不重視,覺得不就是看着他們做實驗出錯的時候去給調試一下,但是我的老師很嚴肅的對我說:“你要給別人一滴水,你自己要有一桶水”,我有又了一句,“如果你只有一滴水,你只會給別人一頭霧水”。

每當公司接下一個單子,爲了能夠按時保質的完成合同的交付物,老闆就會將這樣重要的任務交給項目經理,這是一個要求綜合素質的職位,既要懂技術又要懂管理還得性格適合。從這三方面我們逐一瞭解一下項目經理的工作。爲什麼會有項目經理這樣的職位呢,很簡單一個項目總得由一個人來計劃調度實施,如果是個小公司那麼項目經理就是老闆,但是到了一定規模的軟件公司老闆哪有這麼大的精力同時管理多個項目,所以他就將項目分配給合適的項目經理來負責。一般的來說老闆要求項目經理確保項目順利實施,保證客戶滿意,只有順利實施客戶滿意公司才能拿到錢。這也是老闆衡量項目經理工作能、水平高低的基本標誌。再者老闆會讓項目經理報告整個項目的評估包括工作內容、工作量,人力安排分配,經費預算,項目總體規劃,如何分階段實施。看過項目經理的報告老闆再加入自己的意見,再和其他部門,比如測試部,開發技術部,系統部項目的相關部門一起討論這份報告項目,確定如何實施項目,最後由項目經理來綜合管理這個項目。似乎在這裏好像除了老闆就是項目經理厲害了,其實不然。項目經理只是綜合管理這個項目並不是老闆有着絕對的控制權,他要從開發技術部、測試部等相關部門的職員中找到合適的人來成立項目組,要想組織起一個成功的項目組,這不是想象的那麼簡單,需要這麼項目經理有適合的性格,一個脾氣大有摳門的項目經理是組織不起來好的隊伍,但是脾氣好由大方的也不一定能,需要一個合適的性格。來管理那些屬於不同部門的同事一起同甘共苦完成項目。既然隊伍拉起來那就幹吧,既然是這個項目組項目經理很多關鍵問題需要他來決策。項目經理要親自決策的問題包括實施方案、總體技術方案、重大技術措施、獎懲、設備採購方案、資源調配、進度計劃安排、合同及設計變更、接待客戶等。 是她來決策幹活的可能是架構師、測試部工程師、也可能就是他自己做的文檔。在實施的過程中不斷的監督進度,檢查質量,修正方向,修改方案,和各部門扯皮最多的是系統部和測試部,向老闆彙報,聯繫客戶展示階段成果和客戶溝通,還得犒賞組員吃吃飯喝喝酒。最後按時按要求的交付。我們來看看項目組的成員,一般項目組都會有架構師,系統分析師,需求分析師,開發工程師,測試工程師,一半個系統部的人,QA,項目經理就是要哄着這些人好好努力工作,不惜加班,帶病工作。

但這樣人都不是好惹的,他們中有些人的級別比項目經理的級別高,薪水地位比他高,怎麼能帶好這支隊伍,這就要求項目經理有個合適的性格。在別的行業項目經理可能不會遇到這樣的問題,但是軟件行業這是常有的事,甚至有的老闆都不瞭解這個問題,隨便招來一個自吹自擂的傢伙就讓他來負責,結果組員告狀,消極怠工,項目失敗或者不成功。可見項目經理要有好的EQ。其次還有具備項目管理知識,項目管理已經發展成一門的管理學科,它不僅僅要項目經理具備軟件開發過程管理,熟悉CMM知識,還得具備較深的開發技術功底,不然要是一個笨蛋架構師提交了一份糟糕總體設計若是沒有相關的知識不能及時糾正項目實施出現了問題再從頭來。可見一個合格的項目經理要具備懂技術甚至是技術高手能夠代領大家走出技術困境,發現錯誤還得懂管理運用科學的項目管理知識經驗最後還得有個合適的性格。要介紹項目經理的工作和如何做一個好的項目是一個非常大課題,但是從講座的目的我只想大家瞭解下項目經理的工作,如果有志在這個方向發展的朋友,我的建議就是“項目管理是幹出來的,不是學出來的”不要以爲去參加個軟考拿個證書就能幹這行,同樣我早大一的第二學期就認識到我的本科專業“管理工程”不會讓我在畢業時找到好工作,同理“管理是幹出來的,不是學出來的”,所以我馬上糾正了自己,通過考研究生換了專業。

高級項目經理

同他的名字,就是比項目經理更厲害的項目經理。有時高級項目經理是老闆對跟隨自己多年的老功臣的安慰,有時只是爲了讓薪水拉開距離,有時是隻有高級項目經理去做大項目,也有的時候高級項目經理來管理項目經理,它是項目經理的老闆。總之具體的工作還是那些只不過更高級了,就像有些人的職務前加個“資深”。我在公司做的就是“高級架構師”但是做的就是架構師的工作,給個高架的職位是老闆對你安慰,而且他還不讓你寫代碼,如果不做開發時間長了很多東西就會逐漸流失落後。

我們來說說項目管理類的職位會用到哪些工具,最基礎的就是WordExcel,不要小看這兩樣,他爲項目管理提供了最基礎的數據,每份統一了格式的文檔,每份精心設計的Excel都是項目的重要成果,包括各個項目週報,個人週報等等。然後就是專門用於項目管理的軟件如MS Project。軟件生產是智力密集型的活動,其產品無物理外形,生產狀態也“不可見”,因而難於檢查和駕馭。如何管理項目的計劃、調度、通信、費用估算、資源分配以及質量控制等。軟件項目管理工具就是要使這種生產過程成爲可見、可控的過程。使用它能幫助進行成本估算、作業調度和任務分配,並制定出成本較低、風險較小的項目開發計劃;同時能設法在預計工期和經費之內適當調整項目的安排,以節省時間和人力,從而對軟件生產的各個環節進行嚴格、科學的管理,使項目開發活動獲得最佳的進程。 使用專業的項目管理工具不僅有效的幫助項目管理,而且它還能規範你的管理過程。

QA工程師

如果一個軟件企業正在實施CMMI或者已經建立了研發管理體系都會在項目組中加入一名QA工程師。在我的工作經驗中只有到達軟件企業的公司,組織規模在300人以上,纔可能去實施CMMI,就算去實施CMMI,最後也只不過是爲了拿個CMMI的證書,QA工程師很多時候都是爲了CMMI才存在的。不知道是咱們的軟件公司不重視研發管理還是CMM和CMMI不適用於中國人。CMMI標準文件說,QA是高級經理的“ears and eyes”。研發人員眼中的QA往往也是“警察”,QA的作在於發現和報告項目的問題。一個合格的QA在項目中會充當三種角色:

角色1-老師,具備學習和培訓的能力。

角色2-醫生,通過度量數據對項目過程進行診斷,幫助分析原因,開處方。

角色3-警察,以企業流程爲依據,但要告訴大家流程背後的原因;如果和項目組針對某些問題意見相左,可以直接彙報高層。

但在我的工作經驗中卻沒有看到過這樣的QA,雖然我的項目組也有爲QA,但是主要爲了實施CMMI而設置的,她是一位女性,不參與我們的討論,只是默默地看着聽着,然後回去寫她的文檔,只有在項目組研究去哪裏吃飯慶祝階段成果時就是看到她積極踊躍發言。

系統類、安全類、維護類

將這三類放在一起,一方面是我在這方面工作經驗比較少,只是平時在工作中接觸,另一方面我覺得在這幾類職位的工作內容是很多職位都需要掌握的技術只是這幾類職位要求的技術更精,承擔的工作量更多,比如系統管理員每天都會監控服務器,會將給加入團隊的同事建帳號授權,將離開的舊同事帳號註銷。現在我們來一一介紹這幾類職位,最後的重要的原因是這類職位與軟件職位有關係但與軟件職業有些距離。

網絡工程師

一定規模的軟件公司或者大型的單位都需要將本單位的計算機聯網,建設網絡不僅需要佈線,調試網絡設備如交換機、路由器、放火牆、VOIP設備、存儲設備等,還需要管理接入網絡的各種設備比如服務器ip地址,一組計算機的IP,網絡打印機等等。具體來說網絡工程師從事的工作有以下幾類:

1. 負責機房內的網絡聯接及各網段的劃分配置。

2. 負責系統網絡的拓撲圖的建立和完善,並做好系統路由的解析和資料的整理。

3. 負責機房線路的佈置和協議的規範工作。

4. 負責計算機間的網絡聯接及網絡共享,並負責網絡間安全性的設置。

5. 負責對網絡障礙的分析,及時處理和解決網絡中出現的問題。

6. 利用網絡測試分析儀,定期對現有的網絡進行優化工作。

根據網絡工程師的專長大致有:配置管理類;佈線施工類。

喜歡網絡的不是喜歡上網的同志可以投身到這個職位的發展中,我研究生是學習網絡的,研究的是網絡協議一致性測試,但是後來並沒有一直在這個方向上發展,並不是網絡工程師沒有發展,只是我的工作沒有遇到這樣的機會,我的一些同學後來一直從事網絡方面的工作。在後來的工作中網絡技術知識給與了我很大幫助,經常性的在一些和開發人員的技術討論會中提出專業的術語讓同事驚訝。現在簡單來說一下網絡工程師的職位發展,一種是直接進入專業的網絡技術公司如華爲,你的工作可能是售前,也可能是做網絡工程師,客戶比如電信、移動買了設備你要去幫助他們安裝調試,隨着技術積累和工作經驗你可能會成爲公司某個部門的主管,這個部門負責某類企業的業務。第二種你應聘去了非網絡專業的公司甚至非IT類的,你可能會從基礎做起在實踐中積累經驗發展到側重某類技術比如網絡存儲工程師、綜合佈線工程師、網絡安全工程師等。最後進階到專家級別,如IT項目經理、網絡主管或者技術專家等。

系統管理員

很多公司可能不會專門設置這麼一個職位,但是系統管理員確實是不能缺少的,有時是由高級別的主管兼職,工作主要負責服務器的管理維護工作,服務器是每個公司的重要資源,他的計算、存儲、組織管理域控等等,如何讓它穩定、安全、高效的運行是需要專業的技術知識和豐富的經驗。

系統管理員的工作大致分爲兩類硬件和軟件。硬件類的:比如服務器安裝操作系統時,根據這臺機器運行的業務如何創建磁盤陣列,做raid1還是做raid5;最近服務器總是慢運用日誌工具檢查問題出在哪裏,需要升級那些部件;有一天突然看到某臺設備出現的報警,但是服務器還在運行,如何安全的換下報警的部件決不能讓服務器宕機。軟件類,最典型的就是AD的維護,管理和維護帳戶,或是某個重要的軟件系統的維護,比如我在的單位有個資深的測試工程師就兼職管理維護StarTeam服務器。

需求分析師

在確定項目後需求分析師和客戶進行深入和細緻的溝通。理解業務和客戶在他們中業務中用到交互方式;還需要理解這個項目中牽涉到的各種利益相關人員,要充分的從他們的想法中得到規範的業務需求。重要的是深入的理解業務需求,梳理出需求的各個功能點,每個功能的業務性質,另外還需要挖據出系統的非功能性需求。因爲客戶並不懂軟件專業,他們的口述完全是對未來系統的模糊想法,有些客戶可能前後描述的需要自相矛盾,好的需求分析師不僅能清晰的掌握業務需求,不僅將需求從業務人員的口述的功能提煉出需求分析報告,這份報告在不需要接觸客戶的情況下,開發人員都能清晰一致地理解,高級的需求分析工程師還能從需求中抽象出本質的內容,對於不穩定的需求找出其中的本質問題,可以給出各種重用的方法。能夠挖據出潛在的需求問題,對於業務能夠提出可兼容、可擴展的需求解決方法。除對需求本身的分析,還得能夠理解客戶的組織機構、人員組成,關鍵人物的業務要求。他作出的分析報告,不僅客戶中的基層人員能夠接受,還能滿足高層領導的要求。經過需求分析師的辛苦勞動,最後會給出一份《軟件需求規格說明書》,這份說明書爲以後的工作奠定了重要的基礎。它詳細的描述了系統有哪些功能點,每個功能點的操作和數據格式,系統使用者的分類,功能點的優先級,系統的非功能性需求,數據字典,系統的應用環境,擴展點,維護功能,甚至界面要求。

需求分析方法:

1。 繪製系統關聯圖,這種關聯圖是用於定義系統與系統外部實體間的界限和接口的簡單模型。同時它也明確了信息流和實物流。

2。 創建用戶接口(系統操作界面)原型,開發一個可能的局部實現,這樣使得許多概念和可能發生的事更爲直觀明瞭。用戶通過評價原型將使項目參與者能更好地相互理解所要解決的問題。注意要找出需求文檔與原型之間所有的衝突之處。

3。 分析需求可行性,在允許的成本、性能要求下,分析每項需求實施的可行性,明確與每項需求實現相聯繫的風險,包括與其它需求的衝突,對外界因素的依賴和技術障礙。

4。 確定需求的優先級別。以優先級爲基礎確定產品版本將包括哪些特性或哪類需求。當允許需求變更時,在特定的版本中加入每一項變更,並在那個版本計劃中作出需要的變更。

5。 爲需求建立模型,需求的圖形分析模型是軟件需求規格說明極好的補充說明。它們能提供不同的信息與關係以有助於找到不正確的、不一致的、遺漏的和冗餘的需求。這樣的模型包括數據流圖、實體關係圖、狀態變換圖、對話框圖、對象類及交互作用圖。

6。 創建數據字典,數據字典是對系統用到的所有數據項和結構的定義,以確保開發人員使用統一的數據定義。在需求階段,數據字典至少應定義業務數據項以確保客戶與開發小組是使用一致的定義和術語。分析和設計工具通常包括數據字典組件。

7。 使用質量功能調配,將產品特性、屬性與對客戶的重要性聯繫起來。該技術提供了一種分析方法以明確那些是客戶最爲關注的特性。QFD將需求分爲三類:期望需求,即客戶或許並未提及,但如若缺少會讓他們感到不滿意;普通需求;興奮需求,即實現了會給客戶帶去驚喜,但若未實現也不會受到責備

使用的工具:UML,VISIO,思維導向工具MindManager。

開發工程師

俗稱程序員,流傳一句話恭喜,你選擇開發工程師做爲自已的職業;悲哀,你選擇開發工程師做爲自已的職業。這句話真的是非常有意思,好的開發工程師,可能從寫代碼做起,掌握了豐富的開發技術(cc#java)很快的做到系統分析師,架構師,產品設計師,走向管理層作部門主管或是CIO。辛苦的工程師可能從cc++,再到java,開發使用的工具也是經常變化。技術在不斷進步,工程師也得不斷學習,從COMDCOMCOM+.netRemotingWebServicesWCF等等,總是跟着技術跑。在日常工作中也是廢寢忘食,非常疲憊,而且還經常讓測試人員呼來喊去,偶爾還會被老闆教育。我曾經的一個同事做了78年開發,非常優秀有一次出差回來,發現他不在了,辭職走人,以爲跳槽到大公司去了,後來同事告訴我他出去開了家陝西面館。軟件開發工程師有一般來分:.netjava。我本人做.net開發,屬於微軟陣營。本人不太喜歡討論哪個陣營好哪個有前途,之所以沒有做java一直在微軟的.net陣營混,完全偶然,工作和項目上的需要。目前也沒有計劃去做java。但是會經常關注java的發展,瞭解一些新技術

日常工作包括:

1、根據項目具體要求,承擔開發任務,按計劃完成任務目標。

2、獨立完成軟件系統及模塊的編碼。

3、負責編制與項目相關的技術文檔。

4、配合系統分析人員完成軟件系統及模塊的需求調研與需求分析。

5、配合系統分析人員完成軟件系統及模塊的設計。

6、協助測試試人員完成軟件系統及模塊的測試。

一個公司內的開發工程師都會分等級,高級開發工程師、開發工程師、助理開發工程師。一個正常運行的軟件公司不是那種從零開始的,都會有自己的技術積累、成熟的開發框架、公共開發組件。一般的工作都是在此基礎做開展。新項目開發了,高級開發工程師可能分到的任務都是系統技術核心部分,如開發框架,公共代碼,數據庫設計,數據字典管理等;開發工程師會做一些一般功能的實現,比如系統中的幾個模塊;助理開發工程師等級較低,會在前輩的基礎上使用公司的技術基礎開發一些簡單功能或模塊,一般是照着前輩的代碼抄。高級開發工程師爲公司的技術打下堅實的基礎,寫一些公共組件和代碼。或是應用新技術作些示範,教大家如何使用。開發工程師能夠獨立的完成自己的任務,提出一些好的想法。助理工程師會好好學習,融入到整體技術環境中。

開發工程師是系統最終實現的實施者,工作有很強的成就感。他掌握的開發技術很多,掌握數據庫系統OracleMySqlMS SqlServer,基礎開發語言CC++JAVAC# ,系統建模語言UMLXML,開發環境VSECLIPSEJDEVELOPERNetBeans服務器環境Win2003RedhadUnix等,應用服務環境IISWebsphereweblogic,開發框架。net frameworkjava容器、HibernateSpring,流行的實現技術設計模式、三層結構、COM+webServicesWCFWPFSLIVELIGHT。實事求是的將說開發工程師是一種中間職業狀態,原因很簡單誰也不原意每天爬在鍵盤上廢寢忘食狂敲代碼。在項目經理的不斷催促下趕進度,不斷的接到測試工程師的錯誤報告,慚愧的說不小心做錯了,馬上改。偶爾還會和不懂事的客戶糾纏如何操作。但是不是所有人都能突破開發工程師晉升到高級職位。但是反過來說開發工程師是系統實現的最直接的工程師,就像一個宏偉的建築,設計者只是在紙上畫畫,但是需要施工方辛苦的勞作,最終拔地而起。可想在你的辛苦勞動下一點一滴完成的了這項工程,成就感是非常大的。而且在編寫代碼作開發的階段會積累很多很多的經驗,需要不斷的學習新的技術,在有的時候高級職位還需要向你請教。所以另外一方面開發工程師可能是很多高級職位必須經歷的過程,幾乎所有的軟件高級職位的招聘都有幾年的開發工作經歷,豐富的開發和實施經驗才能使你在高級職位上,在系統還沒有開發時,就能預見和分析出系統的技術需要等等問題,帶領大家成功的完成任務。

系統分析師

經過幾年的開發工程師經歷,積累了豐富的開發經驗,在不斷的努力下你的職位得到提高已經不用再每天Coding了,可以寫寫文檔、畫畫圖做設計了。

系統分析師主要參與或主管以下工作:包括業務需求、實現功能、性能要求的分析和總體技術設計工作。參與並指導開發工程師完成詳細設計文檔和代碼編寫,解決系統關鍵部分的設計和開發工作,制定技術文檔的格式、內容。對系統實現的程序代碼、腳本、數據庫等交付物進行審計質量管理

系統分析員要不斷的學習,不斷的實踐,不斷的更新知識,不斷的優化自己的知識結構,這一切都使得系統分析員成爲稀有人才。在軟件組織中屬於高級職位。好的系統分析員師都是從優秀的開發工程師中產生的,有着堅實的開發功底,豐富的編程經驗。沒有對系統本身進行過透徹剖析和編碼實踐,很難領會到其中一些難以言述的精華。

系統架構師

在軟件和硬件系統沒有發展到現在的應用規模時,人們普遍的認爲,教科書也在說程序=數據結構+算法。但是隨着系統的發展,程序處理數據量、併發介入客戶、系統的需求變更、運行維護等等的工作使得大家對軟件的架構越來越重視。不僅數據結構(數據庫設計、類、字段等)算法的實現技術有很大的進步,而且對系統技術結構,系統各組件的設計,系統的部署等等方面更加重視了。隨着計算機網絡操作系統、虛擬化技術、WEB服務器、應用服務器、中間件、應用程序容器,SOA,企業服務總線等技術的推廣架構設計已成爲軟件系統的首要考慮。在經過一些項目的實施之後,人們逐漸意識到,即使你對系統有良好的分析和設計,但是由於沒有在軟件架構方面做深入的分析在隨後的系統運行中,麻煩越來越多。比如我們怎麼在不影響業務運行的情況下將需要更換的組件撤下,將新開發的組件上線。一個大單位中上線的系統越來越多,怎麼統一管理這些系統共享的數據資源,使各系統在任何時候都能拿到同樣的數據又能及時地更新。系統架構師是要站在系統之上和企業所有系統系統之間去分析,在未來多少年之內採用何種技術企業的信息系統能夠輕鬆應對業務需求。

結束

經過了解以上這些職位,我想大家對一個軟件公司都有些什麼樣的人有了一定的瞭解,在一個有一定規模的軟件組織中分工是非常詳細的。希望這次講座大家對軟件公司的技術類職位不再陌生,不要只知道我我將來就要搞軟件呀,能夠清楚自己的目標。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章