國內應用軟件開發管理的探討
雷劍文 曹衛華
隨著行業生產的擴大和提高,對企業運作的管理和效率的要求也在不斷提高。一個好的適合企業管理的應用軟件可以給企業帶來成本,人力等資源的大大減低,從而為企業帶來經濟效益。而企業對應用軟件的需求又帶來一種局面,即企業不愿為接受外面已有的應用軟件來改變自己已經成型的管理方式,又確實需要進一步借助電腦的應用來提高企業的管理水平。于是企業根據自己的管理需要來開發應用軟件,一旦把軟件開發局限于企業內部,開發出來的應用軟件質量必然受到程序員的水平和經驗所限。怎么讓企業利用企業內部已有程序員來更好地為企業開發性能好的應用軟件呢?以下我們將從企業應用軟件開發管理的角度加以探討。
一、應用軟件開發的主體程序員
應用軟件發展到今天,已積累了大量好的經驗值得我們學習,這里就不再贅述。由于國內企業應用軟件開發程序員的水平高低不同,在這種情形下開發質量和穩定性較好的企業應用軟件是比較困難的,怎樣盡可能地使應用軟件開發的數量和質量不受程序員技術差異的影響呢?當然不需要每一個參與該應用軟件開發的程序員都具備了各項能力以后才去完成,只需系統員具備解決技術難題的能力,合理分配工作來完成。技術在進步,人類也在進步,通過完成具體工作來不斷地提高各個成員的素質,在技術提高的同時,提高技術實施的水平。
例如:先進的企業生產線在沒有飽和的情況下,產量和生產力會隨著工人(技術水平相似)數增加而呈顯著正值增加。其簡單的數學圖形可用圖1表示。
在面向對象編程的第四代語言廣泛應用的今天,在企業現有程序員的基礎上,完全可以通過改進一些應用軟件開發的管理方法來提高企業應用軟件的開發能力。下面是我們通過實踐而產生的一些觀點,拿出來和同行們探討一下。
讓我們簡單地假設把這種企業應用軟件開發方法同生產線加工生產模式作一比較,如下圖所示:
工廠生產線作業 企業應用軟件開發作業
開始 開始
流水線設計 需求分析
流水線安裝 信息流分析
系統員 流水線調試 數據庫設計
流水線運行 應用軟件開發分析
流水線維護 各種規范的定義
對象類設計及再用性封裝
簡單作業培訓 各種定義熟悉
程序員 生產線上實習已定義的對象類使用了解
組裝加工產品各種重復工作的完成
規范定義標準檢查
系統員 質量檢驗和控制論 模塊運行檢查
整體品質控制檢查
程序員 包裝完成 系統編譯運行
完成 投入使用
可以看出,一般的先進生產線,若在非飽和狀態生產能力會隨著員工的增加而正向線性增加。在此員工一般不需要特別培訓,即一個在該生產線上工作五年的員工和一個工作一個月的員工的工作能力相差無幾,因為他們的工作只是在生產線上加工,生產線的維護和改造則由技術工程人員完成,再業看看企業應用軟件開發的管理方法和改進的情形。
二、企業應用軟件開發的內部調節管理
在企業內部軟件開發的數量和質量與程序員數量會是一個怎樣的關系呢?這里假設一個各方面知識和能力都合格的程序員值數為1,單方面知識和能力合格值數0.5,那么我們可以為企業軟件開發情況做一個分析:
1、理想情況為軟件開發的數量和質量隨著值數為1的程序員的數量變化而成正比變化:
1=1
1+1=2
1+1+1=3
1+1+1+1=4
…
1+1+…+1=n
這種情況解釋為真空,只可能出現在一般的專業軟件開發公司。在企業內部我們就不必過多分析。
2.一般情況為軟件開發的數量和質量隨著值數0.5的程序員的數量變化而成正比變化:
0.5=0.5
0.5+0.5<1
0.5+…+0.5=1
這種情況在企業應用軟件開發中較為普遍,如果值數為0.5的程序員的知識領域是互補的,又是較為理想的,有可能在積級配合下達到甚至超過值數為1的程序員所完成的工作。如果他們的知識領域是相同的,又為這種情況下的最差組合,完成的軟件數量和質量就達不到企業發展的要求。
3.較差情況為軟件開發的數量和質量隨著值數為小于0.5的程序員的數量增加而幾乎不發生變化:
0.4=0.4
0.4+0.3=0.4
0.4+…+0.4=0.5
這種情況在企業應用軟件發展初期較為普遍,即使值數小于0.5的程序員的知識領域是互補的,而且是在理想的積級配合下,達到甚至超過值數為1的程序員所完成的工作的可能性也是極小的。如果他們的知識領域是相同的,又為這種情況的最差組合,完成的軟件是列加遠遠達不到企業發展的要求。
4.經濟而又適合企業的組合(為現代企業所接納)是必須有一名值數為1的系統分析員,加上值數低的程序員組合。怎樣更好地發揮這種組合的效率,是我們議論的主題。
從圖2可以看出,一個企業的軟件開發程序員的值數(完成編程技術難度)高低各不相同,這是實際情況。當然我們這時是從某一個時刻靜止的角度看去,隨著程序員值數的增加我們以下的觀點仍然成立。如果程序開發過程中的工作安排是根據各人的實際情況合理分配的,那么整個開發過程基本上會按計劃逐步完成,否則會出現許多方面的問題,影響整個計劃實現的進度,怎親才算合理呢?我們知道應有軟件發展到今天,其開發過程已是一個有計劃的技術性團體合作的過程,在對各個程序員技術能力要標的同時,對整個開發團體的協同作戰能力也是一個考驗。面向對象式編程為這種團體工程提供優質保障,從管理的角度,在圖2的基礎上我們增加了一個企業程序員在軟件開發時所應完成的技術難度線。如圖3所示。
由于應用軟件的開發是一個技術要求較高的工作,如圖3所示,很明顯如果把一些技術難度系數高于某些程序員值數的工作安排給他們,必然會使整個計劃的實施受到他們工作完成的質量和數量的影響,從而使計劃失去意義。怎樣解決由于技術難度的分配帶來的問題?傳統的方法是著力于對那些值數較低的程序員進行培訓,提高他們完成開發軟件技術難度所需的值數。我們知道這是需要大量時間、精力和資金作保障的。同時由于人員日趨變動的社會經濟的發展,企業能否認可和等待,其本身就使這種方法的實效大打折扣。我們找到了另外一種可行的方法,那就是說既然技術難度不能統一分配,我們把一般程序員所需完成工作的技術難度線降低,而把系統分析員的技術難度線增高,如圖4所示。
圖4所示的管理實施效果已在插圖4企業實施并達到。它不僅使得每個一般程序員能夠按計劃保質保量地完成任務,而且使得企業應用軟件的開發能夠快速有效地進行(基本上保持現狀)。當然其中的關鍵是系統分析員完成技術難度大的工作,他要完成技術核心和質量控制的工作。這在面向對象式編程的現在較容易實施。就像開發工個軟件提供的系統對象一樣,一些適合企業應用的再用性較強的自定久對象和模塊由系統分析員完成并提供給一般的程序員來使用。這不僅達到降低他們工作的技術難度,而且為企業應用統一的規范性作出了定義。不僅使得應用軟件的質量和穩定性得到保障,而且使軟件的維護變得更為簡單和容易。這種方法很好地解決了企業應用軟件開發在高速發展變化的情形下的實施。如果這種方法能夠有效實施,就會使得企業應用軟件的開發走上良性循環的軌道。雖然程序員完成的質術難度較低的工作,但是他閃可置身于整個交互工程之中,學習到的卻是多方面的知識,不難想象在這種工程循環完成之中得來的能力提高是極有價值的。這種方法在我們企業中運用并取得實效。但是這種方法也需進一步完善,如很明顯的,其中某些值數較高的程序員的資源和時間未能得到較好的利用,而又增加了系統分析員的工作量?梢詫⒁恍┘夹g難度大的工作分配給那些值數較高的程序員去完成(但是一定要注意規范性和一致性),如圖5所示。
可以看出,對于不同值數的程序員,他們工作的質量和數量的標準的高低是不同的。這樣使得工作的安排能根據個人的值數各盡所能地進行,人盡其才地工作使得整個工作計劃的圓滿完成變為可能。該圖中的曲線是動態的,也就是各個時期個人的值數是不同的,值數增長幅度也是不同的,所以曲線會隨著時間的推移不斷地向上移動。這就要求客觀正確地定位各個時期各個程序員的值數,以動態地調整最佳曲線的變化。
三、在實際工作中從應用軟件開發管理角度來看用這種管理方法達到其預計效果的幾個方面
1.應用軟件的開發應該是規范的,使得應用軟件開工作能夠很容易地被別人接手和修改。由于開發出的軟件是依照一定規則的對象組合,所以相當于符合標準,而只要是群體開發軟件,標準又是非常重要的,標準其實在應用軟件開發的程序員之間起到了相互溝通的橋梁作用。
2.由于規范性很強,應用軟件開發的關鍵就落到了設計規范化的對象類上,如果擁有優良的對象類(就像工廠擁有了先進的生產線)來繼承和繁衍,軟件開發的技術難度就可降低,從而使得不同層次的軟件開發程序員都能很快地投入工作,就像工廠生產線新上崗的工人一樣。
3.軟件開發的生產力與程序員是成正向線性變化的。怎樣可以做到呢?因為技術難題都由系統分析員來解決完成,使得技術要求水平降低,一般程序員做一些重復、再用、繼承、組合等技術難度較低的工作,使得他們的工作效率大大增高,從而使得整個企業應用軟件開發生產力大為增高。例圖6所示。
事實上我們只不過把一些問題具體化、對象化、關鍵的事情還是要由經驗豐富的人員來做。比如對數據庫信息的SAVE、DELETE、INSERT等的操作完整性(無論從服務器數據庫完整性約束還是客戶端應用程序的完整性實現)工作。而增加一般程序員的數量從而達到增加應用軟件開發的生產力,不論從經濟上還是從管理上都是值得的。而通過一個又一個工作實踐來提高程序員的技術水平,隨之會問下一個起點邁進。
四、企業軟件開發管理中應注意的幾個方面
在面向對象編程的第四代語言中,可以充分利用對象的繼承性、封裝性、多態性來提高軟件開發效率,使得企業電腦應用為生產和管理服務。這里簡單論述一下。
強再用性
我們知道對象的繼承性允許新的對象類從已建立的對象類中通過繼承得到,繼承所有屬性、變量、函數、結構、控制和程序。在祖先對象類基礎上的覆蓋或擴展,不但能提高軟件開發效率,而且使得對象的應用保持一致性、減少出錯或調試維護變得容易簡單。例如:在POWERBUILD中,因為窗口、菜單、用戶對象均可繼承,一個多人合作的軟件開發就變得輕松容易許多,一些祖先對象的創建維護和一些理難度大的問題出值數較高的程序員來完成,以保證質量性能,那些大量重復的、較為基本的工作則由一般程序員來完成?筛鶕䝼人的情況,調整出個人的最佳效率點。所以說,開發出好的祖先對象和建立良好的思維方式是企業軟件開發的成敗關鍵。
好完整性
在客戶/服務器系統應用中,數據及數據處理完整性是保證信息準確無誤的重要環節。所以在軟件開發中對這一點的邏輯要求是最嚴密的。例如,在一個事務處理過程中,可能對多個表進行修改。如果在中間發生錯誤時,應該放棄整個處理而不是其中的一個過程,返回到開始的狀態以保證操作的完整性,從而使得數據及數據處理的完整性得到保證。
1.運算或計算燈錯誤。這類錯誤較為分散,不易檢錯和修改,應盡可能把計算的處理過程采用對象函數處理。
2.局部變量。盡可能地多使用局部變量。這樣一來把一些事物的處理過程盡量局部化,使得軟件的檢錯和修復變得更為容易。
可擴展性
一個事物是不斷變化的,對這些事物統計和管理的電腦軟件也應該是可以隨之變化。因此一個好的軟件程序的可擴展也是很重要的一個方面,也要加以分析和應用。例如:如果是對人類性別的分析,因為它的變化是固定的,非男即女。所以我們用IF THEN語句來規范。如果是對變化狀態多于兩種且狀態是固定的事物,選擇IF THEN或CASE就看個人的所好和專長。如果是對變化狀態有不斷增加的新狀態出現的事物,我們應以CASE語句來加以規范,以便于以后的擴展。
易維護性
因為使用了對象的繼承性,對祖先對象的修改直接影響到其繼承對象,使得軟件程序的維護性得到一定程序的提高,但相同的語法和邏輯規定又使得多人合作開發的軟件和維護性得到保證,不會因為各自特有的思想和作風而受到限制,也為相互的提高彌補提供了可能性。
同樣,因為使用了對象的封裝性,即把數據和程序封裝在對象中,使之成為對象類的一部分,不但屏蔽了對象編程的復雜難度,又提高了程序代碼的質量而使得維護容易。因為修改被封裝在對象上的程序不會影響其他的對象。
因為應用軟件的開發不是由一個人而是由一個可能變化的群體合作完成,即使同一個人在不同的時期也會有不同的風格,所以保持高度的一致性是群體合作的關鍵之一,也是修復和改善的保障。
那些經常變化、需要集中管理和控制的運算、重復調用又要求一定運行效率的企業規則盡可能地放在服務器端(通過觸發器、存儲過程)。隨著企業規則的不斷變化而需要作的修改和維護更為容易,而且它有高的運行效率,使得運算易于管理和控制。因為它的變動邏輯與應用軟件是相互獨立的。
例如,企業工資管理中的獎金計算方法(根據崗位、出勤等規定計算個人獎金的企業規則),它可能隨著企業經營狀況的變化而變化,它的實現要放在服務器端(即數據庫段)。
結 論
本文提出了一些企業應用軟件開發管理上的想法和觀點,并在實際工作中加以應用,而且取得較好的實效。其思想不難理解,就像一些系統軟件現在提供的優良的開發環一樣(系統提供的對象、函數等)。我們通過不斷建立和積累自定義對象及其類業不斷改善企業內部應用軟件的開發環境,加快了企業應用軟件的開發進程。本文中不足之處,歡迎批評指正。
文章來源于領測軟件測試網 http://www.kjueaiud.com/