摘 要 軟件外包可以幫助有軟件需求的企業(yè)節(jié)省開發(fā)成本、降低企業(yè)運(yùn)行的費(fèi)用以及提升企業(yè)自身的核心競(jìng)爭(zhēng)力。與普通的軟件開發(fā)相比,有許多因素會(huì)影響到軟件外包的開發(fā)效率,本文利用先進(jìn)的軟件開發(fā)技術(shù),編寫較少且易懂的代碼,通過(guò)程序自動(dòng)生成工具,來(lái)提高軟件外包的開發(fā)效率。
關(guān)鍵詞 軟件外包 生產(chǎn)效率 PAR 程序自動(dòng)生成
中圖分類號(hào):F752.6 文獻(xiàn)標(biāo)識(shí)碼:A
0 引言
隨著全球新一輪的產(chǎn)業(yè)轉(zhuǎn)移,服務(wù)外包已成為當(dāng)今世界上許多國(guó)家和地區(qū)發(fā)展經(jīng)濟(jì)、實(shí)現(xiàn)產(chǎn)業(yè)升級(jí)、優(yōu)化經(jīng)濟(jì)結(jié)構(gòu)、擴(kuò)大就業(yè)、培育人才和提升服務(wù)貿(mào)易的戰(zhàn)略選擇。而在服務(wù)外包中,軟件外包是一個(gè)很重要的組成部分,目前全球軟件產(chǎn)值的三分之一是通過(guò)軟件外包的形式來(lái)完成的。中國(guó)軟件外包業(yè)務(wù)發(fā)展較晚,但隨著我國(guó)經(jīng)濟(jì)的戰(zhàn)略轉(zhuǎn)型,政府出臺(tái)各項(xiàng)鼓勵(lì)軟件外包發(fā)的政策,我國(guó)軟件外包產(chǎn)業(yè)進(jìn)入高速發(fā)展的階段。根據(jù)賽迪顧問(wèn)的中國(guó)軟件外包服務(wù)市場(chǎng)的研究報(bào)告,2003年軟件外包服務(wù)的市場(chǎng)規(guī)模只有4.7億美元,2005年達(dá)到9億美元,2007年更是達(dá)到了20.1億美元,年增長(zhǎng)速度都一直保持在40%左右。
生產(chǎn)效率的問(wèn)題不僅存在于普通的軟件開發(fā)中,也存在于軟件外包中,如與客戶的溝通問(wèn)題以及文化差異等。提高軟件外包中的開發(fā)效率,便可以提高軟件外包企業(yè)的產(chǎn)能和交付能力,給企業(yè)帶來(lái)更多利潤(rùn)的同時(shí)提高企業(yè)的知名度。本文使用先進(jìn)的軟件和算法開發(fā)方法PAR,通過(guò)其支撐平臺(tái),達(dá)到快速開發(fā)軟件,提高軟件的生產(chǎn)效率。
1 PAR介紹
PAR平臺(tái)是PAR方法①的支撐平臺(tái),是一個(gè)綜合性軟件開發(fā)環(huán)境,二者簡(jiǎn)稱PAR。②PAR由自定義泛型規(guī)約和算法設(shè)計(jì)語(yǔ)言Radl,軟件程序設(shè)計(jì)語(yǔ)言Apla,系列算法和程序自動(dòng)生成工具,系統(tǒng)的算法程序設(shè)計(jì)方法和簡(jiǎn)捷的數(shù)據(jù)庫(kù)應(yīng)用軟件開發(fā)工具構(gòu)成。PAR方法和PAR平臺(tái)包含循環(huán)不變式的新定義和新的開發(fā)策略,統(tǒng)一的算法程序設(shè)計(jì)方法,新的算法表示方法等關(guān)鍵技術(shù)。PAR支持算法程序的形式化和自動(dòng)化開發(fā),可以顯著提高算法和軟件開發(fā)的效率和可靠性。
1.1 軟件開發(fā)流程圖(圖1)
接到一個(gè)項(xiàng)目后,首先用Radl語(yǔ)言來(lái)做需求分析和功能點(diǎn)的設(shè)計(jì),然后用Apla語(yǔ)言實(shí)現(xiàn)所有的功能點(diǎn),再通過(guò)程序自動(dòng)生成工具將Apla程序轉(zhuǎn)換為C++程序或Java程序等。也可以參照其它形式(自然語(yǔ)言或UML圖)的需求分析和設(shè)計(jì),直接編寫Apla程序,再自動(dòng)生成想要的程序。一個(gè)軟件中包括普通程序和算法程序,算法的詳細(xì)開發(fā)請(qǐng)參考文獻(xiàn)。③
1.2 程序自動(dòng)生成
Mathai.Joseph 在VSTTE’05 上《Formal Techniques in Large -ScaleSoftware Engineering》文章中提到,對(duì)于高效地開發(fā)出高質(zhì)量的軟件并有效地維護(hù)和更新軟件這一目標(biāo),軟件的自動(dòng)生成在實(shí)際中是一條行之有效的途徑。為達(dá)到軟件自動(dòng)生成的目的,需要以更高的視角將各種軟件重用技術(shù)融合,生成式程序設(shè)計(jì)是融合的一種表現(xiàn);提供了更高的視角:面向系統(tǒng)族,抽取共性,管理可變性,自動(dòng)重用。④在PAR平臺(tái)中開發(fā)外包軟件的過(guò)程就體現(xiàn)了生成式程序設(shè)計(jì)的思想,在PAR中融合了多種軟件開發(fā)技術(shù),如:模型驅(qū)動(dòng)軟件開發(fā)技術(shù)、泛型程序設(shè)計(jì)技術(shù)、構(gòu)件技術(shù)以及高可靠軟件建模語(yǔ)言以及自動(dòng)變換技術(shù)等,通過(guò)PAR平臺(tái)中獨(dú)有的程序自動(dòng)生成工具,可以大幅提高軟件開發(fā)的效率。
2 開發(fā)步驟
中軟國(guó)際實(shí)訓(xùn)教材給出的開發(fā)流程包括以下幾個(gè)階段:項(xiàng)目的啟動(dòng)與計(jì)劃、項(xiàng)目的需求分析、系統(tǒng)設(shè)計(jì)、編碼與測(cè)試、系統(tǒng)部署。在PAR平臺(tái)中可以用Radl語(yǔ)言描述項(xiàng)目的需求分析和功能點(diǎn)的設(shè)計(jì),進(jìn)而用Apla語(yǔ)言編寫程序,再根據(jù)項(xiàng)目的需要選擇相應(yīng)的程序自動(dòng)生成工具,生成Java程序或C++程序,或者其他的程序;當(dāng)然在PAR平臺(tái)中也可以根據(jù)已知的需求分析和系統(tǒng)設(shè)計(jì),直接用Apla語(yǔ)言編碼,再用自動(dòng)生成工具轉(zhuǎn)換成所需要的程序。
2.1 用Radl語(yǔ)言描述需求分析和功能點(diǎn)的設(shè)計(jì)
Radl語(yǔ)言不僅可以用來(lái)規(guī)約算法和描述算法,還可以對(duì)普通程序的功能進(jìn)行描述,包括數(shù)據(jù)庫(kù)程序。Radl提供了足夠的抽象機(jī)制,可以集中刻劃問(wèn)題的功能而不受具體的設(shè)計(jì)和實(shí)現(xiàn)的限制,這些特征可以降低文化差異帶來(lái)的溝通困擾,也可以很好地保護(hù)企業(yè)的核心競(jìng)爭(zhēng)力。
用形式化語(yǔ)言Radl描述需求,以功能點(diǎn)的形式來(lái)劃分模塊,形式如下:
USER:使用者
|[標(biāo)識(shí)符的說(shuō)明]|
FQ:謂詞表達(dá)式
FR:謂詞表達(dá)式
其中標(biāo)識(shí)符說(shuō)明部分主要用于說(shuō)明前、后置斷言中出現(xiàn)的變量和函數(shù)的屬性及類型。屬性有3種:(1)輸入變量,用關(guān)鍵字in標(biāo)識(shí);(2)輸出變量,用關(guān)鍵字out標(biāo)識(shí);(3)輔助變量,用關(guān)鍵字aux標(biāo)識(shí)。類型可以是Radl語(yǔ)言中的標(biāo)準(zhǔn)數(shù)據(jù)類型(integer,real,boolean,char,string)、自定義簡(jiǎn)單類型(記錄類型、數(shù)組類型、枚舉類型、子界類型和結(jié)果集類型)、預(yù)定義ADT類型(集合類型、序列類型、樹類型、圖類型、數(shù)據(jù)庫(kù)表類型)和自定義ADT類型。以FQ和FR開頭的謂詞表達(dá)式分別稱為功能點(diǎn)的前置斷言和后置斷言,用于表示使用者輸入?yún)?shù)必須滿足的條件和使用者想要獲得的結(jié)果。如果功能點(diǎn)中不含數(shù)據(jù)庫(kù)操作,均使用統(tǒng)一的一階謂詞邏輯公式,格式為(Qi: r(i):f(i)),表示“在范圍r(i)上,對(duì)函數(shù)f(i)施行q運(yùn)算所得的量”,其中Q是q運(yùn)算的一般化,可以是 (全稱量詞),彐(存在量詞),MIN(求最小值量詞),MAX(求最大值量詞),∑(求和量詞),∏(求積量詞)等,分別對(duì)應(yīng)著的q運(yùn)算是∧,∨,min,max,+,*等;如果所描述的功能點(diǎn)含有數(shù)據(jù)庫(kù)操作,就用關(guān)系代數(shù)來(lái)描述數(shù)據(jù)庫(kù)的操作,如:∏(投影操作), (選擇操作),Ⅹ(笛卡爾積),∪(并操作),(差操作),€鰨ǔ僮鰨┑取K淙還叵蕩拿扛鱸慫閽諼醬恃菟闃卸加卸雜φ擼俏四芨邐憊鄣孛枋鍪菘獾牟僮鰨故茄≡裼霉叵蕩?
2.2 用Apla語(yǔ)言編碼實(shí)現(xiàn)
用Radl語(yǔ)言描述需求分析之后,使用軟件設(shè)計(jì)語(yǔ)言Apla對(duì)每個(gè)功能點(diǎn)進(jìn)行編碼。起初Apla被定義為一種抽象程序設(shè)計(jì)語(yǔ)言(Abstract Programming LAnguage,簡(jiǎn)稱Apla),是為實(shí)現(xiàn)算法程序形式化開發(fā)的PAR方法而定義的,其主要思想是充分體現(xiàn)功能抽象、數(shù)據(jù)抽象等現(xiàn)代程序設(shè)計(jì)思想,它借鑒了先前優(yōu)秀語(yǔ)言的優(yōu)點(diǎn)及使用習(xí)慣,使之簡(jiǎn)單實(shí)用,讓接觸過(guò)編程語(yǔ)言的初學(xué)者很容易就能掌握它。便于程序開發(fā),使得構(gòu)成的程序易于閱讀理解和驗(yàn)證,且易于轉(zhuǎn)換成C++、Java和VB.net等可執(zhí)行程序設(shè)計(jì)語(yǔ)言程序。Apla 的一個(gè)重要特色是它的數(shù)據(jù)類型系統(tǒng):它提供了標(biāo)準(zhǔn)數(shù)據(jù)類型、自定義簡(jiǎn)單類型、預(yù)定義ADT 和自定義ADT 機(jī)制,用戶可以像使用標(biāo)準(zhǔn)數(shù)據(jù)類型一樣使用預(yù)定義的常見組合數(shù)據(jù)結(jié)構(gòu)的ADT,Apla 中的符號(hào)(含ADT 中運(yùn)算或操作) 表達(dá)方式盡量考慮了通用性和習(xí)慣性,使傳統(tǒng)的數(shù)學(xué)符號(hào)和數(shù)學(xué)表達(dá)式進(jìn)入了算法設(shè)計(jì)和程序設(shè)計(jì)語(yǔ)言。
隨著PAR方法和PAR平臺(tái)的不斷發(fā)展,尤其是在PAR中加入了數(shù)據(jù)庫(kù)機(jī)制之后,關(guān)系代數(shù)語(yǔ)言就融入了Apla中,用關(guān)系代數(shù)語(yǔ)言來(lái)處理數(shù)據(jù)庫(kù)操作,通過(guò)程序自動(dòng)生成工具可生成嵌入標(biāo)準(zhǔn)了SQL語(yǔ)句的C++程序或Java程序等,并且可以直接運(yùn)行。Apla的這些特色可以縮短程序的長(zhǎng)度,不用編寫復(fù)雜的SQL語(yǔ)句,用簡(jiǎn)單且等價(jià)的關(guān)系代數(shù)就可以實(shí)現(xiàn)復(fù)雜的SQL語(yǔ)句,大大提高了程序的開發(fā)效率。
2.3 程序自動(dòng)生成
PAR平臺(tái)中含有程序自動(dòng)生成工具,例如從Apla程序→ C++程序,⑤Apla程序→Java程序⑥等。這個(gè)階段是將調(diào)試好的Apla程序自動(dòng)轉(zhuǎn)換成項(xiàng)目所需要的源代碼,這個(gè)轉(zhuǎn)換過(guò)程是平臺(tái)自動(dòng)完成的,并且轉(zhuǎn)換后的代碼長(zhǎng)度大大超過(guò)Apla程序代碼的長(zhǎng)度,從而大幅提高程序的開發(fā)效率。
3 實(shí)例
應(yīng)用本文的開發(fā)流程,我們開發(fā)一個(gè)應(yīng)屆畢業(yè)生求職和培訓(xùn)的信息管理系統(tǒng)。該系統(tǒng)用戶為:系統(tǒng)管理員、畢業(yè)生、企業(yè)和培訓(xùn)機(jī)構(gòu)。主要功能點(diǎn)有:(1)企業(yè)可以發(fā)布和修改招聘信息;(2)畢業(yè)生可以報(bào)名應(yīng)聘某個(gè)職位,并且可以修改個(gè)人信息和應(yīng)聘信息;(3)根據(jù)畢業(yè)生缺少的技能、培訓(xùn)城市等條件,系統(tǒng)自動(dòng)匹配到各個(gè)培訓(xùn)機(jī)構(gòu);(4)系統(tǒng)管理員管理三方的信息。
限于篇幅只在這里列舉功能點(diǎn)1中的企業(yè)發(fā)布職位信息的Radl描述,如下:
USER: ENTERPRISE(企業(yè))
|[in jobInfo: record1; out recruitInfo: ResultSet; aux recruitment: Table(record1), enterprise: Table(record2) ]|
FQ: 記錄jobInfo和數(shù)據(jù)庫(kù)表recruitment符合record1規(guī)范∧數(shù)據(jù)庫(kù)表enterprise符合record2規(guī)范;
FR: recruitInfo = enterprise ∽ (recruitment ∪ jobInfo);
現(xiàn)給出record1、record2的定義和數(shù)據(jù)庫(kù)表recruitment、enterprise的具體信息,如下:
type record1=record
job_id:integer;
job_name:string;
job_needskills:string;
job_duties:string;
job_city:string;
recruit_num:integer;
end;
type record2=record
enterprise_id:integer;
enterprise_name:string;
enterprise_city:string;
job_id:integer;
enterprise_tele:integer;
enterprise_more:string;
end;
表recruitment(job_id, job_name, job_needskills, job_duties, job_city, recruit_num);
表enterprise(enterprise_id, enterprise_name, enterprise_city, job_id, enterprise_tele, enterprise_more);
用Apla實(shí)現(xiàn)的核心代碼如下:
var jobInfo:record1,recruitInfo: ResultSet, recruitment: Table(record1), enterprise: Table(record2);
begin
read(jobInfo. job_name);
read(jobInfo. job_ needskills);
read(jobInfo. job_ duties);
read(jobInfo. job_ city);
read(jobInfo. recruit_num);
recruitment := recruitment ∪ jobInfo;
recruitInfo := enterprise ∽ recruitment;
write(recruitInfo);
end.
圖2是整個(gè)系統(tǒng)的實(shí)現(xiàn),左邊是用Apla語(yǔ)言寫的,右邊是自動(dòng)生成的C++代碼,單從代碼量上來(lái)說(shuō),效率提高了一倍多;此外,Apla中含有數(shù)據(jù)庫(kù)自動(dòng)生成工具,不用編寫復(fù)雜的SQL語(yǔ)句,就可以實(shí)現(xiàn)復(fù)雜SQL語(yǔ)句的功能,如此就更加提高了程序的開發(fā)效率。
4 結(jié)束語(yǔ)
本文利用PAR平臺(tái)來(lái)開發(fā)軟件外包實(shí)訓(xùn)例子,用Radl語(yǔ)言描述需求分析和對(duì)功能點(diǎn)的設(shè)計(jì),主要是克服自然語(yǔ)言的二義性,更好地用Apla來(lái)實(shí)現(xiàn),降低文化差異帶來(lái)的溝通困擾,以及保護(hù)企業(yè)的核心競(jìng)爭(zhēng)力,在編碼階段通過(guò)內(nèi)置的程序自動(dòng)生成工具可有效提高開發(fā)效率,并且在利用PAR平臺(tái)開發(fā)時(shí),使用簡(jiǎn)單的關(guān)系代數(shù)語(yǔ)言可實(shí)現(xiàn)復(fù)雜的標(biāo)準(zhǔn)SQL語(yǔ)句的功能。PAR平臺(tái)的不足之處是不能開發(fā)界面,它注重的是軟件核心程序的快速實(shí)現(xiàn),因此發(fā)揮PAR平臺(tái)的長(zhǎng)處來(lái)協(xié)助開發(fā)外包軟件,可以很好地提高軟件的生產(chǎn)效率。
注釋
① Xue Jinyun. A Unified Approach for Developing Efficient Algorithmic Programs. Journal of Computer Science and Technologies, 1997.12(4): 314-329.
② 薛錦云.新型軟件開發(fā)方法PAR及其支撐平臺(tái).江西師范大學(xué)省高性能計(jì)算技術(shù)重點(diǎn)實(shí)驗(yàn)室技術(shù)報(bào)告,2005.8.
③ 石海鶴,薛錦云.基于PAR的算法形式化開發(fā).計(jì)算機(jī)學(xué)報(bào),2009.5.
④ 楊波.一種新型程序設(shè)計(jì)范型概述.計(jì)算機(jī)工程及應(yīng)用,2009.
⑤ 賴勇.Apla到C++自動(dòng)程序轉(zhuǎn)換系統(tǒng)的研制.江西師范大學(xué)碩士學(xué)位論文,2002.
⑥ 石海鶴.支持泛型程序設(shè)計(jì)的Apla—Java自動(dòng)程序轉(zhuǎn)換系統(tǒng).江西師范大學(xué)碩士學(xué)位論文,2004.