戚 帥,梅 斌(中訊郵電咨詢設(shè)計院有限公司,北京100048)
隨著移動互聯(lián)網(wǎng)業(yè)務(wù)的飛速發(fā)展,電信運(yùn)營商的傳統(tǒng)增值業(yè)務(wù)受到了極大的沖擊,新興業(yè)務(wù)研發(fā)、上線與推廣需求迫切。此外,“互聯(lián)網(wǎng)+”觀念已逐步深入人心,傳統(tǒng)業(yè)務(wù)紛紛尋求與移動互聯(lián)網(wǎng)的有效結(jié)合與突破,對電信運(yùn)營商的IT服務(wù)支撐能力提出新的要求和挑戰(zhàn)。因此,電信運(yùn)營商亟需建設(shè)一支高素質(zhì)的自有IT軟件開發(fā)團(tuán)隊,打破業(yè)務(wù)部門與IT支撐部門之間的溝通壁壘,提供高效、安全、可靠的軟件研發(fā)、交付與迭代能力。關(guān)于自有IT 軟件研發(fā)團(tuán)隊的組建模式及管理方法等,讀者可參考目前互聯(lián)網(wǎng)企業(yè)及銀行軟件開發(fā)中心的運(yùn)行模式。
一般人對于軟件開發(fā)的理解就是“編寫代碼”,從而充滿畏懼心理,認(rèn)為自己知識不足、經(jīng)驗(yàn)缺乏而不能勝任。實(shí)際上,編碼測試僅是其中相對簡單的環(huán)節(jié),需求分析和設(shè)計才是開發(fā)過程的重要核心環(huán)節(jié)。軟件開發(fā)要求IT人員能夠準(zhǔn)確理解并轉(zhuǎn)化業(yè)務(wù)需求、熟悉一般的軟件開發(fā)流程,同時具備一定的軟件開發(fā)實(shí)踐經(jīng)驗(yàn)。本文將結(jié)合目前個人實(shí)踐,簡述軟件開發(fā)流程,分享軟件開發(fā)案例實(shí)踐及心得體會。
軟件開發(fā)是將用戶需求合理轉(zhuǎn)化為代碼實(shí)現(xiàn)的過程,是一項包含了需求調(diào)研和分析、軟件設(shè)計、代碼編制、測試等環(huán)節(jié)的系統(tǒng)性工程。
按照軟件開發(fā)的不同階段,可將軟件開發(fā)分為以下環(huán)節(jié)。
1.1.1 調(diào)研階段
在與用戶充分溝通的基礎(chǔ)上,對用戶待解決的問題進(jìn)行匯總、定義,并結(jié)合技術(shù)、人力、資金等多方面因素論證項目實(shí)施的可行性,包括技術(shù)方案、資源需求、預(yù)期收益、實(shí)施步驟等。開發(fā)人員將根據(jù)可行性結(jié)果,決定項目的最終取舍。
1.1.2 分析階段
開發(fā)人員對用戶需求進(jìn)行匯總、分解和梳理,通過需求規(guī)格書的形式進(jìn)行書面化表達(dá),并最終得到用戶的進(jìn)一步確認(rèn)。分析要素包括功能需求、性能需求、接口需求、可靠性和可用性需求等,分析方法主要有結(jié)構(gòu)化分析方法、數(shù)據(jù)流程圖、數(shù)據(jù)字典等方法。
1.1.3 設(shè)計階段
開發(fā)人員根據(jù)需求說明書的要求,設(shè)計軟件體系結(jié)構(gòu)、劃分子系統(tǒng)或模塊、定義數(shù)據(jù)結(jié)構(gòu)和接口關(guān)系等,并形成書面設(shè)計文檔。該階段可分為概要設(shè)計和詳細(xì)設(shè)計。
概要設(shè)計(又稱系統(tǒng)設(shè)計),是對軟件結(jié)構(gòu)、運(yùn)行流程的初步規(guī)劃和設(shè)計,包括基本處理流程、模塊劃分、功能分配、接口規(guī)劃等。在概要設(shè)計的基礎(chǔ)上,開發(fā)者進(jìn)行軟件系統(tǒng)的詳細(xì)設(shè)計。詳細(xì)設(shè)計應(yīng)具體描述各功能模塊所涉及的算法、數(shù)據(jù)結(jié)構(gòu)、類結(jié)構(gòu)、接口調(diào)用關(guān)系等,以便指導(dǎo)開發(fā)者據(jù)此進(jìn)行編碼和測試。
1.1.4 編碼階段
開發(fā)人員通過某一程序設(shè)計語言將軟件設(shè)計轉(zhuǎn)換為計算機(jī)可執(zhí)行的程序或程序集合。開發(fā)者根據(jù)軟件設(shè)計文檔中對數(shù)據(jù)結(jié)構(gòu)、算法分析、模塊功能、界面設(shè)計等方面的設(shè)計要求,實(shí)現(xiàn)各功能模塊,最終達(dá)成功能、性能、界面、接口等方面的設(shè)計要求。開發(fā)者應(yīng)充分了解軟件開發(fā)語言、開發(fā)工具等,合理選擇開發(fā)語言和工具有利于保證軟件開發(fā)效率和質(zhì)量。
1.1.5 測試階段
通過人工或自動化的方式來檢測程序是否能夠達(dá)到預(yù)期的設(shè)計要求,并在此過程中尋找、解決可能導(dǎo)致出現(xiàn)問題的因素。按照軟件開發(fā)的不同階段,可分為單元測試、集成測試、驗(yàn)收測試、回歸測試等;按照是否關(guān)心軟件內(nèi)部實(shí)現(xiàn)的角度,可分為白盒測試、黑盒測試、灰盒測試等。
1.1.6 交付階段
在軟件測試達(dá)到要求后,軟件開發(fā)者向用戶提交軟件安裝程序、用戶手冊、需求報告、設(shè)計報告、測試報告等。用戶在開發(fā)者的指導(dǎo)和協(xié)助下,完成應(yīng)用軟件的安裝、部署和上線。
1.1.7 維護(hù)階段
開發(fā)者根據(jù)用戶需求的變更或軟件運(yùn)行環(huán)境的變化,對軟件進(jìn)行適當(dāng)修改,以糾正運(yùn)行中發(fā)現(xiàn)的錯誤或提升軟件能力。軟件開發(fā)者應(yīng)根據(jù)服務(wù)合同提供相應(yīng)的運(yùn)維服務(wù),包括軟件版本升級、軟件故障排查等。
軟件開發(fā)過程環(huán)節(jié)復(fù)雜、參與的專業(yè)人員多樣,需要通過系統(tǒng)的研發(fā)管理體系進(jìn)行質(zhì)量、安全等方面管理。下面簡單介紹幾種常用的IT 技術(shù)及軟件開發(fā)管理方法論。
1.2.1 項目管理知識體系(PMBOK)
項目管理知識體系(PMBOK)是美國項目管理協(xié)會對項目管理所需知識、技能和工具的概括性描述。PMBOK將項目管理劃分為9個知識領(lǐng)域,分別為范圍管理、成本管理、質(zhì)量管理、時間管理、人力資源管理、溝通管理、采購管理、風(fēng)險管理、集成管理等。PMBOK每四年更新一次,目前已更新至第五版。PMBOK應(yīng)用廣泛,適用于包括軟件開發(fā)在內(nèi)的工程項目管理實(shí)踐。
1.2.2 能力成熟度模型CMM/能力成熟度模型集成CMM I
能力成熟度模型(CMM)是軟件工程學(xué)會(SEI)提出的軟件工程管理方法。能力成熟度模型集成(CMMI)將軟件開發(fā)過程定義為5 個不同的成熟度等級,分別是初始級、可重復(fù)級、已定義級、可管理級、優(yōu)化級,5 個等級的成熟度水平依次遞增。CMM 通過對軟件開發(fā)和維護(hù)各個環(huán)節(jié)進(jìn)行監(jiān)控和評價,通過增量方式促進(jìn)軟件過程管理的優(yōu)化和提升。
在CMM 得到廣泛認(rèn)可和應(yīng)用后,SEI 又陸續(xù)開發(fā)出系統(tǒng)工程、軟件采購等多個領(lǐng)域的能力成熟度模型,并得到了良好的應(yīng)用。但是對于一些大型軟件企業(yè)而言,可能需要采用多個能力成熟度模型進(jìn)行過程管理。CMMI 在此背景下提出,將各相關(guān)專業(yè)領(lǐng)域的成熟度模型融入統(tǒng)一的框架中,可用于指導(dǎo)跨項目、部門或者整個組織的過程改進(jìn)。相比CMM,CMMI 增加了系統(tǒng)工程、集成的過程和產(chǎn)品、采購等專業(yè)領(lǐng)域,應(yīng)用范圍已不再局限于軟件開發(fā)管理。
1.2.3 敏捷開發(fā)思想
傳統(tǒng)的瀑布開發(fā)模式(也稱生命周期模式)將項目過程劃分為若干階段,每個階段順序執(zhí)行,并且嚴(yán)重依賴于之前已完成的階段。這種模式限制了開發(fā)期間各開發(fā)團(tuán)隊之間的交互,從而導(dǎo)致軟件開發(fā)效率和軟件質(zhì)量的不可控。
敏捷開發(fā)針對瀑布開發(fā)的缺點(diǎn)提出,目的是提高軟件團(tuán)隊的開發(fā)效率和響應(yīng)速度。敏捷開發(fā)以用戶需求進(jìn)化為核心,通過迭代的、循序漸進(jìn)的方式進(jìn)行軟件功能模塊的增量開發(fā)和更新。一般而言,敏捷開發(fā)適用于小型團(tuán)隊,重視開發(fā)團(tuán)隊成員之間的交流、反饋和總結(jié),專注于交付對用戶有價值的軟件產(chǎn)品,主要方法有Scrum、極限編程(XP)等。
背景:部門員工的工作進(jìn)展、工作計劃通過Excel周報填寫的形式向上級領(lǐng)導(dǎo)匯報,上級領(lǐng)導(dǎo)匯總后再統(tǒng)一報給部門領(lǐng)導(dǎo)審核;部門領(lǐng)導(dǎo)根據(jù)員工的工作表現(xiàn)、工作量、工作業(yè)績等多方面考核員工績效。這種人工填報、匯總的方式效率較低、時效性較差,已逐漸無法適應(yīng)快節(jié)奏的工作安排。
需求:部門計劃開發(fā)一款員工績效管理系統(tǒng)(網(wǎng)站),可滿足員工周報填寫、歷史周報查看、工作計劃安排等需求。同時,可為多名部門領(lǐng)導(dǎo)提供便捷的績效考核、匯總計算的手段。此外,需提供常用文件下載功能,便于文件電子化管理。
要求:支持用戶數(shù)大于或等于100;1 個月之內(nèi)上線,業(yè)余時間完成。
這是一個相對簡單的應(yīng)用開發(fā)需求,數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)處理流程均相對清晰。經(jīng)過與委托方、部門員工的充分溝通、確認(rèn),分析得到以下需求要點(diǎn)。
a)員工信息管理:提供員工基本信息的增加、刪除、查看等功能,包括姓名、編號、性別等信息。
b)項目信息管理:提供項目基本信息的增加、刪除、查看等功能,包括項目名稱、編號、要求完成時間、負(fù)責(zé)人、參與人、項目狀態(tài)等信息。
c)個人周報填寫:提供填報界面,列出所有該用戶相關(guān)的、未完成的項目列表。用戶可針對每個項目填寫、修改、保存最近一周的工作總結(jié)、下周工作計劃及其他待說明信息。
d)個人歷史周報查詢:提供查詢界面,可通過時間維度、項目維度查看歷史周報記錄。
e)部門歷史周報查詢:提供查詢界面,可通過時間維度、項目維度、人員維度等查詢部門所有人的歷史周報記錄,便于合理安排個人工作計劃。
f)員工績效考核:提供人員月度績效評分頁面,相關(guān)領(lǐng)導(dǎo)可從工作表現(xiàn)、工作業(yè)績、工作能力等方面為各員工打分。系統(tǒng)自動匯總各領(lǐng)導(dǎo)的打分?jǐn)?shù)據(jù),并支持?jǐn)?shù)據(jù)導(dǎo)出。
g)常用文件下載:提供文件上傳、刪除、下載等操作,上傳、下載時提供百分比進(jìn)度條。
h)其他常用功能:提供包括用戶登錄、權(quán)限管理、數(shù)據(jù)統(tǒng)計等常用功能。
目前主流的網(wǎng)站編程技術(shù)有LAMP、J2EE、Asp.Net等。LAMP 的開發(fā)架構(gòu)是Linux+Apache+MySQL+PHP,主要使用PHP 開發(fā);J2EE 的開發(fā)架構(gòu)是UNIX+Tomcat+Oracle+JSP 的組合,主要使用JAVA 開發(fā);Asp.Net 的開發(fā)框架是Windows Server+IIS+SQL Server+ASP的組合,主要使用C#或VB開發(fā)。3種技術(shù)各有優(yōu)缺點(diǎn),均能夠很好地滿足此次開發(fā)需求。
考慮到開發(fā)者本身的語言熟悉程度、IDE 易用性及部署難度,最終選擇使用Asp.Net 進(jìn)行本次開發(fā)。Asp.Net 提供了以MVC 模式為基礎(chǔ)的Asp.Net Web 應(yīng)用程序框架,通過把項目分成Model、View 和Control?ler,減少了項目之間的耦合,使得復(fù)雜項目更加容易維護(hù)。此外,微軟提供了ADO.Net Entity Framework 框架,可方便地轉(zhuǎn)換、管理應(yīng)用程序和數(shù)據(jù)庫對象,減少開發(fā)者的開發(fā)工作量、提升開發(fā)效率。系統(tǒng)前端開發(fā)使用Html+JavaScript 的組合,并采用Bootstrap 進(jìn)行樣式設(shè)定。
圖1示出的是技術(shù)框架示意圖。
圖1 技術(shù)框架示意圖
結(jié)合需求分析和技術(shù)選型,最終將軟件功能分成基礎(chǔ)數(shù)據(jù)管理、周報管理、績效評價和系統(tǒng)管理等4個部分,每個部分又細(xì)分為若干功能模塊(見圖2)。
圖2 功能框架示意圖
2.5.1 Entity Framework
Entity Framework(EF)是微軟以ADO.NET 為基礎(chǔ)發(fā)展而來的一組開源的、支持開發(fā)面向數(shù)據(jù)的應(yīng)用程序的技術(shù),目前已更新至EF7版本。EF遵循對象映射關(guān)系(ORM)思想,通過抽象化數(shù)據(jù)結(jié)構(gòu)的方式,讓開發(fā)者可通過操作數(shù)據(jù)對象的方式操作關(guān)系型數(shù)據(jù)庫,屏蔽了不同數(shù)據(jù)庫廠商間的差異,極大地提升了開發(fā)效率。
實(shí)體數(shù)據(jù)模型(EDM)是EF的核心,自上而下可分為概念層、映射層和存儲層。概念層(CSDL)定義數(shù)據(jù)結(jié)構(gòu)模型,供上層應(yīng)用程序調(diào)用;存儲層(SSDL)對應(yīng)數(shù)據(jù)庫實(shí)體,完成對數(shù)據(jù)庫的具體操作;兩者間的對應(yīng)關(guān)系由映射層(MSL)實(shí)現(xiàn)。EF體系結(jié)構(gòu)如圖3所示。
2.5.2 Bootstrap
Bootstrap 是Twitter 推出的一個開源的、基于HT?ML5 和CSS3 的前端開發(fā)框架,目前更新至3.3.5 版本。Bootstrap 中包含了豐富的Web 組件,包括下拉菜單、按鈕組、導(dǎo)航條、路徑導(dǎo)航、分頁、排版等。此外,Bootstrap 還自帶了13 個jQuery 插件,包括模式對話框、標(biāo)簽頁、滾動條等。
Bootstrap 使用簡便,通過在文件中引用其css 文件,并在頁面元素上進(jìn)行class 屬性設(shè)置,即可實(shí)現(xiàn)簡潔、美觀的頁面樣式設(shè)置。本次工程的前端框架采用Bootstrap 3版本,同時結(jié)合使用了包括jQuery、AJAX等多種前端展示技術(shù)。
2.6.1 周報填寫
員工登陸后,展示該員工待填報項目列表。員工根據(jù)實(shí)際工作情況,分別填寫項目總結(jié)、工作計劃及意見和建議等。用戶可以隨時點(diǎn)擊右側(cè)的“點(diǎn)擊保存”按鈕進(jìn)行保存。
2.6.2 周報查詢
員工可查看部門歷史周報和個人歷史周報,了解他人的工作進(jìn)展和計劃安排??梢园凑諘r間、人員或項目等維度進(jìn)行查詢。
2.6.3 績效評估
領(lǐng)導(dǎo)可登錄該頁面,針對員工本月的業(yè)績、能力、表現(xiàn)等進(jìn)行打分,各項分?jǐn)?shù)按照不同的權(quán)值自動進(jìn)行加權(quán)。系統(tǒng)會將不同領(lǐng)導(dǎo)的打分自動進(jìn)行匯總,并導(dǎo)出績效評估記錄。
經(jīng)過緊張的開發(fā)、調(diào)試與測試,系統(tǒng)如期上線。目前,部門員工通過登錄系統(tǒng)進(jìn)行工作周報填寫、工作計劃安排、工程進(jìn)度維護(hù)等,極大地提高了工作效率。在整個開發(fā)過程中,個人也收獲了不少經(jīng)驗(yàn)和心得,分享如下。
a)項目經(jīng)理按照目標(biāo)安排,跟蹤項目進(jìn)度、協(xié)調(diào)成員之間的溝通交流。涉及到對外合作時,應(yīng)提前完成需求分析和接口設(shè)計,避免不必要的時間浪費(fèi)。
b)“迭代”為先,保持“十年磨一劍”的初心,但行動上仍需“小步快跑”。產(chǎn)品設(shè)計上,產(chǎn)品經(jīng)理應(yīng)充分考慮需求實(shí)現(xiàn)與開發(fā)成本之間的平衡,按照功能模塊的優(yōu)先級進(jìn)行適當(dāng)取舍;開發(fā)技術(shù)上,根據(jù)業(yè)務(wù)規(guī)模、時間要求等因素選擇合適的技術(shù)手段,以最快時間內(nèi)實(shí)現(xiàn)“能用”的基礎(chǔ)要求,在后續(xù)版本中逐步完成新技術(shù)的引入和更新。產(chǎn)品經(jīng)理應(yīng)具備前瞻意識,提前規(guī)劃未來若干個版本的產(chǎn)品演進(jìn)路線,并根據(jù)用戶反饋、開發(fā)進(jìn)展等及時調(diào)整。
c)產(chǎn)品UE 設(shè)計直觀、合理,滿足易用的要求;產(chǎn)品UI設(shè)計盡量簡潔、美觀。
d)開發(fā)人員應(yīng)善于學(xué)習(xí)、利用開源項目,取長補(bǔ)短。代碼注釋應(yīng)規(guī)范完整,便于后續(xù)人員交接。
為了應(yīng)對移動互聯(lián)網(wǎng)業(yè)務(wù)的不斷沖擊,電信運(yùn)營商需盡快建立自有的、高素質(zhì)的IT 軟件開發(fā)團(tuán)隊,實(shí)現(xiàn)對新興業(yè)務(wù)及時、有效的支撐。軟件開發(fā)是一個系統(tǒng)性的工程,需要各個環(huán)節(jié)人員分工協(xié)作、充分配合才能完成。IT員工應(yīng)不斷學(xué)習(xí),掌握系統(tǒng)的軟件開發(fā)方法,提升個人知識儲備和實(shí)踐經(jīng)驗(yàn),應(yīng)對不斷變化的挑戰(zhàn)。
[1] 張海藩.軟件工程導(dǎo)論[M].5 版.北京:清華大學(xué)出版社,2008:91-140.
[2] 麥斯阿塞克.需求分析與系統(tǒng)設(shè)計[M].馬素霞,譯.北京:機(jī)械工業(yè)出版社,2009:29-30.
[3] Johanna Rothman.項目管理修煉之道[M].鄭柯,譯.北京:人民郵電出版社,2010:112-113.
[4] 斯里格.軟件項目管理與敏捷方法[M].李曉麗,譯.北京:機(jī)械工業(yè)出版社,2010:29-37.
[5] Project Management Institute. 項目管理知識體系指南(PMBOK 指南)[M].5版.許江林,譯.北京:電子工業(yè)出版社,2013:60-61.
[6] 馬丁,鄧輝.敏捷軟件開發(fā)(原則模式與實(shí)踐)[M].北京:清華大學(xué)出版社,2003:3-16.
[7] 劉哇勇. 學(xué)習(xí)Entity Framework 中的Code First[EB/OL].[2015-09-20]. http://www.cnblogs.com/Wayou/archive/2012/09/20/EF_Co?deFirst.htm l.
[8] Liam Wang. ASP.NET MVC 小牛之路[EB/OL].[2015-09-20].http://www.cnblogs.com/willick/p/3195560.html.
[9] Jon Galloway,Brad Wilson,K.Scott Allen. ASP.NET MVC 5 高級編程[M].5版.孫遠(yuǎn)帥,譯.北京:清華大學(xué)出版社,2015:1-10.
[10]W 3School. ASP.NET MVC-教程[EB/OL].[2015-09-20]. http://www.w3school.com.cn/aspnet/mvc_intro.asp.
[11]Scott Millett.ASP.NET 設(shè)計模式[M].楊明軍,譯.北京:清華大學(xué)出版社,2011:344-356.
[12]徐濤.Web 開發(fā)技術(shù)叢書:深入理解Bootstrap[M].北京:機(jī)械工業(yè)出版社,2014:1-3.
[13]黨建.Web 開發(fā)技術(shù)叢書:Web 前端開發(fā)最佳實(shí)踐[M].北京:機(jī)械工業(yè)出版社,2015:4-5.
[14]曹劉陽.編寫高質(zhì)量代碼—WEB 前端開發(fā)修煉之道[M].北京:機(jī)械工業(yè)出版社,2010:8-9.
[15]Ross Harmes,Dustin Diaz.JavaScrip 設(shè)計模式[M].謝廷晟,譯.北京:人民郵電出版社,2009:8-9.