信息系統(tǒng)開發(fā)方法信息系統(tǒng)是一個(gè)極為復(fù)雜的人機(jī)交互系統(tǒng),它不僅包含了計(jì)算機(jī)技術(shù)、通信技術(shù)和網(wǎng)絡(luò)技術(shù)、其他的工程技術(shù),而且,它還是一個(gè)復(fù)雜的管理系統(tǒng),它也需要管理理論和方法的支持。因此,與其他的工程項(xiàng)目相比,信息系統(tǒng)工程項(xiàng)目的開發(fā)和管理顯得更加地復(fù)雜,所面臨的風(fēng)險(xiǎn)也是更大的。 我們平常所使用的各種后臺(tái)管理系統(tǒng),各種在線軟件,比如說淘寶、微信這些,往大了說都可以是一個(gè)信息系統(tǒng)。因?yàn)樗麄兙邆淞宋覀兦懊嫠f過的信息的特征。因此,信息系統(tǒng)涵蓋的范圍其實(shí)非常廣泛。人們常說,現(xiàn)在是一個(gè)信息爆炸的時(shí)代,從微博到朋友圈再到抖音,信息的更新速度、傳播速度以及傳播方式都是飛快發(fā)展的。為了應(yīng)對(duì)這樣一個(gè)時(shí)代,在開發(fā)信息系統(tǒng)時(shí),除了技術(shù)、管理等因素外,系統(tǒng)開發(fā)方法也起著很重要的作用。 常用的開發(fā)方法包括結(jié)構(gòu)化方法、面向?qū)ο蠓椒ā⒃头椒?、面向服?wù)方法等。我們今天主要就來說說這幾個(gè)方法。 結(jié)構(gòu)化方法結(jié)構(gòu)是指系統(tǒng)內(nèi)各個(gè)組成要素之間的相互聯(lián)系、相互作用的框架。因此,結(jié)構(gòu)化方法是一種非常傳統(tǒng)的方法,也是一種工程化的方法,也稱為生命周期法。它由結(jié)構(gòu)化分析(Structured Analysis, SA)、結(jié)構(gòu)化設(shè)計(jì)(Structured Design, SD)和結(jié)構(gòu)化程序設(shè)計(jì)(Structured Programming, SP)三個(gè)部分組合而成,其精髓是自頂向下、逐步求精和模塊化設(shè)計(jì)。 其實(shí)這個(gè)方法也就是我們最常見也最傳統(tǒng)的那種軟件開發(fā)方式。對(duì)應(yīng)的是我們后面要講的 軟件工程 中的 結(jié)構(gòu)化設(shè)計(jì) 以及信息系統(tǒng)項(xiàng)目典型生命周期模板中的 瀑布模型 和 V模型 。大家先不要著急,現(xiàn)在我們只需要知道這個(gè)結(jié)構(gòu)化的一些特點(diǎn)就好,等到后面學(xué)習(xí)完了 瀑布模型 之后,再回來看這一塊的內(nèi)容,就非常好理解了。 結(jié)構(gòu)化方法有 4 個(gè)主要的特點(diǎn),它們分別是:
從這些特點(diǎn)中可以看出,結(jié)構(gòu)化方法適用用數(shù)據(jù)處理領(lǐng)域的問題,但不適應(yīng)于規(guī)模較大、比較復(fù)雜的系統(tǒng)開發(fā)。注意,劃重點(diǎn),我們的 PMP 也就是后面要講到的項(xiàng)目管理理論部分(PMP5),其實(shí)是非常偏向于這個(gè)結(jié)構(gòu)化開發(fā)的模型的。對(duì)于需求明確、成熟、穩(wěn)定,并且有類似成功經(jīng)驗(yàn)的項(xiàng)目來說,結(jié)構(gòu)化方法相當(dāng)適用。在最后,我們也來簡單地了解下結(jié)構(gòu)化設(shè)計(jì)的 3 個(gè)主要的不足和局限性。
相信跟過我們之前的敏捷課程的,一定對(duì)第 1 點(diǎn)和第 2 點(diǎn)深有感觸,因?yàn)槲覀冊(cè)诿艚葜兄饕鉀Q的就是這兩個(gè)問題。敏捷是什么還記得嗎?通過短時(shí)間的迭代來快速交付具有價(jià)值的產(chǎn)品。正好,對(duì)應(yīng)的就是這兩點(diǎn)。在這套課程中,我們也會(huì)提到敏捷,但是,真正的主角其實(shí)反而是這套 結(jié)構(gòu)化 的開發(fā)方法。畢竟,它的優(yōu)點(diǎn)也是不可忽視的,而且現(xiàn)在的大潮流其實(shí)是各種項(xiàng)目管理方法的融合,在很多大廠,你既可以看到敏捷實(shí)踐的應(yīng)用,也可以看到傳統(tǒng)項(xiàng)目管理工具的應(yīng)用??傊痪湓?,對(duì)客戶有價(jià)值,對(duì)組織有好處,對(duì)項(xiàng)目有效果的實(shí)踐和方法工具,都是我們值得學(xué)習(xí)的。 面向?qū)ο蠓椒?/span>對(duì)于學(xué)習(xí)過軟件開發(fā)的同學(xué)來說,這個(gè)面向?qū)ο蠓椒隙ň蜁?huì)非常熟悉了,甚至可以跳過這一塊的學(xué)習(xí)直接看后面的內(nèi)容。面向?qū)ο螅∣bejct-Oriented,OO)認(rèn)為 ,客觀世界都是由各種對(duì)象組成的,任何事物都是對(duì)象,每一個(gè)對(duì)象都有自己的運(yùn)動(dòng)規(guī)律和內(nèi)部狀態(tài),都屬于某個(gè)對(duì)象類,是該對(duì)象類的一個(gè)元素。我們先來認(rèn)識(shí)面向?qū)ο笾械囊恍┟~。 類:相同屬性、相同操作的對(duì)象的集合。一系列相似對(duì)象的抽象。 對(duì)象:描述客觀對(duì)象的一個(gè)實(shí)體。現(xiàn)實(shí)世界的一個(gè)抽象。 實(shí)例:類中的每個(gè)對(duì)象類,是創(chuàng)建對(duì)象的模板。對(duì)象是類的實(shí)例,類是對(duì)象的抽象。 屬性:對(duì)象的靜態(tài)特征。 操作:方法 或 服務(wù) ,規(guī)定對(duì)象的行為。 繼承:一個(gè)類可以繼承另一個(gè)類的特征或行為,這個(gè)類叫做子類,被繼承的類叫做父類。 泛化:和繼承相反,由父類來抽象出子類。 這些東西如果你沒有接觸過的話可能理解起來比較困難,不過不用著急,在后面我們學(xué)習(xí) 軟件工程 中的 UML類圖 和 軟件設(shè)計(jì) 的 面向?qū)ο笤O(shè)計(jì) 時(shí)還會(huì)接觸到。當(dāng)然,更好的方法是如果身邊有程序員同事的話,問問他們,讓他們用代碼把上面的概念寫出來,相信你一定就會(huì)明白了。到后面要講這些內(nèi)容的時(shí)候我就不會(huì)再重復(fù)這些名詞了,不記得的小伙伴記得過來查哦。 面向?qū)ο蠓椒?gòu)造的系統(tǒng)具有更好的 復(fù)用性 ,其關(guān)鍵在于建立一個(gè)全面的、合理的、統(tǒng)一的模型。OO 方法也是劃分階段的,分別是 系統(tǒng)分析、系統(tǒng)設(shè)計(jì) 和 系統(tǒng)實(shí)現(xiàn) 三個(gè)階段,但是和 結(jié)構(gòu)化方法 不同的是它們?nèi)齻€(gè)階段的界限不是很明確。某一個(gè)工作即可以在前一個(gè)階段完成,也可以在后一個(gè)階段補(bǔ)充。 在今天學(xué)習(xí)的最后,我補(bǔ)充了用代碼實(shí)現(xiàn)面向?qū)ο筮@幾個(gè)概念的內(nèi)容,大家可以了解一下。不過前提是,你最好還是有一點(diǎn)點(diǎn)基礎(chǔ),哪怕是大學(xué)上過 C 語言的課也好。如果實(shí)在理解不了,那么只能是硬背概念了。 原型化方法原型化方法的一個(gè)最大的特點(diǎn)是在系統(tǒng)開發(fā)初期必須明確系統(tǒng)的功能需求,確定系統(tǒng)邊界。它也叫做快速原型法,根據(jù)用戶初步的需求,快速地建立一個(gè)系統(tǒng)模型直接展示給用戶,在此基礎(chǔ)上與用戶交流并加以改進(jìn),最終實(shí)現(xiàn)用戶需求的信息系統(tǒng)快速開發(fā)的方法。 根據(jù)原型是否實(shí)現(xiàn)功能來分,可以劃分為 水平原型 和 垂直原型 。水平原型也稱為行為原型,用于探索預(yù)期系統(tǒng)的一些特定行為,并達(dá)到細(xì)化需求的目的。水平原型通常是功能的導(dǎo)航,不會(huì)實(shí)現(xiàn)真實(shí)的功能。垂直原型也稱為結(jié)構(gòu)化原型,實(shí)現(xiàn)了一部分功能,主要用在復(fù)雜的算法實(shí)現(xiàn)上。 從原型的最終結(jié)果來分,可以分為 拋棄式原型 和 演化式原型 。拋棄式原型也稱為探索式原型,是指達(dá)到預(yù)期的目的后,原型本身被拋棄。拋棄式原型主要用在解決需求不確定性、二義性、不完整性、含糊性等問題上。演化式原型為開發(fā)增量式產(chǎn)品提供 基礎(chǔ),逐步將原型演化成最終系統(tǒng)。主要用在需要易于升級(jí)和優(yōu)化的場合,特別適用于 Web 項(xiàng)目。 從這兩種原型的劃分來看,各位有想到我們企業(yè)中的 產(chǎn)品經(jīng)理 畫的原型圖是屬于哪種類型的嗎?沒錯(cuò),相信大家已經(jīng)看出來了,原型圖是沒有功能的,或者只有簡單的跳轉(zhuǎn)類的功能用于演示,因此它是水平原型。然后大部分情況下,原型會(huì)被拋棄,雖然也有演化式的大型項(xiàng)目的原型圖會(huì)持續(xù)更新,但等到項(xiàng)目結(jié)束后一般都會(huì)結(jié)束原型圖的維護(hù)。如果需要在項(xiàng)目結(jié)束后再添加功能之類的,往往也會(huì)以單獨(dú)的功能點(diǎn)來繪制原型圖。因此,我們產(chǎn)品經(jīng)理畫的圖一般來說就是 水平拋棄型 的原型。 在另一方面,也是我們之前在講敏捷時(shí)學(xué)習(xí)過的 MVP(最小可行性產(chǎn)品),這個(gè)其實(shí)是有點(diǎn)類似于演化式原型的,要知道,MVP 是用于快速驗(yàn)證產(chǎn)品可行性的一個(gè)可以正式使用的產(chǎn)品,如果確實(shí)可行并且對(duì)客戶有價(jià)值的話,那么我們?cè)诿艚葜袝?huì)基于這個(gè) MVP 繼續(xù)迭代增量開發(fā)的。因此,MVP 是屬于一個(gè) 垂直演化式 的例子。 當(dāng)然,上面的兩種例子都并不是非常固定,但在大部分情況下確實(shí)還是比較符合原型的分類情況的。原型法的開發(fā)過程我們就簡單地通過下面這張圖了解一下即可,不是特別重點(diǎn)的內(nèi)容,相信產(chǎn)品經(jīng)理們都非常懂這張圖的流程。 對(duì)于原型法來說,有其優(yōu)勢(shì),也有其限制,我們先來看看原型法的優(yōu)勢(shì):
優(yōu)勢(shì)不用多說,其實(shí)總結(jié)起來就是中間那一條,用戶參與度很高。而它的限制其實(shí)也在這里。
因此,原型法非常適用于那些需求不明確的系統(tǒng)開發(fā)。其實(shí)很多小伙伴們已經(jīng)看出來了吧,敏捷 和 原型法 有著千絲萬縷的關(guān)系,都是針對(duì)需求不明確的、容易變動(dòng)的項(xiàng)目的。而且,就像上面我們說的 MVP 一樣,確實(shí)在 敏捷 中是有原型法的應(yīng)用的。 面向服務(wù)的方法如果你聽說過 微服務(wù) ,那么面向服務(wù)的方法你肯定也不會(huì)陌生了。同樣的,需要一個(gè)服務(wù)中心,然后通過將相關(guān)對(duì)象進(jìn)行業(yè)務(wù)功能分組,形成構(gòu)件(Component),將這些構(gòu)件以接口的形式暴露出來,這就是面向服務(wù)的開發(fā)方法(Service-Oriented,SO)。 從這個(gè)定義就可以看出來,微服務(wù)其實(shí)是它的一個(gè)子集,同時(shí)也是在面向服務(wù)的基礎(chǔ)上形成的。在現(xiàn)代化的框架中,服務(wù)中心、服務(wù)注冊(cè)、服務(wù)發(fā)現(xiàn)都是面向服務(wù)開發(fā)的必備功能,而微服務(wù)更典型的特點(diǎn)是應(yīng)用了 遠(yuǎn)程過程調(diào)用 RPC 這個(gè)技術(shù),其實(shí)就是利用網(wǎng)絡(luò)特性來暴露接口。比如我們最常用的 HTTP 接口就是可以做微服務(wù)的,當(dāng)然,它的性能是比較慘的,所以也會(huì)有許多 Socket 的長連接 RPC 框架可以供我們使用。這部分內(nèi)容作為擴(kuò)展知識(shí),大家自己去查閱相關(guān)的資料吧。如果你做過微服務(wù)相關(guān)的開發(fā)應(yīng)該就很清楚了,如果你沒有做過相關(guān)的開發(fā)或者沒有代碼經(jīng)驗(yàn)的話,記住上面那一段的定義就可以了。 補(bǔ)充:代碼表示面向?qū)ο笾械母拍?/span>碼農(nóng)們請(qǐng)?zhí)^這一部分。
上面這一段是 PHP 的代碼。如果你學(xué)習(xí)過 C 語言的話應(yīng)該還是很容易看懂的,不過純 C 語言不是面向?qū)ο蟮模宰詈檬怯?C++ 或者 Java 的基礎(chǔ)。 在這段代碼中 Color 是一個(gè) 類 ,也就是一個(gè)模板,我們可以將它看成是對(duì) 顏色 的抽象。在這個(gè)類模板中,有一個(gè) 屬性 在類的外部,我們通過 new 關(guān)鍵字來 實(shí)例化 一個(gè)類模板,獲得的結(jié)果放到 接下來我們定義了一個(gè) 子類 BlueColor 繼承自 Color 類,然后我們 重寫 了父類的 如果你確實(shí)對(duì)代碼沒有任何概念的話,可以去 w3school 這個(gè)網(wǎng)站學(xué)習(xí)一下基礎(chǔ)的幾個(gè)語言,比較推薦的是 Python、PHP 這類相對(duì)來說比較容易上手的語言。然后只要了解基礎(chǔ)的語法和對(duì)應(yīng)語言的面向?qū)ο笙嚓P(guān)的內(nèi)容就可以了。 總結(jié)今天我們學(xué)習(xí)的內(nèi)容還是理論為主,不過已經(jīng)有一些技術(shù)范了吧,接下來,我們就要正式開始學(xué)習(xí)一大堆純技術(shù)方面的東西了。做好準(zhǔn)備了嗎?千萬不要怕,雖然東西多,但都只是點(diǎn)到為止,并沒有很深入的研究。因此,如果你只是想通過考試的話,了解一下,然后硬背一下,能達(dá)到通過考試的水平就夠了。即使你是硬背的,但是將來你在和程序員們交流的時(shí)候,有這些知識(shí)墊底,也一定會(huì)讓他們對(duì)你刮目相看。 參考資料: 《信息系統(tǒng)項(xiàng)目管理師教程》 《某機(jī)構(gòu)培訓(xùn)資料》 |
|