400-888-5228

課程介紹:

幾十年來,軟件開發(fā)實(shí)踐一直被驚人的低成功率所困擾。作為軟件設(shè)計(jì)師,你知道現(xiàn)在軟件開發(fā)悲劇的根源在哪里嗎? 如果你連根源都不知道在哪里?你怎樣知道去解決呢?

在軟件開發(fā)過程之中,會遇到各種各樣的問題,原因歸結(jié)起來主要根源有兩個(gè)方面,一個(gè)是復(fù)雜性,一個(gè)是變化性。軟件的規(guī)模越大,各個(gè)部分之間的牽連越復(fù)雜,更改也就越難。如果軟件簡單并且規(guī)模小,更改還比較容易。但是隨著用戶業(yè)務(wù)復(fù)雜,幾乎所有的軟件的任務(wù)規(guī)模都會越來越大。

如果只是增加軟件功能,也不會引起那么多悲劇。可是,伴隨著軟件復(fù)雜性增加,需求的變更幾乎是不可避免。在需求分析時(shí),即便客戶同意了需求分析書的簽字,可一旦見到了真實(shí)的系統(tǒng)。 客戶還是感覺不對勁,仍然要求必須修改。

伴隨著軟件越來越復(fù)雜,對軟件的變更需求越來越頻繁,更改所需求的花費(fèi)越來越大。我們軟件開發(fā)人員的悲劇就誕生了。

很多軟件的設(shè)計(jì)往往是大泥球式的設(shè)計(jì),指結(jié)構(gòu)雜亂無章、錯(cuò)綜復(fù)雜、邋遢不堪、隨意拼貼的大堆代碼。在現(xiàn)今軟件開發(fā)日趨復(fù)雜的情況下,圍繞著如何安排、規(guī)劃這些活動的次序、周期和時(shí)間,人們提出過各種各樣的軟件開發(fā)方法模型。比如目前流行的敏捷/RUP等等. 但是軟件質(zhì)量最終還是依賴較強(qiáng)責(zé)任心和能力的設(shè)計(jì)師。除非如此,不管是敏捷是非敏捷,軟件設(shè)計(jì)的問題根本不能解決。因此持續(xù)關(guān)注優(yōu)秀技能和良好的設(shè)計(jì),才可以真正實(shí)現(xiàn)敏捷。

我們大多在一線的設(shè)計(jì)師,不了解設(shè)計(jì)的基本原則/模式,但是可惜當(dāng)他知道一些原則和模式后,卻已經(jīng)變成了管理者(項(xiàng)目經(jīng)理,產(chǎn)品經(jīng)理等管理崗位),不在從事設(shè)計(jì)的工作. 這真是業(yè)界悲哀的事情.艾威軟件設(shè)計(jì)最佳實(shí)踐和案例分析培訓(xùn)課程重點(diǎn)關(guān)注軟件設(shè)計(jì)師技能, 這是本課程的設(shè)置的目的.課程總結(jié)了多年項(xiàng)目開發(fā)的實(shí)戰(zhàn)經(jīng)驗(yàn),讓學(xué)員體會在軟件系統(tǒng)設(shè)計(jì)過程中提高能力。

課程特色:

一般的書籍和培訓(xùn),往往是介紹設(shè)計(jì)過程,設(shè)計(jì)原則和模式,之后再給出幾個(gè)簡單的在理想情況下的應(yīng)用.要么是拿出最終設(shè)計(jì)來講解,然后告訴他的設(shè)計(jì)的是多么靈活,多么的好. 但是當(dāng)你課程結(jié)束后,回到工作之中卻發(fā)現(xiàn)情況是完全的不一樣,這時(shí)你只有束手無策.本課程注重實(shí)戰(zhàn),采用案例貫穿方式完成講解理論,讓學(xué)員體驗(yàn)軟件設(shè)計(jì)的思索,權(quán)衡,折中,選擇的痛苦過程,首先提出真實(shí)項(xiàng)目的需求,然后學(xué)員開始動手設(shè)計(jì),最終講師和學(xué)員一起思索,一起探討,一起權(quán)衡,一起驗(yàn)證.

報(bào)名條件:

學(xué)員學(xué)習(xí)艾威軟件設(shè)計(jì)最佳實(shí)踐和案例分析課程應(yīng)具備下列基礎(chǔ)知識:

  1. 1)至少2年以上開發(fā)經(jīng)驗(yàn),經(jīng)歷過頻繁需求變更或者系統(tǒng)重復(fù)開發(fā)的折磨。
  2. 2) 熟悉Java/C#/C++任意一種面向?qū)ο笳Z言或者具備面向?qū)ο缶幊袒靖拍睢?/li>
  3. 3) 一般軟件企業(yè)的設(shè)計(jì)人員和初級架構(gòu)師,以及資深程序員。

 

部分客戶:

我們已經(jīng)為幾十家企業(yè)提供了內(nèi)訓(xùn)如:Adobe中國研發(fā)中心,Autodesk軟件(中國)研發(fā)中心,愛立信中國研發(fā)中心(7次內(nèi)訓(xùn)),思科中國研發(fā)中心,卓望科技,朗訊研發(fā)中心,平安科技,Visto中國研發(fā)中心,橫河電機(jī)(中國)有限公司,大唐電信研發(fā)中心,美國通用電氣(GE)研發(fā)中心,邁瑞研發(fā)中心,阿里巴巴研發(fā)中心,摩托羅拉成都研發(fā)中心.

 

課程體系:

  
課程體系結(jié)構(gòu)

 

課程主題內(nèi)容
項(xiàng)目案例6個(gè)真實(shí)大型項(xiàng)目案例
設(shè)計(jì)過程分析如何進(jìn)行設(shè)計(jì), 權(quán)衡過程
設(shè)計(jì)價(jià)值觀不僅僅實(shí)現(xiàn)功能,關(guān)注設(shè)計(jì)質(zhì)量屬性(可維護(hù)性和復(fù)用)
設(shè)計(jì)原則軟件設(shè)計(jì)的基本原則
設(shè)計(jì)模式常見架構(gòu)/設(shè)計(jì)模式
設(shè)計(jì)建模敏捷UML建模
設(shè)計(jì)最佳實(shí)踐設(shè)計(jì)的最佳實(shí)踐

 

課程大綱:

課程主題課程內(nèi)容
第一單元 軟件設(shè)計(jì)目標(biāo)-靈活性/可插入性/可擴(kuò)展內(nèi)容一:擁抱需求變化---設(shè)計(jì)師必須面對的
1.?不管你在何處工作,構(gòu)建些什么,用何種語言,在軟件開發(fā)上,一直最痛苦的事情是什么? ?或者什么是你開發(fā)之中最討厭的問題是什么?---需求變更
2.?殺死一個(gè)程序員不需要刀,只要需求變3次就好了!!
3.?軟件不斷變更法則:真實(shí)世界中使用的程序必須進(jìn)行變更,否則它在環(huán)境中的作用就會越來越小.
4.?需求改變的態(tài)度-拒絕變化無用,積極心態(tài)面對變化
5.?而敏捷對預(yù)測未來的方式是全新的,強(qiáng)調(diào)通過提高團(tuán)隊(duì)的能力、設(shè)計(jì)的彈性和流程的靈活性來適應(yīng)變化。這種思路對軟件開發(fā)也是很大的沖擊。
6.?軟件設(shè)計(jì)的目標(biāo)-靈活性,因?yàn)樵黾右粋€(gè)功能特性的成本并不單單是為這些功能編碼所花費(fèi)時(shí)間的成本,還應(yīng)該包括特性擴(kuò)展的障礙成本?,F(xiàn)在我們遇到的最大障礙是現(xiàn)在系統(tǒng)的混亂,難以擴(kuò)展。
案例分析通過案例分析需要變化的根源,以及各種情況
第二單元 ?如何設(shè)計(jì)才能實(shí)現(xiàn)靈活性內(nèi)容一:軟件設(shè)計(jì)的靈活性
1.?什么是好的設(shè)計(jì)和衡量的手段,世界大師的觀點(diǎn)(Robert C Martin?,?Peter Code,`?James Shor)
2.?一個(gè)好的系統(tǒng)設(shè)計(jì)應(yīng)該有如下的性質(zhì):可擴(kuò)展性、靈活性、可插入性。-Peter Code [CODE99]
3.?可擴(kuò)展性(Extensibility)容易添加新的功能. 結(jié)合案例,通過那些手段如何實(shí)現(xiàn)該目標(biāo)
4.?靈活性(Flexibility)代碼修改平穩(wěn)地發(fā)生. 結(jié)合案例,通過那些手段如何實(shí)現(xiàn)該目標(biāo)
5.?可插入性(Pluggability)容易將一個(gè)類抽出去,同時(shí)將另一個(gè)有同樣接口的類加入進(jìn)來. 結(jié)合案例,通過那些手段如何實(shí)現(xiàn)該目標(biāo)
6.?分析真實(shí)項(xiàng)目,如何做的詳細(xì)設(shè)計(jì),給我們哪些啟示,我們可以學(xué)習(xí)到什么
7.?分析我們在項(xiàng)目之中是那些原因?qū)е铝藳]有實(shí)現(xiàn)這些目標(biāo).內(nèi)容二:案例- 某項(xiàng)目認(rèn)證管理模塊設(shè)計(jì)案例
1.?某省移動項(xiàng)目,必須考慮支持多種設(shè)備廠商
2.?初始設(shè)計(jì)的問題分析
應(yīng)用何種模式解決問題
第三單元 ?靈活性設(shè)計(jì)基本原則/模式/實(shí)踐內(nèi)容一:靈活設(shè)計(jì)的基本原則
1.?發(fā)現(xiàn)和封裝變化的原則
2.?找出應(yīng)用中可能需要變化之處,把它們獨(dú)立出來,不要和那些不需要變化的代碼交織在一起.
3.?抽象穩(wěn)定接口(抽象類),針對接口編程,而不是針對實(shí)現(xiàn)編程
4.?分離變化維度,單一職責(zé)原則
5.?動態(tài)綁定還是靜態(tài)綁定,多用組合,少用繼承
6.?創(chuàng)建與使用分離,創(chuàng)建有變化也要封裝
7.?結(jié)合多個(gè)案例項(xiàng)目進(jìn)行分析,怎樣發(fā)現(xiàn)和封裝變化,如何通過具體的手段來進(jìn)行適應(yīng)這些變化內(nèi)容二:靈活性設(shè)計(jì)的最佳實(shí)踐
1.?多態(tài)(polymorphism)和針對接口的編程
2.?數(shù)據(jù)驅(qū)動(Data-Driven Design)
3.?元數(shù)據(jù)驅(qū)動設(shè)計(jì)
4.?反射驅(qū)動(Meta-data or Reflective ?)
5.?解釋器驅(qū)動
6.?腳本引擎技術(shù)
7.?結(jié)合多個(gè)案例項(xiàng)目進(jìn)行分析,怎樣發(fā)現(xiàn)和封裝變化,如何通過具體的手段來進(jìn)行適應(yīng)這些變化內(nèi)容三:案例---結(jié)合案例分析軟件設(shè)計(jì)原則/模式
1.?某項(xiàng)目系統(tǒng)的演變,以及設(shè)計(jì)原則的應(yīng)用效果,通過項(xiàng)目的演化分析這些核心設(shè)計(jì)原則的應(yīng)用場景
2.?通過一個(gè)大型實(shí)例,傳遞Clean Code,設(shè)計(jì)原則等,包括DIY原則,Tell Don't Ask原則,Soild原則(Single Responsibility原則,Open Closed原則,Liskov Substitution原則,Interface Segregation原則,Dependency Inversion原則)。
3.?案例分析-設(shè)計(jì)原則的應(yīng)用
第四單元 軟件設(shè)計(jì)腐化內(nèi)容一:設(shè)計(jì)腐化與技術(shù)債務(wù)
1.?設(shè)計(jì)腐化的途經(jīng)
2.?總結(jié)常見的設(shè)計(jì)腐化途經(jīng),原因及克服方法
3.?技術(shù)債務(wù)概述
4.?軟件債務(wù)對軟件系統(tǒng)的危害
5.?軟件債務(wù)對軟件開發(fā)人員的危害
6.?技術(shù)債務(wù)與破窗效應(yīng)
7.?技術(shù)債務(wù)的解決之道
8.?通過案例分析,如何解決技術(shù)債務(wù)內(nèi)容二:技術(shù)債務(wù)監(jiān)控
1.?軟件腐化監(jiān)控
2.?國際著名某電信研發(fā)中心監(jiān)控工具內(nèi)容三:軟件腐化與希波克拉底宣言
1.?First, Do No Harm. ?首先,做到不傷害!— Hippocrates ?希波克拉底
2.?Proxy代理模式與軟件修改方案
3.?decorator模式與遺留軟件修改
4.?案例分析如果維護(hù)遺留系統(tǒng)而不是遺留系統(tǒng)變爛

內(nèi)容四:案例- 演示系統(tǒng)軟件腐化的過程
1.?某電信研發(fā)中心項(xiàng)目系統(tǒng)
2.?初始設(shè)計(jì)的問題分析
3.?故障單管理系統(tǒng)
4.?流程審核的改變
5.?故障單類型的增加
6.?傳統(tǒng)設(shè)計(jì)的問題與如何通過代碼進(jìn)行演化
7.?通過該案例分析,對比有時(shí)是因?yàn)槿藛T的設(shè)計(jì)技能導(dǎo)致加速軟件的腐化
8.?通過該案例分析,講師加入項(xiàng)目之后,將進(jìn)行哪些重構(gòu)

第五單元 ?演化式設(shè)計(jì)內(nèi)容一:演化式設(shè)計(jì)(Emergent Design)
1.?演化式設(shè)計(jì) Emergent Design
2.?演化設(shè)計(jì)--重構(gòu)帶來了一種新的構(gòu)設(shè)計(jì)方法,稱為反思性設(shè)計(jì)(Reflective Design)。除了創(chuàng)建一種設(shè)計(jì)并用代碼實(shí)現(xiàn)它之外,你現(xiàn)在還可以分析已有代碼的設(shè)計(jì)并改善它。尋求改進(jìn)的一種最好的方法是通過代碼嗅覺(code smells).
3.?在詳細(xì)設(shè)計(jì)之中,如何對發(fā)現(xiàn)問題的設(shè)計(jì)進(jìn)行重構(gòu)
4.?很多公司習(xí)慣做大量的預(yù)習(xí)設(shè)計(jì),這被證明是風(fēng)險(xiǎn)很高的做法。好的架構(gòu)和設(shè)計(jì)是演進(jìn)出來的,通過這個(gè)環(huán)節(jié)了解演進(jìn)式設(shè)計(jì)的方法,包括演進(jìn)式設(shè)計(jì)的方法、工具、模式等內(nèi)容。包括如何計(jì)劃重構(gòu)活動以實(shí)現(xiàn)架構(gòu)演進(jìn),如何從設(shè)計(jì)方法、技術(shù)債務(wù)、復(fù)雜性等角度看架構(gòu)演進(jìn)
5.?案例分析, 根據(jù)課程介紹的壞癥狀,進(jìn)行重構(gòu)合理的設(shè)計(jì)內(nèi)容二:設(shè)計(jì)的新認(rèn)識源代碼就是設(shè)計(jì)
1.?傳統(tǒng)代碼認(rèn)識的誤區(qū)
2.?設(shè)計(jì)與施工分離的誤區(qū)
3.?源代碼就是設(shè)計(jì)
4.?分析真實(shí)項(xiàng)目代碼, 認(rèn)識代碼的重要性.垃圾代碼的危害內(nèi)容三:拙劣設(shè)計(jì)的壞癥狀和重構(gòu)
1.?拙劣設(shè)計(jì)概述
2.?拙劣設(shè)計(jì)常見癥狀以及如何發(fā)現(xiàn)和治療
3.?在詳細(xì)設(shè)計(jì)之中,如何對發(fā)現(xiàn)問題的設(shè)計(jì)進(jìn)行重構(gòu)
4.?代碼壞味道概述
5.?常見的重構(gòu)設(shè)計(jì)方式
6.?重構(gòu)到設(shè)計(jì)模式
7.?案例分析-對實(shí)際項(xiàng)目的案例進(jìn)行代碼分析和重構(gòu)
8.?案例分析, 根據(jù)課程介紹的壞癥狀,進(jìn)行實(shí)際項(xiàng)目重構(gòu)的設(shè)計(jì)

內(nèi)容四:案例---某零售項(xiàng)目系統(tǒng)分析
1.?零售租賃管理系統(tǒng)
2.?第一版本設(shè)計(jì)和評審
3.?故障單類型的增加
4.?傳統(tǒng)設(shè)計(jì)的問題與如何通過代碼進(jìn)行演化

第六單元 ?關(guān)注人- 設(shè)計(jì)師與技能的思考內(nèi)容一:設(shè)計(jì)師與設(shè)計(jì)技能
1.?某研發(fā)團(tuán)隊(duì)5年前引入敏捷的失敗教訓(xùn)-能力比方法重要,但改變方法比改變能力簡單多了
2.?無論什么道什么術(shù),什么方法或思想,離開了人都是虛妄。優(yōu)秀的設(shè)計(jì)來自優(yōu)秀的設(shè)計(jì)師,因此應(yīng)該首先是尊重個(gè)體的主動和創(chuàng)造性,提高個(gè)體工作技能,而不是應(yīng)用了一種流程,消滅了個(gè)體的活力。首先關(guān)注人,才能真敏捷。
3.?案例分析, 某研發(fā)中心引入敏捷的實(shí)戰(zhàn)分析,什么才是真正的敏捷。內(nèi)容二:設(shè)計(jì)師能力模型
1.?設(shè)計(jì)能力金字塔
2.?軟件設(shè)計(jì)價(jià)值觀
3.?軟件設(shè)計(jì)原則
4.?軟件設(shè)計(jì)模式
5.?軟件設(shè)計(jì)最佳實(shí)踐
6.?通過某研發(fā)中心的設(shè)計(jì)師能力模型分析,設(shè)計(jì)能力提升計(jì)劃
第七單元 軟件內(nèi)容一:軟件復(fù)用設(shè)計(jì)
1.?在詳細(xì)設(shè)計(jì)之中,分析發(fā)現(xiàn)共同的行為的抽象和共同的機(jī)制來實(shí)現(xiàn)
2.?軟件通用服務(wù)組件的設(shè)計(jì)
3.?復(fù)用已有的東西,比自己編寫更容易。如果不容易,大家就不會去復(fù)用。
4.?軟件復(fù)用的管理策略
5.?對象級別復(fù)用
6.?模塊級別復(fù)用
7.?架構(gòu)層次復(fù)用
8.?軟件復(fù)用之道
9.?案例分析復(fù)用的設(shè)計(jì)之道內(nèi)容二:某電信項(xiàng)目案例-異常處理框架設(shè)計(jì)
1.?系統(tǒng)的異常處理策略
2.?設(shè)計(jì)一個(gè)通用異常處理子系統(tǒng)
3.?分析如何應(yīng)用設(shè)計(jì)模式在該案例
4.?分析通過應(yīng)用設(shè)計(jì)模式,帶來了哪些好處(表現(xiàn)在軟件的靈活性)
5.?分析如何轉(zhuǎn)換為Framework
典型案例分析:該框架已經(jīng)在多個(gè)大型項(xiàng)目之中應(yīng)用
第八單元 軟件設(shè)計(jì)案例分析內(nèi)容一:大型軟件項(xiàng)目設(shè)計(jì)案例分析-案例分析結(jié)合以上章節(jié)
1.?某電信核心系統(tǒng)設(shè)計(jì)最佳實(shí)踐和案例分析
2.?某電力系統(tǒng)設(shè)計(jì)最佳實(shí)踐和案例分析
3.?某Web互聯(lián)網(wǎng)電子商務(wù)系統(tǒng)設(shè)計(jì)最佳實(shí)踐和案例分析
4.?某稅務(wù)系統(tǒng)設(shè)計(jì)最佳實(shí)踐和案例分析(LJ)