郭峰+麻強
摘 要:在拼單購物系統(tǒng)開發(fā)過程中,應用了敏捷方法思想和原則,取得了較好的效果。在管理和過程方面應用Scrum原則和方法,在具體實施方法上采用極限編程的多項實踐,在開發(fā)過程中采用版本控制工具來管理變更,提高了系統(tǒng)開發(fā)效率和軟件質量。
關鍵詞:敏捷方法;軟件過程;拼單購物系統(tǒng)
中圖分類號:TP311 文獻標志碼:A
0 引言
本文項目是北京市大學生科研與創(chuàng)業(yè)項目,由在校本科生自主選題,并在指導教師指導下開展研究與開發(fā)工作。
近十年來,電子商務發(fā)展非常迅猛,尤其是BtoC形式的在線購物對實體店造成巨大沖擊,知名的購物平臺如淘寶、京東、亞馬遜、當當?shù)让刻飚a(chǎn)生大量的在線訂單。但是隨著人力成本的增加,購物平臺的免運費限額逐步提高,網(wǎng)民購物時頗費腦筋,有時需要買的商品達不到免運費限額,只好多出運費或者拼湊一些暫時不需要的商品以節(jié)省運費,同時網(wǎng)購商家經(jīng)常搞一些滿減等優(yōu)惠活動,但是通常一位用戶如果參與該活動會出現(xiàn)購買的商品數(shù)量超出消費能力,于是拼單購物就成為受大眾歡迎的一種購物形式。在這種背景下,由北方工業(yè)大學計算機專業(yè)5名本科生組成的開發(fā)小組,開發(fā)服務于移動拼單購物平臺。
在軟件開發(fā)過程中,開發(fā)團隊往往對寫代碼比較重視,為了追求開發(fā)進度往往會忽略組織管理等工作,容易在工程進度、工程質量方面造成負面影響。本項目采用敏捷方法,取得了較好的效果。
1 敏捷方法概述
敏捷方法是對一類方法涵蓋性術語。某些軟件項目具有需求易變、快速交付的特點,傳統(tǒng)的工程化方法過于嚴格,一些經(jīng)驗豐富的軟件設計人員在開發(fā)實踐中分別總結出多種獨特而且有效的軟件開發(fā)方法,被業(yè)界概括為敏捷軟件開發(fā)方法。敏捷方法具有類似價值觀,一般都具有以人為本、循環(huán)迭代、響應變化等特點,目標在于能高質量地快速交付客戶滿意的軟件系統(tǒng)。其中最就有代表性的獲得廣泛應用的方法是“極限編程”和“Scrum”。
在《解析極限編程——擁抱變化》一書中提出了極限編程方法,極限編程包括了一組簡單、具體的實踐,這些實踐都是編程活動中常見的技術方法,結合在一起形成一個敏捷開發(fā)過程。這些實踐之間存在相互關聯(lián),共同支撐敏捷方法的價值觀,如平穩(wěn)的工作效率體現(xiàn)以人為本,根本目的還是要提高開發(fā)軟件的效率和質量,現(xiàn)場用戶體現(xiàn)與客戶的合作重于合同的談判,代碼規(guī)范、測試驅動開發(fā)、集體擁有代碼項目關聯(lián),集體擁有代碼必然大量涉及項目成員之間的代碼交流,代碼規(guī)范使代碼的可理解性強,測試驅動開發(fā)限制修改代碼的隨意性,持續(xù)集成、小版本發(fā)布使得用戶能夠盡早發(fā)現(xiàn)問題。極限編程所包括的實踐不是特有的,而是一些通用的經(jīng)過實際應用證明有效的開發(fā)方法,可以在軟件開發(fā)中直接應用,也可以擴充一些實踐,其中的某些實踐也可以根據(jù)項目的各方面特點進行調(diào)整修改。
極限編程偏重技術方面,在管理和過程方面比較薄弱,Scrum起到互補的作用。Scrum提供了一個增量式的、迭代的過程框架。在基于Scrum的軟件項目開發(fā)中,若干稱為Sprint的較短的迭代組成一個完整的軟件開發(fā)過程。每個Sprint的長度根據(jù)軟件的復雜程度進行調(diào)整,一般在2~4周。Scrum方法中,軟件需求通過產(chǎn)品Backlog來描述和管理,產(chǎn)品backlog采用用戶故事的形式進行描述,這些用戶故事按照商業(yè)上的優(yōu)先級進行排序。采用Scrum的開發(fā)團隊首先針對商業(yè)價值高的需求展開開發(fā)工作,將最高優(yōu)先級的需求分配到最初的Sprint中,在后續(xù)的Sprint迭代周期中逐步實現(xiàn)較低優(yōu)先級的需求。在每個迭代過程中,召開Sprint計劃會議,對挑選出的需求進行討論、分析和估算得到相應的任務列表,這些任務列表稱為Sprint backlog。每個Sprint的工作完成之后,開發(fā)團隊提交可交付的增量產(chǎn)品,這一產(chǎn)品通過評審意味著本次迭代結束。
2 基于敏捷方法的開發(fā)過程
本項目規(guī)模不大,需求不夠清晰,需要在開發(fā)過程中逐步確定,在開發(fā)過程中,采用了極限編程和Scrum相結合的方法。在軟件過程上采用了SCRUM中的迭代周期,具體的實現(xiàn)技術上采用了極限編程的最佳實踐,如簡單設計、測試驅動的開發(fā)、平穩(wěn)的工作效率、持續(xù)集成等。
2.1 確定需求
從需求層次角度來看,本系統(tǒng)業(yè)務需求是明確的,但用戶需求較難確定,由于本系統(tǒng)并非針對具體明確的用戶進行開發(fā),只能采用調(diào)查問卷的形式向潛在客戶了解需求。
為便于準確了解需求及應對需求的變化,極限編程采用現(xiàn)場客戶實踐加強與客戶的溝通。本項目潛在的用戶無法通過駐留開發(fā)現(xiàn)場的方式參與系統(tǒng)的開發(fā),通過調(diào)查問卷的方式了解潛在客戶的需求,在開發(fā)過程中通過電話或者免談的方式與潛在客戶溝通,逐漸確定需求細節(jié)。
系統(tǒng)隱喻是極限編程方法中用于各方利益相關者溝通的基礎,便于各方人員對需求有一個整體上的共同理解,由于對系統(tǒng)的業(yè)務需求比較清楚,在開發(fā)過程中沒有特意構造一個系統(tǒng)隱喻。
2.2 簡單設計
簡單設計就是簡化傳統(tǒng)方法的設計過程和設計產(chǎn)品,能夠表達主要的思想,而不追求文檔的完整性和豐富性?;诤唵卧O計的實踐,本項目系統(tǒng)架構圖如圖1所示。
軟件系統(tǒng)分為3個部分:基于安卓的移動客戶端、基于Windows操作系統(tǒng)的后臺服務器、存儲數(shù)據(jù)的數(shù)據(jù)庫系統(tǒng)。移動客戶端通過HTTP協(xié)議將代表拼單信息的數(shù)據(jù)發(fā)送到后臺服務器,后臺服務器訪問數(shù)據(jù)庫進行數(shù)據(jù)操作,數(shù)據(jù)庫系統(tǒng)處理訪問請求后返回數(shù)據(jù)集,后臺服務器根據(jù)返回的數(shù)據(jù)集進行處理并返回操作結果。
根據(jù)系統(tǒng)的功能需求,獲得系統(tǒng)的軟件結構圖,如圖2所示。
2.3 編碼環(huán)節(jié)
在編程環(huán)節(jié),本系統(tǒng)采用了測試驅動開發(fā)、編碼規(guī)范、集體擁有代碼、重構這些實踐。
測試驅動開發(fā)目前軟件開發(fā)中的常見做法,極限編程將其列為12個基本實踐之一,按照一般的開發(fā)流程,需要先實現(xiàn)功能模塊的代碼,然后進行測試,測試驅動開發(fā)采用了逆向的技術路線,在編寫功能代碼之前要求先寫出測試代碼。系統(tǒng)基于Java進行開發(fā),JUNIT包提供了單元測試的相關類,在設計工作完成之后,首先開發(fā)了核心類的測試代碼。
在開發(fā)及維護過程中,由于需求的變化和調(diào)整或者設計缺陷不可避免地會出現(xiàn)修改代碼的情況,隨著修改量的增加,代碼結構會逐漸混亂難以理解。重構就是提高代碼可讀性可禮節(jié)性的一種重要手段,重構是在不改變程序功能的情況下,對程序結構進行調(diào)整和優(yōu)化的過程。按照極限編程的要求,在軟件開發(fā)過程中,代碼處于團隊共享狀態(tài),每個人不只對自己寫的代碼有所有權,對任何團隊成員寫的代碼也具有所有權,從而允許團隊中的任何人有權利重構任何一段代碼,但是要求重構后的代碼一定要通過測試,測試驅動開發(fā)就變得非常重要,為重構以及代碼共有提供了技術基礎。
在編碼規(guī)范方面,項目組制定了具體的程序風格,包括編程環(huán)境的背景色、文本的顏色字體、縮進的格式、注釋的類型和要求、標識符命名的規(guī)范、界面元素的顏色樣式等等。
因為團隊成員少,極限編程中著名的也存在一定爭議的結對編程,本系統(tǒng)開發(fā)過程沒有采用。
2.4 人員管理
軟件項目開發(fā)不是全速短跑,而是馬拉松長跑,在人員管理方面采用了極限編程保持平穩(wěn)的工作效率這一實踐,更容易提高整體的工作效率和質量。在開發(fā)過程中,項目組成員盡量不通過加班加點解決問題,而是保持一種穩(wěn)定的進度。
在scrum框架中,團隊成員分為3種角色:產(chǎn)品負責人,項目經(jīng)理和團隊成員。項目組成員按照3種角色進行了分工。
2.5 開發(fā)過程
本系統(tǒng)開發(fā)周期為1年,5位同學參加該項目,由于還有上課任務,在scrum過程框架的基礎上做了一些調(diào)整。系統(tǒng)開發(fā)過程如下:
(1)確定需求:首先通過調(diào)查問卷,小組會議的形式討論系統(tǒng)的功能需求,并以用戶故事的形式進行描述,將獲得的用戶故事按照優(yōu)先級進行排列,形成產(chǎn)品需求列表,即Product Backlog。
(2)然后根據(jù)產(chǎn)品需求列表,估算待開發(fā)系統(tǒng)的規(guī)模,以千行(KL)為單位進行衡量,以系統(tǒng)規(guī)模為基礎做初步的進度安排。
(3)接下來開始一個Sprint, 每個Sprint啟動時召開Sprint計劃會議,該會議的任務是從系統(tǒng)的產(chǎn)品需求列表中挑選一個用戶故事作為本次迭代完成的目標, 本項目為每個Sprint迭代制定的時間周期是兩個星期,然后細化本次選中的用戶故事,形成更小粒度的用戶故事,這些新的用戶故事就是本次迭代要完成的任務,稱為Sprint Backlog;根據(jù)Sprint Backlog為團隊成員分配任務,每項任務應該在兩天內(nèi)能完成。
(4)上述Sprint迭代過程持續(xù)開展,直到所有的產(chǎn)品需求都已實現(xiàn)為止。
站立會議是敏捷方法中的顯著特色,體現(xiàn)了高效靈活以解決問題為目的而不追求形式的特點,站立會議如字面所示參加會議的人員站著開會,每次會議控制在15分鐘左右,團隊成員介紹昨天的任務完成情況,并向所有成員承諾今天要完成什么任務,遇到不能解決的問題也可以在會議上提出,每個人介紹完成后,要更新自己的Sprint燃盡圖,由于還有上課任務,本項目沒有采用每天開會的形式,每周碰面一次,在開發(fā)過程中微信QQ交流為主。
2.6 版本控制
在軟件開發(fā)尤其是團隊形式的軟件開發(fā)過程中,會產(chǎn)生大量的文檔和代碼,對文檔和代碼的管理和控制是一個關鍵的任務。這個任務如果靠人工完成,當軟件規(guī)模較大時,會造成極大的混亂,由于軟件開發(fā)中的文檔和代碼會不斷修改,人工管理的方式只能通過對目錄或者文件編號進行,難以有效地記錄、跟蹤、查找文檔和代碼的變化。本課題開發(fā)過程中采用的版本控制服務器軟件為VisualSVN Server,以TortoiseSVN作為客戶端,這兩者都是免費的,項目組將開發(fā)過程中的文檔和源程序保存在服務器端的中央版本庫,服務器能夠自動記錄對文檔和代碼的修改,自動維護版本的變化,開發(fā)人員只需要從服務器上下載和上傳相關文檔和代碼即可,簡化了管理的難度,提高了開發(fā)效率。
結語
通過在拼單購物系統(tǒng)的分析和設計中應用敏捷方法,對軟件工程這一學科有了更為深刻的認識,一方面在軟件開發(fā)中要采用工程化的方法,另一方面要根據(jù)軟件及開發(fā)團隊的特點,采用靈活高效的方法和技術。敏捷方法和傳統(tǒng)的軟件方法不是對立的,存在一定的區(qū)別也有密切的聯(lián)系,根本目的都在于如何提高軟件開發(fā)的效率和質量。
參考文獻
[1]普雷斯曼,鄭人杰.軟件工程,實踐者的研究方法[M].北京:機械工業(yè)出版社,2011.
[2]桑大勇,王瑛,吳麗華.敏捷軟件開發(fā)方法與實踐[M].西安:西安電子科技大學出版社,2011.