企業內部軟件開發的特點和模式

在現代企業中,信息系統已經越來越成爲企業管理的重要支撐。因應各種業務需求對軟件系統的要求,大多數企業都形式不同地建立了自己的軟件開發團隊,視企業的規模從一兩個兼顧支援網絡硬件、進行簡單開發的人員到大規模的專業軟件開發組織都有。通常說來,大多數企業內部開發團隊是企業內部輔助主營業務的、非贏利性的組織。這類帶有普遍性的企業內部軟件團隊是本文的關注點。
和專業軟件公司開發過程一樣,企業內部軟件開發也涉及對過程、工具、質量、人員等各個層面的管理問題,所以目前成熟的或者正在探討中的各種軟件開發模式都可以被企業內部軟件開發借鑑和參照。但是,在服務、非贏利的前提下,企業內部軟件開發的各方面都有有別於專業軟件公司的特點。目前關於企業內部軟件開發模式和管理的探討比較少,很多人,甚至企業內部開發團隊的成員本身,都沒有明確企業內部軟件開發和專業的軟件公司開發工作的不同,在項目管理、文檔控制等方面經常教條的模仿專業軟件公司的開發模式。這種認識上的模糊性削弱了企業內部軟件開發團隊在軟件的生命週期中本來具有的優勢。
1     企業內部軟件開發的特點
企業內部軟件開發有什麼值得注意的特點呢?以下通過在幾方面和專業軟件公司對照的方法來進行一些分析:
1.1    軟件開發團隊和用戶的利益關係。
專業軟件開發公司和用戶是商業關係,直接目的是銷售產品和服務獲得收益,用戶本身的收益和軟件公司不是明確相關的。雖然大部分軟件公司從產品和產業長期發展的角度都把類似“實現客戶價值”這樣的價值觀列爲公司的主要宗旨,但實際操作中很難徹底擺脫商業關係,在開發的各個環節受制於開發費用等商業因素。而企業內部軟件團隊的收益和生存直接和企業聯繫,業績考覈也是和企業目標相聯繫的。這是一個本質的差異。
1.2    軟件開發項目所處的系統環境。
企業的軟件系統往往多樣和複雜的,針對企業的軟件開發項目面對的大多是一個已經存在很多信息子系統的軟件環境。如果由專業軟件公司單獨來定製開發企業軟件,因爲是階段性的參與企業信息系統,所以除非客戶有明確的界定,否則很難設身處地的,從信息系統的整體長遠發展來考慮需求和建立方案。如果專業軟件公司開發的是通用的商業軟件,更不可能預見最終用戶的系統環境。對比之下,企業內部IT部門相對熟悉業務並且要長期經營整個信息系統,所以在每個開發項目中都需要從全局角度和長期角度來考慮項目的必要性和方案細節,要考慮和已有系統的集成。
1.3    開發過程中和直接用戶的交互關係,
企業內部IT部門和用戶部門是同一組織內不同職能機構的關係,企業內部軟件人員和直接用戶是同事關係。和專業軟件公司比起來,這一點又引起很多用戶交互方面的重要的差異。
1.3.1      溝通方式和溝通效率。
內部軟件團隊可以方便的召集用戶、靈活的協調時間、有豐富的途徑和平臺來協調各種問題。項目完成後用戶和軟件開發人員仍然會長期共處,可以不斷地交流並對軟件進行改進。而專業軟件公司在和用戶打交道的時候受限於很多商業因素,溝通效率通常遠低於企業內部軟件團隊。
1.3.2      需求分析和需求變更管理。
開發過程中用戶的需求往往是模糊和多變的,除了實際使用環境的不確定因素,用戶對IT的理解和對資料的整理水平不足也是引起需求多變的重要原因。 專業軟件公司雖然有專業的分析人員和方法,但由於商業關係和業務複雜性,常常無法深層次地介入用戶的實際工作層面,進而全面理清那些用戶的需求是合理的,那些是不合理的,那些是可以簡化的,那些是需要加強的….,等等。面對強勢的客戶更是沒辦法從合理的角度對需求進行梳理。爲了控制項目的進度和人力資金投入,軟件公司往往不得不通過成文的方式對需求進行界定。另外出於“專業表現”的要求和商業利益的需要,軟件公司也會有意無意加入一些可能不見得切合實際的需求目標。這樣最終軟件會出現整體或部分偏離實現客戶價值的方向的可能。而在企業內部軟件開發團隊主導的項目中,用戶對項目的需求更強調實用性、方便性和快速見效。用戶對將來需求變化引起的溝通和商業上的麻煩不太擔心。企業內部開發團隊經常可以根據實際業務需要對用戶的要求進行否決和更改,也可以在用戶要求之外增加系統目標。
1.3.3      軟件的測試和交付過程。
企業內部軟件團隊可以方便的從組織上把用戶當作測試團隊的一部分。在確認軟件功能基本完成,沒有根本性缺陷的情況下,可以比較早的當作軟件項目已經的交付。更多的測試可以放在開始使用之後的長期運行過程中進行。專業軟件公司在和用戶配合測試方面則比較複雜,引入用戶、計劃和協調等都沒有企業內部軟件部門容易,交付也要嚴格的多。所以通常軟件公司在測試方面投入的人力和成本要比企業內部軟件團隊多很多。
1.4    軟件開發的規範:
專業軟件公司開發的大多是中大型的、商品化的軟件產品。在設計開發過程中有很多在結構規範、通用性、界面美觀、文檔完備等方面的要求,開發週期也都較長。而企業內部開發大多爲中小型的軟件或者是基於已有大型應用系統的二次開發,注重實效,注重量身定做,注重速度,對文檔和通用性等方面的要求比較靈活。
1.5    其他可能的差異。
企業內部軟件開發團隊的規模通常比專業軟件公司小,組織上的分工不象專業軟件公司那麼完整,各種資質的評估和認證要求也不迫切。
以上這些不同大多是顯而易見的,但是對軟件開發過程的影響卻是根本性的,企業內部軟件開發需要在認清自己定位和處境的情況下,建立更加適合自身及企業利益的軟件開發模式。
2     企業內部軟件開發和敏捷開發思想
有必要提一下近幾年新興起的敏捷開發思想。作爲對一直以來軟件工程各種模式中條塊分割清楚、文檔繁瑣、週期冗長等問題的突破和嘗試,敏捷開發思想近幾年越來越引起軟件開發機構和開發人員的關注。根據敏捷思想創始者們宣佈的敏捷開發宣言,敏捷開發的價值觀和原則如下:
敏捷軟件開發價值觀的表述:
 
人和交互重於過程和工具。
可以工作的軟件重於求全責備的文檔。
客戶協作重於合同談判。
隨時應對變化重於循規蹈矩。
 
敏捷軟件開發的12條原則:
 
對我們而言,最重要的是通過儘早和不斷交付有價值的軟件滿足客戶需要。
我們歡迎需求的變化,即使在開發後期。敏捷過程能夠駕馭變化,保持客戶的競爭優勢。
經常交付可以工作的軟件,從幾星期到幾個月,時間尺度越短越好。
業務人員和開發者應該在整個項目過程中始終朝夕在一起工作。
圍繞鬥志高昂的人進行軟件開發,給開發者提供適宜的環境,滿足他們的需要,並相信他們能夠完成任務。
在開發小組中最有效率也最有效果的信息傳達方式是面對面的交談。
可以工作的軟件是進度的主要度量標準。
敏捷過程提倡可持續開發。出資人、開發人員和用戶應該總是維持不變的節奏。
對卓越技術與良好設計的不斷追求將有助於提高敏捷性。
簡單——儘可能減少工作量的藝術至關重要。
最好的架構、需求和設計都源自自我組織的團隊。
每隔一定時間,團隊都要總結如何更有效率,然後相應地調整自己的行爲。
 
從羅列的這些原則來看,敏捷開發思想強調激發人的主動性和協作,強調去除不必要的文檔和設計,強調順應需求的變化,強調儘快的交付階段成果和持續改進開發。對於專業軟件公司來說,要實踐敏捷思想裏提出的擁抱變化、客戶密切協作、不斷交付等理念,有賴於軟件開發之外的客戶關係處理等工作,有賴於商業元素和客戶價值的平衡,在實踐中要做到並不容易。
相比之下,對照前文提到的企業內部軟件開發的特點,可以看出敏捷開發思想和企業內部軟件開發有着近乎天然的聯繫。事實上很多企業內部軟件開發過程都有意無意的和敏捷開發思想相貼近。但是因爲指導思想上的模糊,使得很多企業內部軟件開發中可以利用的優勢被教條地搬用“規範”過程和標準所限制。相信隨着對軟件開發過程認識的加深,敏捷開發思想會對企業內部軟件開發會帶來越來越大的影響。
敏捷開發只是一種理念,並不是對瀑布或迭代等方法的顛覆,而是一種啓發和演進。對於它的原則不同人有不同理解,實踐起來也有各種不同的模式。目前已經有很多基於敏捷開發思想的方法被提出並經過一定實踐,但都不能作爲標準。總的來說,敏捷開發思想本身仍然是站在專業的、面向客戶的商業化開發環境角度提出的。企業內部軟件開發還需要根據實際情況,參照敏捷開發思想,對各種軟件開發方法進行取捨,摸索更加適合自己的模式。
3     企業內部軟件開發的模式。
企業作爲軟件的直接使用者,實際業務上的變化和管理上的調整變革會頻繁地引起對軟件系統的變更要求。企業內部軟件團隊需要管理自行開發軟件的整個生命週期和購買大型應用系統後的生命週期,所以宏觀來看,企業內部軟件開發是一種持續開發的類迭代模式。而對每一次階段性的開發項目,則需要根據項目的規模,結合敏捷的思想,靈活地掌握開發過程。
和專業軟件開發公司一樣,企業內部軟件開發團隊同樣要建立文檔代碼管理、項目管理、質量管理的各種制度和工具,但形式上可以更加註重實用性和有效性。另外和專業軟件開發公司相比,企業內部軟件管理需要特別加強用戶隊伍的建設,爭取使用戶成爲信息系統的有機組成部分,這樣對信息系統和企業業務都有不可估量的正面影響。
軟件工程歸結的幾個基本的階段:規劃和計劃、需求分析、設計、編碼和實現、測試、維護和支持,對所有項目和階段都是適用的。仔細觀察目前林林總總的軟件開發模式,都可以辨認出這幾個階段,不同的是每個階段的引入時機或持續長度。對於企業內部軟件開發來說, 因爲企業內部軟件團隊的目標和企業的目標一致以及內部軟件團隊的特殊位置,所以在這些經典的開發階段之外,還應該加入一些其他的重要階段或需要特別關注的內容:
3.1    首先應該加入的階段是實施階段,這是一個在經典軟件工程模型中被弱化的階段,經常被列入交付或者支持的範疇。對於商業化的開發來說,,客戶或其他評審機構評審驗收合格,軟件開發已經基本完成。所謂實施就是給用戶培訓,後面用戶怎麼用是用戶的事。如果是大型應用系統,如購買的ERP、PLM、SCM、CRM等系統,實施過程大可另做項目或交給專門的第三方實施公司。但對使用企業來說,實施非常重要。即便是小型軟件,如果沒有後續的推進、進度控制和項目協調,都很可能"用不起來"或者"用的不好"。這樣對於企業來說軟件仍然是沒有完成的。明確獨立的實施階段,可以使軟件開發團隊在實施的組織和方法論等方面更加專注。
3.2    其次是系統集成分析。這一工作通常是覆蓋規劃到系統設計階段的工作,可以加在規劃或需求分析等階段內部,也可以單獨列出。對於已具備一定規模的企業信息系統來說,這一工作需要特別強調和嚴格引入。主要內容是對照信息系統的整體規劃,考察新開發項目和現有系統的集成。即便沒有明確的信息系統整體規劃,也要在分析用戶需求和系統設計時,時刻注意把需求放在系統集成環境下進行功能定義和功能分配。用戶對系統集成大多是沒有考慮的,商業模式下的軟件開發方法也很少提及。但這是企業內部IT應該進行的工作。忽略這個集成分析,隨着時間積累,將造成信息系統即使局部很高效和很完備,但整體上卻臃腫和低效率,進而使企業在實際管理上承擔難以估計的代價。
綜上所述,可以把企業內部軟件開發模式大體框架按下圖表示:
 

 
這是一種注重企業內部環境,注重企業的業務價值,敏捷的開發模式。
各個企業內部軟件團對所面臨組織環境和系統環境千差萬別,各個具體項目有各自的特殊情況,所以不可能存在一種普遍適用的具體開發模式。各個企業內部軟件團隊要根據自己的實際情況開發,逐步建立自己的開發方法和全面的系統支撐環境。
4     結束語
從分工的角度來看,獨立於軟件使用企業之外的專業軟件組織的存在是必需的。專業軟件組織在軟件本身的開發規範和開發技術等各個方面,都具備非專業組織無法達到的深度和廣度。但是,軟件開發過程的管理和控制是一個非常複雜的領域,這種複雜性不僅來自軟件開發本身,更來自於需求的複雜、需求的多變以及很多其他超出軟件領域本身的因素。軟件工程實踐中反覆探索但仍然長期困擾從業人員的諸多問題,例如需求難以控制、軟件品質難以控制、預算經費難以控制、項目進度難以控制等,都不能單純靠專業軟件人員或軟件組織來解決。另外一個軟件的成功與否,最終還是要通過實現客戶價值來體現。而如何實現客戶價值,也不是純粹的軟件問題。
企業內部軟件團隊在解決這些超出純粹軟件開發的問題時,有着自身特殊的優勢。目前對企業內部軟件開發特殊性的研究是軟件工程研究方面比較弱的一個領域。從整個軟件行業來說,進一步還應該研究企業內部軟件組織和獨立運營的專業軟件組織之間的配合。這些研究對突破各種軟件開發困境將會是非常有意義的工作。

發佈了11 篇原創文章 · 獲贊 0 · 訪問量 3556
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章