徐長(zhǎng)梅,楊鳳年,尹俊文
(1.長(zhǎng)沙學(xué)院教務(wù)處,湖南 長(zhǎng)沙 410022; 2. 湖南格凡安信科技有限公司,湖南 長(zhǎng)沙 410008)
六十年代的軟件危機(jī),引起計(jì)算機(jī)領(lǐng)域?qū)浖母叨汝P(guān)注,“軟件工程”概念應(yīng)運(yùn)而生,繼而引出了大量與工程相關(guān)的管理問(wèn)題.在軟件項(xiàng)目中,質(zhì)量、成本和時(shí)間形成了管理三要素[1],所有的管理決策以及后續(xù)的管理活動(dòng)都需要對(duì)三要素進(jìn)行估計(jì)和測(cè)量.
特別是在軟件開(kāi)發(fā)項(xiàng)目中,軟件開(kāi)發(fā)成本主要取決于人力成本,而人力成本又取決于軟件項(xiàng)目周期——時(shí)間,粗略地說(shuō)人力成本等于人數(shù)*人均工資*時(shí)間,在這個(gè)公式中人數(shù)*人均工資*時(shí)間稱為軟件開(kāi)發(fā)工作量.
為了測(cè)算軟件開(kāi)發(fā)工作量,人們發(fā)明了模型法、專家法和類比法等諸多方法,在這些方法中,核心的因素只有一個(gè)——軟件規(guī)模.軟件規(guī)模的度量最直觀的方法是代碼行(LOC)[2],但是代碼行度量方法存在兩個(gè)固有的缺點(diǎn),其一是度量標(biāo)準(zhǔn)不穩(wěn)定——軟件代碼行取決于編程人員的經(jīng)驗(yàn)、技術(shù)水平和編程語(yǔ)言;其二是度量標(biāo)準(zhǔn)可能不存在——代碼只有在軟件開(kāi)發(fā)完成時(shí)才是確定的,在軟件項(xiàng)目立項(xiàng)、需求分析和設(shè)計(jì)階段,代碼并不存在.
20世紀(jì)70年代,IBM公司的Allan Albrecht引入了軟件功能規(guī)范中的功能點(diǎn)分析(FPA)思想[3],提出了一種對(duì)軟件功能“點(diǎn)”計(jì)數(shù)模型,從而擺脫了代碼行方法對(duì)軟件開(kāi)發(fā)技術(shù)的依賴.Albrecht的模型需要從軟件功能規(guī)格說(shuō)明中識(shí)別出5種類型的組件:輸入、輸出、查詢、邏輯內(nèi)部文件和邏輯外部文件,分別對(duì)這五個(gè)組件進(jìn)行計(jì)數(shù)并計(jì)算這些計(jì)數(shù)的加權(quán)和,從而得到軟件的未調(diào)整功能點(diǎn),最后根據(jù)軟件的其他因子調(diào)整這個(gè)加權(quán)和,最終生成軟件功能規(guī)模值.Albrecht模型最終形成了軟件功能規(guī)模度量方法IFPUG[4].
IFPUG方法出現(xiàn)之后,在20世紀(jì)80年代到90年代初期,正值計(jì)算機(jī)在各行業(yè)得到廣泛應(yīng)用的時(shí)期,各類管理信息系統(tǒng)(MIS)層出不窮,IFPUG方法在軟件項(xiàng)目管理中受到推崇.但是由于軟件系統(tǒng)逐漸涵蓋更廣泛的領(lǐng)域,對(duì)軟件規(guī)模的度量也拓展到軟件項(xiàng)目的整個(gè)生命周期,度量人員發(fā)現(xiàn)IFPUG功能規(guī)模度量方法存在若干的問(wèn)題,這其中包括IFPUG方法不適用于實(shí)時(shí)系統(tǒng)度量,也不能滿足軟件項(xiàng)目早期的管理要求,甚至在軟件功能復(fù)用中存在重復(fù)計(jì)數(shù)的缺陷.雖然在此期間Albrecht模型衍生出了Mk-II度量方法,依然無(wú)法掩蓋功能規(guī)模度量中存在的諸多問(wèn)題.
在20世紀(jì)90年代后期,軟件項(xiàng)目管理對(duì)功能規(guī)模度量方法(FSM)采取了審慎的態(tài)度[5],也催生了更加通用的功能規(guī)模度量方法——全功能點(diǎn)(FFP)方法.新一代FSM以COSMIC[6]為代表,包括FiSMA[7]、NESMA[8]等各種ISO標(biāo)準(zhǔn),它們對(duì)軟件特性進(jìn)行了一般化建模,采用了模型+應(yīng)用指南的模式來(lái)指導(dǎo)軟件規(guī)模度量實(shí)踐,分別就實(shí)時(shí)系統(tǒng)、GUI系統(tǒng)、Web系統(tǒng)等提出了自己的解決方案.
盡管新一代FSM對(duì)GUI系統(tǒng)、Web系統(tǒng)等多層體系結(jié)構(gòu)系統(tǒng)給出了答案,但是這個(gè)答案并不完全,本文就COSMIC、FiSMA、NESMA在軟件規(guī)模度量實(shí)踐中存在的問(wèn)題進(jìn)行分析,討論了軟件開(kāi)發(fā)的分層問(wèn)題以及軟件分層對(duì)功能點(diǎn)重復(fù)計(jì)數(shù)的影響,并提出了一些減少計(jì)數(shù)重復(fù)的若干措施.
分層是解決復(fù)雜軟件系統(tǒng)問(wèn)題的最常見(jiàn)技術(shù)[9].分層技術(shù)至少有兩個(gè)不可忽視的優(yōu)點(diǎn),一個(gè)是重用,下層軟件功能可以在上層軟件中重復(fù)使用,降低了軟件復(fù)雜度,也減少了質(zhì)量風(fēng)險(xiǎn);第二個(gè)優(yōu)點(diǎn)是封裝,下層軟件可以抹平再下層系統(tǒng)的差異性,為上層軟件提供統(tǒng)一的功能接口,從而提高了上層軟件的內(nèi)聚性.
IFPUG FPA和COSMIC FFP所采用的軟件模型,抽取目標(biāo)軟件(待度量軟件)與外部環(huán)境之間的交互特性,通過(guò)度量目標(biāo)軟件與外部環(huán)境的交互復(fù)雜度來(lái)計(jì)算軟件功能規(guī)模,因此在FSM中,劃定目標(biāo)軟件的外部邊界是至關(guān)重要的.目標(biāo)軟件的外部邊界由人機(jī)接口、軟硬件接口和軟件之間的接口組成.如果目標(biāo)軟件處于一個(gè)復(fù)雜軟件系統(tǒng)的某一層次,那么目標(biāo)軟件的外部環(huán)境自然就包括它的上層軟件和下層軟件.但是如果目標(biāo)軟件本身是一個(gè)分層系統(tǒng),那么在上下層中功能之間的交互該如何度量呢?
Client/Server模型是典型的分層系統(tǒng),無(wú)論是GUI系統(tǒng)還是Web系統(tǒng)都采用了Client/Server模型.Client與Server的分離隔離了人機(jī)交互邏輯和業(yè)務(wù)處理邏輯,但是Client與Server之間的應(yīng)用程序邊界具有獨(dú)特的特性,因此可能會(huì)發(fā)生功能重復(fù).
對(duì)于使用IFPUG的度量人員來(lái)說(shuō),是否應(yīng)該重復(fù)計(jì)算邏輯事務(wù),從而在Client端復(fù)制Server系統(tǒng)事務(wù)?TOTALMETRCS認(rèn)為,前后端是由兩個(gè)團(tuán)隊(duì)獨(dú)立完成的,因此前后端對(duì)同一事務(wù)會(huì)實(shí)現(xiàn)各自自己的功能,為完成同一事務(wù)所實(shí)現(xiàn)的功能交互應(yīng)該獨(dú)立計(jì)算.而且“由于應(yīng)用程序邊界的定位,Client系統(tǒng)和Server系統(tǒng)對(duì)功能的重復(fù)計(jì)算已被視為一種務(wù)實(shí)的解決方案”[10].
COSMIC FFP使用“層(Layer)”概念來(lái)解決多層軟件的度量問(wèn)題,試圖度量多層軟件中每個(gè)獨(dú)立層次的規(guī)模.COSMIC FFP不再拘泥于計(jì)算整個(gè)軟件的規(guī)模度量,而是采用更靈活的度量方式,可以給出針對(duì)每個(gè)層次的度量結(jié)果.
FiSMA則給出了度量多層體系結(jié)構(gòu)軟件的具體指南,就“用戶接口-業(yè)務(wù)邏輯-數(shù)據(jù)訪問(wèn)”這一典型的三層結(jié)構(gòu)給出了明確的度量規(guī)則(集合),提高了FSM的一致性[11].
綜上所述,多層軟件系統(tǒng)始終是FSM特別關(guān)注的度量對(duì)象和實(shí)施對(duì)象.但是這樣的解決方案是不完整的.
新一代FSM力圖建立一個(gè)與技術(shù)無(wú)關(guān)的度量模型,主要目的是想實(shí)現(xiàn)全生命周期的軟件規(guī)模度量.軟件分層是體系結(jié)構(gòu)問(wèn)題,主要出現(xiàn)在軟件設(shè)計(jì)階段.上述的解決方案仍然不能解決軟件開(kāi)發(fā)早期階段的問(wèn)題,特別是在軟件項(xiàng)目立項(xiàng)和需求分析階段.
軟件層次的劃分在很多的系統(tǒng)中并不明顯,而是在分析和設(shè)計(jì)中逐步演化而來(lái)的[12],要求先劃分層次,然后再進(jìn)行度量,是非常困難的.為了解決一個(gè)難題,有可能會(huì)引入一個(gè)更困難的工作,對(duì)于功能管理來(lái)說(shuō)是不可以接受的.
課程注冊(cè)系統(tǒng)[13]和網(wǎng)關(guān)系統(tǒng)[14]是COSMIC官方提供的兩個(gè)基準(zhǔn)案例,目的是通過(guò)對(duì)這兩個(gè)案例的分析指導(dǎo)具體的FSM實(shí)踐.
課程注冊(cè)系統(tǒng)一共有登錄、添加教授、修改教授、刪除教授、選擇要教的課程、新增學(xué)生、修改學(xué)生、刪除學(xué)生、創(chuàng)建課程表、修改課程表、刪除課程表、關(guān)閉注冊(cè)、提交成績(jī)、查看成績(jī)報(bào)告卡等14個(gè)功能過(guò)程,總計(jì)功能點(diǎn)為106Cfps.
網(wǎng)關(guān)系統(tǒng)則包含登錄交易、更改密碼、注銷(xiāo)交易、定貨、列出帳戶訂單、訂單帳戶對(duì)帳單、顯示語(yǔ)句摘要、臨時(shí)目錄命令、凍結(jié)登錄ID、注冊(cè)產(chǎn)品類別、刪除產(chǎn)品類別、產(chǎn)品類別類別、用戶產(chǎn)品類別、獲取帳戶余額、獲取帳號(hào)序列號(hào)、獲取最近的N筆交易、獲取產(chǎn)品類別的序列號(hào)等17個(gè)功能過(guò)程,總計(jì)功能點(diǎn)為108Cfps.
在課程注冊(cè)系統(tǒng)中,查詢教授、學(xué)生和課程表是在刪除和修改教授、學(xué)生和課程表等功能過(guò)程中必須完成的操作.網(wǎng)關(guān)系統(tǒng)的獲取帳戶余額、獲取帳號(hào)序列號(hào)、獲取最近的N筆交易、獲取產(chǎn)品類別的序列號(hào)等功能過(guò)程被其他的功能過(guò)程調(diào)用.
在COSMIC FFP的參考文檔中,他們對(duì)這些存在公共關(guān)系的功能過(guò)程或者操作序列采取了“視而不見(jiàn)”的“鴕鳥(niǎo)”策略.這遵循了COSMIC FFP的一般原則,這樣的功能過(guò)程或者操作序列發(fā)生在層(軟件)內(nèi)部,不再識(shí)別內(nèi)部的調(diào)用關(guān)系.
但是我們認(rèn)為,這樣的功能的功能過(guò)程或者操作序列肯定會(huì)被程序設(shè)計(jì)人員識(shí)別出來(lái),至少形成一個(gè)公共的庫(kù)(組件)提供給其他人員重用.值得爭(zhēng)論的是,這樣的庫(kù)(組件)是否是技術(shù)無(wú)關(guān)的,畢竟新一代FSM力圖實(shí)現(xiàn)一個(gè)與技術(shù)無(wú)關(guān)的度量方法.但是我們的觀點(diǎn)是,這樣設(shè)計(jì)公共(通用)零配件(組件)的方法與軟件開(kāi)發(fā)技術(shù)無(wú)關(guān),而應(yīng)該是一種工程常識(shí),從生產(chǎn)成本和質(zhì)量控制角度看是一個(gè)必須的管理措施.這些公共組件雖然不能稱為完全意義的軟件層次,但是確實(shí)在外部環(huán)境和其他功能過(guò)程之間建立一種層次關(guān)系.
為了能夠準(zhǔn)確的將公共操作序列抽象為公共功能過(guò)程,我們遵循以下規(guī)則:
規(guī)則一:任何一層至少包含一個(gè)功能過(guò)程.
規(guī)則二:任何識(shí)別出來(lái)的層次都處于當(dāng)前層的下一層.
規(guī)則三:被調(diào)用的功能過(guò)程被放置于新的下一層中.
在這樣的規(guī)則之下,度量過(guò)程中使用規(guī)則四、規(guī)則五和規(guī)則六識(shí)別重復(fù)的操作序列.
規(guī)則四:抽取的公共操作序列必須滿足功能過(guò)程定義.
規(guī)則五:重復(fù)出現(xiàn)的、并且滿足規(guī)則四的操作序列識(shí)別為功能過(guò)程.
規(guī)則六:將功能過(guò)程中滿足規(guī)則五的操作序列都替換成功能過(guò)程的調(diào)用,即以此Entry和Exit.
增加了新的規(guī)則之后,則形成了兩種不同的度量結(jié)果,如表1和表2.兩個(gè)案例中雖然產(chǎn)生的差異小于10%,但是在并不表明這個(gè)差異可以忽略不計(jì)[13].
我們的方法借鑒了軟件分層技術(shù),識(shí)別出軟件需求中的公共組件,符合工程常識(shí),與COSMIC FFP的常規(guī)差別在于軟件層次的劃分時(shí)機(jī),我們認(rèn)為軟件中的層次劃分不僅存在于軟件設(shè)計(jì)階段,在業(yè)務(wù)分析階段依然可以識(shí)別出軟件層次.
相較于COSMIC FFP的常規(guī)方法,如果需要給出軟件的整體規(guī)模,我們的方法存在著重復(fù)度量的問(wèn)題,為此,我們也借鑒了FiSMA的實(shí)踐指南,采用雙向識(shí)別、單向計(jì)數(shù)的規(guī)則,這樣就可以較好的去除重復(fù)的計(jì)數(shù).
規(guī)則七:度量軟件的整體規(guī)模時(shí),如果包含多個(gè)層次,那么上層功能過(guò)程僅僅對(duì)功能過(guò)程中調(diào)用下層功能過(guò)程的Exit計(jì)數(shù),不對(duì)上層功能過(guò)程調(diào)用下層功能過(guò)程的Entry計(jì)數(shù).下層功能過(guò)程僅僅對(duì)Exit計(jì)數(shù),也不對(duì)Entry計(jì)數(shù).
在上述兩個(gè)案例中,我們的最終結(jié)果分別是87Cfps和102Cfps.
長(zhǎng)沙大學(xué)學(xué)報(bào)2019年5期