開發類
需求分析師
在確定項目後需求分析師和客戶進行深入和細緻的溝通。理解業務和客戶在他們中業務中用到互動方式;還需要理解這個項目中牽涉到的各種利益相關人員,要充分的從他們的想法中得到規範的業務需求。重要的是深入的理解業務需求,梳理出需求的各個功能點,每個功能的業務性質,另外還需要挖據出系統的非功能性需求。因為客戶並不懂軟體專業,他們的口述完全是對未來系統的模糊想法,有些客戶可能前後描述的需要自相矛盾, 好的需求分析師不僅能清晰的掌握業務需求,不僅將需求從業務人員的口述的功能提煉出需求分析報告,這份報告在不需要接觸客戶的情況下,開發人員都能清晰一致地理解,進階的需求分析工程師還能從需求中抽象出本質的內容,對於不穩定的需求找出其中的本質問題,可以給出各種重用的方法。能夠挖據出潛在的需求問題,對於業務能夠提出可相容、可擴充的需求解決方案。除對需求本身的分析,還得能夠理解客戶的組織機構、人員組成,關鍵人物的業務要求。他作出的分析報告,不僅客戶中的基層人員能夠接受,還能滿足高層領導的要求。經過需求分析師的辛苦勞動,最後會給出一份《軟體需求規格說明書》,這份說明書為以後的工作奠定了重要的基礎。它詳細的描述了系統有哪些功能點,每個功能點的操作和資料格式,系統使用者的分類,功能點的優先順序,系統的非功能性需求,資料字典,系統的應用環境,擴充點,維護功能,甚至介面要求。
需求分析方法:
1. 繪製系統關聯圖,這種關聯圖是用於定義系統與系統外部實體間的界限和介面的簡單模型。同時它也明確了資訊流和實物流。
2. 建立使用者介面(系統操作介面)原型,開發一個可能的局部實現,這樣使得許多概念和可能發生的事更為直觀明了。使用者通過評價原型將使項目參與者能更好地相互理解所要解決的問題。注意要找出需求文檔與原型之間所有的衝突之處。
3. 分析需求可行性,在允許的成本、效能要求下,分析每項需求實施的可行性,明確與每項需求實現相聯絡的風險,包括與其它需求的衝突,對外界因素的依賴和技術障礙。
4. 確定需求的優先順序別。以優先順序為基礎確定產品版本將包括哪些特性或哪類需求。當允許需求變更時,在特定的版本中加入每一項變更,並在那個版本計劃中作出需要的變更。
5. 為需求建立模型,需求的圖形分析模型是軟體需求規格說明極好的補充說明。它們能提供不同的資訊與關係以有助於找到不正確的、不一致的、遺漏的和冗餘的需求。這樣的模型包括資料流圖、實體關聯圖、狀態變換圖、對話方塊圖、對象類及互動作用圖。
6. 建立資料字典,資料字典是對系統用到的所有資料項目和結構的定義,以確保開發人員使用統一的資料定義。在需求階段,資料字典至少應定義業務資料項目以確保客戶與開發小組是使用一致的定義和術語。分析和設計工具通常包括資料字典組件。
7. 使用品質功能調配,將產品特性、屬性與對客戶的重要性聯絡起來。該技術提供了一種分析方法以明確那些是客戶最為關注的特性。QFD將需求分為三類:期望需求,即客戶或許並未提及,但如若缺少會讓他們感到不滿意;普通需求;興奮需求,即實現了會給客戶帶去驚喜,但若未實現也不會受到責備
使用的工具:UML,VISIO,思維導向工具MindManager
開發工程師
俗稱程式員,流傳一句話“恭喜,你選擇開發工程師做為自已的職業;悲哀,你選擇開發工程師做為自已的職業”。這句話真的是非常有意思,好的開發工程師,可能從寫代碼做起,掌握了豐富的開發技術(c,c#,java)很快的做到系統分析師,架構師,產品設計師,走向管理層作部門主管或是CIO。辛苦的工程師可能從c到c++,再到java,開發使用的工具也是經常變化。技術在不斷進步,工程師也得不斷學習,從COM,DCOM,COM+,.netRemoting,WebServices,WCF等等,總是跟著技術跑。在日常工作中也是廢寢忘食,非常疲憊,而且還經常讓測試人員呼來喊去,偶爾還會被老闆教育。我曾經的一個同事做了7、8年開發,非常優秀有一次出差回來,發現他不在了,辭職走人,以為跳槽到大公司去了,後來同事告訴我他出去開了家陝西麵館。軟體開發工程師有一般來分:.net、java。我本人做.net開發,屬於微軟陣營。本人不太喜歡討論哪個陣營好哪個有前途,之所以沒有做java一直在微軟的.net陣營混,完全偶然,工作和項目上的需要。目前也沒有計划去做java。但是會經常關注java的發展,瞭解一些新技術。
日常工作包括:
1、根據項目具體要求,承擔開發工作單位,按計劃完成任務目標
2、獨立完成軟體系統及模組的編碼
3、負責編製與項目相關的技術文檔
4、配合系統分析人員完成軟體系統及模組的需求調研與需求分析
5、配合系統分析人員完成軟體系統及模組的設計
6、協助測試試人員完成軟體系統及模組的測試
一個公司內的開發工程師都會分等級,進階開發工程師、開發工程師、助理開發工程師。一個正常啟動並執行軟體公司不是那種從零開始的,都會有自己的技術積累、成熟的開發架構、公用開發組件。一般的工作都是在此基礎做開展。新項目開發了,進階開發工程師可能分到的任務都是系統技術核心部分,如開發架構,公用代碼,資料庫設計,資料字典管理等;開發工程師會做一些一般功能的實現,比如系統中的幾個模組;助理開發工程師等級較低,會在前輩的基礎上使用公司的技術基礎開發一些簡易功能或模組,一般是照著前輩的代碼抄。進階開發工程師為公司的技術打下堅實的基礎,寫一些公用組件和代碼。或是應用新技術作些示範,教大家如何使用。開發工程師能夠獨立的完成自己的任務,提出一些好的想法。助理工程師會好好學習,融入到整體技術環境中。
開發工程師是系統最終實現的實施者,工作有很強的成就感。他掌握的開發技術很多,掌握資料庫系統Oracle、MySql、MS SqlServer,基礎開發語言C、C++,JAVA,C# ,系統建模語言UML,XML,開發環境VS、ECLIPSE、JDEVELOPER、NetBeans,伺服器環境Win2003、Redhad、Unix等,應用服務環境IIS、Websphere、weblogic,開發架構.net framework 、java容器、Hibernate、Spring,流行的實現技術設計模式、三層結構、COM+、webServices、WCF、WPF,SLIVELIGHT。實事求是的將說開發工程師是一種中間職業狀態,原因很簡單誰也不原意每天爬在鍵盤上廢寢忘食狂敲代碼。在專案經理的不斷催促下趕進度,不斷的接到測試工程師的錯誤報表,慚愧的說不小心做錯了,馬上改。偶爾還會和不懂事的客戶糾纏如何操作。但是不是所有人都能突破開發工程師晉陞到進階職位。但是反過來說開發工程師是系統實現的最直接的工程師,就像一個宏偉的建築,設計者只是在紙上畫畫,但是需要施工方辛苦的勞作,最終拔地而起。可想在你的辛苦勞動下一點一滴完成的了這項工程,成就感是非常大的。而且在編寫代碼作開發的階段會積累很多很多的經驗,需要不斷的學習新的技術,在有的時候進階職位還需要向你請教。所以另外一方面開發工程師可能是很多進階職位必須經曆的過程,幾乎所有的軟體進階職位的招聘都有幾年的開發工作經曆,豐富的開發和實施經驗才能使你在進階職位上,在系統還沒有開發時,就能預見和分析出系統的技術需要等等問題,帶領大家成功的完成任務。
系統分析師
經過幾年的開發工程師經曆,積累了豐富的開發經驗,在不斷的努力下你的職位得到提高已經不用再每天Coding了,可以寫寫文檔、畫畫圖做設計了。
系統分析師主要參與或主管以下工作:包括業務需求、實現功能、效能要求的分析和總體技術設計工作。參與並指導開發工程師完成詳細設計文檔和代碼編寫,解決系統關鍵區段的設計和開發工作,制定技術文檔的格式、內容。對系統實現的程式碼、指令碼、資料庫等交付物進行審計和品質管理。
系統分析員要不斷的學習,不斷的實踐,不斷的更新知識,不斷的最佳化自己的知識結構,這一切都使得系統分析員成為稀有人才。在軟體組織中屬於進階職位。好的系統分析員師都是從優秀的開發工程師中產生的,有著堅實的開發功底,豐富的編程經驗。沒有對系統本身進行過透徹剖析和編碼實踐,很難領會到其中一些難以言述的精華。
系統架構師
在軟體和硬體系統沒有發展到現在的應用規模時,人們普遍的認為,教科書也在說 程式=資料結構 +演算法。但是隨著系統的發展,程式處理資料量、並發介入客戶、系統的需求變更、運行維護等等的工作使得大家對軟體的架構越來越重視。不僅資料結構(資料庫設計、類、欄位等)演算法的實現技術有很大的進步,而且對系統技術結構,系統各組件的設計,系統的部署等等方面更加重視了。隨著電腦網路作業系統、、虛擬化技術、WEB伺服器、應用伺服器、中介軟體、應用程式容器,SOA,企業服務匯流排等技術的推廣架構設計已成為軟體系統的首要考慮。在經過一些項目的實施之後,人們逐漸意識到,即使你對系統有良好的分析和設計,但是由於沒有在軟體架構方面做深入的分析在隨後的系統運行中,麻煩越來越多。比如我們怎麼在不影響業務啟動並執行情況下將需要更換的組件撤下,將新開發的組件上線。一個大單位中上線的系統越來越多,怎麼統一管理這些系統共用的資料資源,使各系統在任何時候都能拿到同樣的資料又能及時地更新。系統架構師是要站在系統之上和企業所有系統系統之間去分析,在未來多少年之內採用何種技術企業的資訊系統能夠輕鬆應對業務需求。
結束
經過瞭解以上這些職位,我想大家對一個軟體公司都有些什麼樣的人有了一定的瞭解,在一個有一定規模的軟體組織中分工是非常詳細的。希望這次講座大家對軟體公司的技術類職位不再陌生,不要只知道我我將來就要搞軟體呀,能夠清楚自己的目標。