一帅戒、軟件危機
研制軟件系統(tǒng)需要投入大量的人力、物力和資金乌逐,但是系統(tǒng)的質(zhì)量卻無法保證。開發(fā)軟件所需的高成本與軟件產(chǎn)品的低質(zhì)量之間存在尖銳的矛盾创葡。軟件開發(fā)陷入惡性循環(huán)浙踢。這種現(xiàn)象被稱為“軟件危機(Software Crisis)”。
軟件危機表現(xiàn)形式
- 軟件開發(fā)進度難以預(yù)測灿渴。據(jù)統(tǒng)計:只有15%的項目是按計劃完成的洛波。
- 軟件開發(fā)成本難以控制呐芥。據(jù)統(tǒng)計:僅有10%的項目是按費用計劃完成的。
- 用戶對軟件功能難以滿足奋岁。(開發(fā)人員和用戶之間很難溝通思瘟、矛盾很難統(tǒng)—)
- 軟件產(chǎn)品質(zhì)量無法保證。
- 軟件產(chǎn)品難以維護闻伶。(版本迭代滨攻,開發(fā)者和維護者溝通不足)
- 軟件通常缺少適當?shù)奈臋n資料。(用戶的操作說明書等)
- 生產(chǎn)率提高的速度不能滿足社會需要蓝翰。
軟件危機產(chǎn)生的原因
- 內(nèi)在因素:與軟件本身的特點有關(guān)光绕,客觀的存在,只能因勢利導(dǎo)加以解決畜份。
? 軟件在寫出程序并在機器上運行之前诞帐,進展清況難以掌握,開發(fā)質(zhì)量也無法評估爆雹。這些都給管理和控制帶來不便停蕉。
? 軟件是特定問題在計算機上的運行描述。實際問題的復(fù)雜性決定了一個實用軟件系統(tǒng)規(guī)模往往十分龐大钙态。大有大的難處慧起。程序規(guī)模越大,控制册倒、管理難度也就越大蚓挤。 - 外在因素:與軟件開發(fā)和維護的技術(shù)方法有關(guān),可以完善驻子、提高灿意。
? 開發(fā)人員和用戶之間沒有充分溝通了解。
? 軟件開發(fā)各階段任務(wù)不明確崇呵,方法不科學(xué)缤剧。
? 重編程,輕分析演熟; 重開發(fā)鞭执,輕維護, 重程序芒粹,輕文檔兄纺。
如何解決軟件危機
統(tǒng)計分析表明: 用戶需求不穩(wěn)定、不清晰化漆、不完整是項目失敗的主要原因估脆,應(yīng)引起足夠的重視。為了解決軟件危機就要研究MIS開發(fā)模式座云,總結(jié)和實踐好的開發(fā)方法學(xué)疙赠,提高軟件開發(fā)效率付材,降低軟件開發(fā)和維護的成本。
關(guān)于MIS開發(fā)方法學(xué)圃阳,有三個領(lǐng)域要重點關(guān)注:
- 軟件工程:軟件工程(software engineering, SE)
? 你所寫的程序厌衔,從來沒有超過—干行,那是完全不需要《軟件工程》的捍岳。
? 程序大了富寿,不用軟件工程,項目就會失控锣夹。 - 項目管理:項目管理(project management , PM)
? 如果你總是—個人寫程序页徐,那也根本不需要《項目管理》
? 人多了,不管理银萍,就沒辦法—起寫程序变勇。 - 系統(tǒng)分析:系統(tǒng)分析(systems analysis , SA)
? 如果你的問題,一看就知道怎么寫程序解決贴唇,那連《系統(tǒng)分析》都可以省了
? 問題復(fù)雜了搀绣,不分析,就不知道該怎么寫滤蝠。
二豌熄、ISDM(information system development methodology)
研究人員希望能從實踐中出現(xiàn)的各種技術(shù)和方法中找出有序、系統(tǒng)的框架物咳,以建立能廣泛使用的—般化的IS開發(fā)方法和模型。隨著IS日益復(fù)雜蹄皱,企業(yè)需要具備更好的組織結(jié)構(gòu)览闰,以適應(yīng)能易于定義,控制巷折、集成系統(tǒng)所有組件的各種開發(fā)工具压鉴。
另外,系統(tǒng)開發(fā)不僅受系統(tǒng)開發(fā)目標影響锻拘,而且也受組織特質(zhì)影響油吭,導(dǎo)致信息系統(tǒng)開發(fā)模型的多樣性。實際上署拟,沒有哪—種開發(fā)模型能通用千所有企業(yè)婉宰。
這里簡要討論現(xiàn)有的主要 ISDM 以及各類方法學(xué)中的主要模型,了解如何為特定類型的信息系統(tǒng)開發(fā)項目選擇適用的方法學(xué)和開發(fā)模型推穷。
ISDM發(fā)展
- 早期方法學(xué)時代——系統(tǒng)開發(fā)生命周期 (Systems Development Life Cycle , SDLC) , 也叫瀑布模型(waterfall model)
- SDLC通常包括必須順序執(zhí)行的—些開發(fā)階段心包,實際上這個階段的定義并沒有統(tǒng)—標準,通常在5-20個階段馒铃⌒诽冢—個階段必須在下—個階段開始之前完成(所以叫瀑布模型)痕惋,完成的標準是生成該階段預(yù)定義的—套文檔或可交付成果。
- SDLC各特定階段會使用特定技術(shù)(如流程圖等)娃殖。當遇到問題或需要改變時值戳,也有階段間迭代(iteration around the phases) 的提法,但實際上不會真正去做炉爆,通常是忽略掉堕虹。
- 早期瀑布型SDLC有嚴重的局限性,包括:
? 不能滿足企業(yè)的實際需求(強調(diào)組織運營層面的技術(shù)效率改進)叶洞;
? 過度保守的系統(tǒng)設(shè)計(強調(diào)以現(xiàn)有系統(tǒng)為基礎(chǔ)開發(fā)新系統(tǒng))鲫凶;
? 不穩(wěn)定性(強調(diào)流程建模,而流程會因不斷變化的企業(yè)和市場而變化衩辟,不穩(wěn)定)螟炫;
? 不靈活性(由于設(shè)計過程是基于輸出驅(qū)動的,因此很難修改設(shè)計艺晴,修改成本也很高)昼钻;
? 用戶不滿意(用戶只有在系統(tǒng)投入使用后才能看到效果);
? 文檔問題(文檔基本是計算機學(xué)科視角的封寞,而非用戶導(dǎo)向)然评;
- 方法學(xué)時代
方法學(xué)就是用于系統(tǒng)開發(fā)的階段,程序狈究,規(guī)則碗淌,技術(shù),工具抖锥,文獻工作亿眠,管理和培
訓(xùn)的推薦組合體- 方法學(xué)時代開發(fā)方法的發(fā)展有7個重要主題脈絡(luò):
1、結(jié)構(gòu)化(structured) : 結(jié)構(gòu)化編程的概念被應(yīng)用于系統(tǒng)分析和設(shè)計磅废;能支持復(fù)雜過程自上而下分析和表示的開發(fā)技術(shù)(如數(shù)據(jù)流圖)纳像。
2、面向數(shù)據(jù)(data-oriented) : 將數(shù)據(jù)視為系統(tǒng)開發(fā)的關(guān)鍵要素拯勉,核心技術(shù)是實體聯(lián)系建模(entity-relationship Modeling) 竟趾。
3、原型(Prototyping) : 重點是在物理實現(xiàn)系統(tǒng)前建立近似模擬品宫峦,以允許用戶評估并反饋岔帽。
4、面向?qū)ο?OO , object-oriented) : 核心是對象斗遏、屬性和類的識別山卦,強調(diào)繼承和重用。
5、參與性(Participative) : 強調(diào)用戶和其他信息系統(tǒng)利益相關(guān)者的參與账蓉。
6枚碗、戰(zhàn)略(Strategic) : 強調(diào)信息系統(tǒng)規(guī)劃和信息系統(tǒng)戰(zhàn)略制定,強調(diào)信息系統(tǒng)開發(fā)要支持和實現(xiàn)企業(yè)急體業(yè)務(wù)目標铸本。如肮雨,在信息系統(tǒng)開發(fā)過程中同時進行業(yè)務(wù)流程再造(business process reengineering , BPR) 。
7箱玷、多系統(tǒng)(systems) : 不局限于系統(tǒng)的單個應(yīng)用邊界內(nèi)怨规,強調(diào)超邊界的整體觀,來解釋人類活動系統(tǒng)的復(fù)雜性锡足。
- 方法學(xué)時代開發(fā)方法的發(fā)展有7個重要主題脈絡(luò):
- 后方法學(xué)時代
- —些組織在實踐中發(fā)現(xiàn)很難采用方法學(xué)波丰,會面對開發(fā)人員和用戶的雙重阻力〔暗茫—些組織則完全拒絕使用方法學(xué)掰烟,返回到較不正式的,更靈活的方法沐批。
- 不怎么使用方法學(xué)的—個領(lǐng)域是開發(fā)基于Web的系統(tǒng)纫骑,,它們通常以ad hoc方式九孩,試錯的方式開發(fā)先馆,依靠組織中幾個關(guān)鍵人物的技能和經(jīng)驗。
- 不再尋求統(tǒng)—的更好的方法學(xué)躺彬!而是尋求替代方案:
? 用工具開發(fā):—些組織追求開發(fā)工具的演進。包括自動代碼生成宪拥,以自動化開發(fā)過程番捂。無方法學(xué)指導(dǎo)下的工具使用可認為是—種ad hoc開發(fā)江解。
? OO方法:盡管方法學(xué)時代就大行其道了, OO方法仍在不斷演進, 新的方法和技術(shù)不斷出現(xiàn)±绾樱基于組件的開發(fā)技術(shù)將系統(tǒng)開發(fā)視為現(xiàn)有組件(通常為OO) 的組合和重組。
? 外包(outsourcing) : 有些企業(yè)組織面對系統(tǒng)開發(fā)方面持續(xù)存在的問題以及方法學(xué)效果的不足魄梯,將系統(tǒng)開發(fā)外包給第三方。從此不再關(guān)心系統(tǒng)如何開發(fā)和方法學(xué)的選擇問題酿秸,而是關(guān)注系統(tǒng)的有效性問題灭翔。當然辣苏,這些企業(yè)必須能選擇合適的第三方哄褒,詳細規(guī)定系統(tǒng)要求,撰寫和談判合同煌张。
? 增量開發(fā)(Incremental development) 呐赡。增量開發(fā)強調(diào)在早期版本的基礎(chǔ)上建立和改進系統(tǒng)。旨在減少開發(fā)系統(tǒng)所需的時間骏融,特別是以RAD (Rapid Application Development) 形式链嘀。它解決了系統(tǒng)開發(fā)過程中需求變化的問題。例如档玻,動態(tài)系統(tǒng)開發(fā)方法(Dynamic Systems Development Method) 是自20世紀90年代中期以來許多公司已經(jīng)采用的增星開發(fā)方法怀泊。
? 外部開發(fā)(External development) ∥笈浚—些企業(yè)通過購買商業(yè)方法學(xué)來嘗試滿足他們的系統(tǒng)需求霹琼。這些企業(yè)故意不進行內(nèi)部系統(tǒng)開發(fā)活動,而是購買封裝好的系統(tǒng)來滿足其要求冤留。實際上碧囊,很多企業(yè)組織認為這是更快速的,更具成本效益的系統(tǒng)實現(xiàn)方式纤怒。只有那些具備戰(zhàn)略意義的系統(tǒng)或市場沒有適合的封裝包時糯而,才會考慮內(nèi)部開發(fā)。
目前泊窘,軟件市場能提供越來越復(fù)雜的產(chǎn)品和功能熄驼,并包含越來越多的可裁剪封包。企業(yè)資源計劃包在大型企業(yè)中特別受歡迎烘豹,客戶關(guān)系管理軟件包也是如此瓜贾。
不足之處:企業(yè)被局限在特定系統(tǒng)廠商,企業(yè)無法控制/指定軟件包的功能特性携悯,只能廠商賣什么用什么祭芦。
? 權(quán)變(Contingency) : 大多數(shù)方法學(xué)都是針對符合某些理想規(guī)范的情境而設(shè)計的。然而憔鬼,—些研究人員和實踐者認為沒有相同的情景龟劲,而且現(xiàn)實世界中也沒有所謂的理想規(guī)范,從而提出一種權(quán)變開發(fā)方法轴或,依賴企業(yè)具體情境(如昌跌,項目類型及其目標,組織及其環(huán)境照雁,用戶和開發(fā)人員)蚕愤,來使用、調(diào)整、忽略開發(fā)工具和技術(shù)萍诱。如Multiview方法悬嗓。