勾 璇,李丹丹,文 華,石曉婷,馮 楠
(邯鄲凈化設(shè)備研究所,河北邯鄲 056011)
可編程控制器是一種在電氣控制和計算機基礎(chǔ)上開發(fā)的工業(yè)控制裝置,廣泛應(yīng)用于機械生產(chǎn)和自動化控制等領(lǐng)域。目前,應(yīng)用較廣的可編程控制器有西門子、施耐德、歐姆龍、臺達(dá)等品牌。可編程控制器的編程語言繁多,不同品牌編程語言的表達(dá)方式也不相同,主要包括字符表達(dá)方式和圖形符號表達(dá)方式。
GJB 5000A軟件成熟度模型的核心思想:將軟件開發(fā)視為一個過程,并根據(jù)這一原則對軟件開發(fā)和維護進行過程監(jiān)控和研究,以使其更加科學(xué)化和標(biāo)準(zhǔn)化。在GJB 5000A二級實施過程中,項目策劃過程是軟件項目管理的一個重要過程。軟件規(guī)模估算作為項目工作量、成本和進度估算的主要依據(jù),是整個項目范圍管理的關(guān)鍵。
目前,可編程控制器普遍使用梯形圖編程語言。梯形圖編程語言注重邏輯控制,因而對其進行軟件規(guī)模估算時需要考慮的客觀影響因素較多。此外,大多數(shù)控制系統(tǒng)在完成邏輯編碼的同時還需完成對人機交互界面(Human Machine Interaction,HMI)的編碼。由于HMI采用圖形式語言進行編程,其工作量和規(guī)模無法通過代碼行直接估算,這也使軟件精準(zhǔn)化估算變得更為困難。結(jié)合項目實踐,本文主要對3種可編程控制器軟件估算方法(直接工作量估算法、代碼行估算法和功能點估算法)進行研究,結(jié)合實例對3種方法進行詳細(xì)的估算說明,并對估算結(jié)果進行對比分析。
可編程控制器大多采用梯形圖語言編程,該語言不僅在代碼上沿用電氣工程師熟悉的繼電器控制原理圖的方式,還提供許多簡單而又實用的指令。梯形圖鎖存邏輯編程代碼示例見圖1。

圖1 梯形圖鎖存邏輯編程代碼示例
直接工作量估算方法是指基于工作分解結(jié)構(gòu)的工作量估算方法,主要包括4點實施步驟:1)進行工作分解結(jié)構(gòu)(Work Breakdown Structure,WBS)分解,將整個項目的任務(wù)進行分解,分解粒度需要能進行獨立估算;2)參考類似歷史項目數(shù)據(jù),采用類比法或?qū)<曳ü烙嬅款惢顒拥墓ぷ髁浚?)匯總得到項目的總工作量;4)根據(jù)工作量進行計劃安排。
某典型溫度控制系統(tǒng)見圖2,采用加熱器加熱容器設(shè)備,采用溫度傳感器測量設(shè)備的溫度,采用可編程控制器采集傳感器的數(shù)據(jù),采用HMI顯示溫度值,在此基礎(chǔ)之上進行人機交互。當(dāng)設(shè)備溫度到達(dá)上限值時,可編程控制器發(fā)出斷開指令,加熱器停止加熱;當(dāng)溫度達(dá)到下限值時,可編程控制器發(fā)出閉合指令,加熱器啟動加熱。

圖2 溫度控制系統(tǒng)示例圖
WBS分解結(jié)果見圖3,工作量的度量單位為人·時。根據(jù)以往相似軟件的經(jīng)驗,在可編程控制器中1個模擬量輸入(Analog Input,AI)功能設(shè)計的工作量約為0.5人·時;2個數(shù)字量輸出(Digital Output,DO)功能設(shè)計的工作量約為1.0人·時;可編程控制器中完成1個變量在人機界面顯示的工作量約為1.0人·時;在HMI中完成1個變量的圖像設(shè)計工作量約為1.5人·時。因此,總計工作量為4.0人·時。

圖3 控制系統(tǒng)WBS分解結(jié)果
代碼行估算法是最早用于規(guī)模測量的方法,其核心是從開發(fā)者的技術(shù)角度對軟件進行估算。在估算時,該方法對功能分解的詳細(xì)程序要求較高。由于代碼行數(shù)在很大程度上依賴于所用的編程語言和個人的編程風(fēng)格,故在項目需求不穩(wěn)定、設(shè)計不成熟時,代碼行估算法很難準(zhǔn)確地估算代碼量,且其對代碼行也沒有公認(rèn)的定義和標(biāo)準(zhǔn)。
在使用代碼行估算法進行估算時,首先要把項目劃分為若干個功能模塊,再分別計算每個功能模塊的代碼長度,最后計算項目的總代碼長度。此外,基于生產(chǎn)率參數(shù)可將代碼規(guī)模轉(zhuǎn)換為工作量。目前,在估算時默認(rèn)以C語言的實際代碼行數(shù)為準(zhǔn)則進行規(guī)模統(tǒng)計。由于大多數(shù)可編程控制器不支持直接C語言編程,故需要根據(jù)歷史經(jīng)驗按比例進行換算。
根據(jù)歷史項目經(jīng)驗,梯形圖-C語言轉(zhuǎn)換系數(shù)為0.125,即1條梯形圖指令程序?qū)?yīng)8行C語言代碼,直接工作量估計結(jié)果見表1。

表1 直接工作量估計結(jié)果
基于功能點的工作量估算法從用戶的角度來度量軟件,該方法與實現(xiàn)技術(shù)和語言無關(guān),在項目需求明確時估算的準(zhǔn)確性較高。功能點估算的主要方法有3種:IFPUG法、MarkⅡ法和COSMIC法。其中,IFPUG估算法應(yīng)用范圍最廣,且適用于所有類型的軟件。
功能點估算的主要步驟包括:確定項目類型、識別項目范圍、分析未調(diào)整的功能點、計算交付功能點數(shù)。估算的內(nèi)容包括外部接口數(shù)(External Interface File,EIF)、內(nèi)部邏輯數(shù)(Internal Logical File,ILF)、外部輸出數(shù)(External Output,EO)、外部輸入數(shù)(External Input,EI),以及外部查詢數(shù)(External Query,EQ)。其中,事務(wù)類包括EI、EO、EQ,數(shù)據(jù)類包括ILF和EIF。
依據(jù)某一功能單元涉及的數(shù)據(jù)元素類型數(shù)(Data Element Types,DETs)、記錄元素類型數(shù)(Record Element Types,RETs)、引用文件類型數(shù)(File Type Referenced,F(xiàn)TRs),對照復(fù)雜度矩陣確定該功能單元的功能復(fù)雜度所屬類型。其中,DETs是指在一個ILF或EIF內(nèi)用戶可認(rèn)知的、唯一的、非重復(fù)的字段。RETs是指在一個ILF或EIF內(nèi)用戶可認(rèn)知的數(shù)據(jù)元素子集。
為更加詳細(xì)地了解功能點方法的估算內(nèi)容,在某典型溫度控制系統(tǒng)實例的原有基礎(chǔ)上,增加用戶對歷史數(shù)據(jù)的查詢功能。溫度控制系統(tǒng)的功能點估算結(jié)果見表2。

表2 溫度控制系統(tǒng)的功能點估算結(jié)果
調(diào)整后的功能點數(shù)(Adjusted Function Points,AFP)的計算公式為

式中:AF為影響因子,可根據(jù)行業(yè)數(shù)據(jù)和經(jīng)驗值進行適當(dāng)取值。本例中,AF為0.89,調(diào)整后的功能點數(shù)為45。
以提高軟件的質(zhì)量和可靠性為出發(fā)點,本文分別介紹了直接工作量估算法、代碼行估算法和功能點估算法的實施步驟和估算特點,并依據(jù)實例進行了對比分析。直接工作量估算法依賴歷史經(jīng)驗數(shù)據(jù),在評估量化時無法提供科學(xué)支撐證據(jù)。代碼行估算方法簡單直觀,但目前沒有度量標(biāo)準(zhǔn),不同人員的估算結(jié)果差異較大,不利于項目管理。功能點估算法基于用戶需求建立量化指標(biāo),對于項目估算相對客觀,但需設(shè)置較多的影響因子數(shù)值。
總的來說,為提高軟件估算的準(zhǔn)確率,軟件項目管理人員應(yīng)從軟件本身的特性出發(fā),兼顧項目的復(fù)雜度、重要度和進度要求等指標(biāo)進行綜合考慮。