400-888-5228

課程介紹:

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

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

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

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

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

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

課程特色:

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

報名條件:

學員學習艾威軟件設計最佳實踐和案例分析課程應具備下列基礎知識:

  1. 1)至少2年以上開發(fā)經驗,經歷過頻繁需求變更或者系統(tǒng)重復開發(fā)的折磨。
  2. 2) 熟悉Java/C#/C++任意一種面向對象語言或者具備面向對象編程基本概念。
  3. 3) 一般軟件企業(yè)的設計人員和初級架構師,以及資深程序員。

 

部分客戶:

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

 

課程體系:

  
課程體系結構

 

課程主題內容
項目案例6個真實大型項目案例
設計過程分析如何進行設計, 權衡過程
設計價值觀不僅僅實現功能,關注設計質量屬性(可維護性和復用)
設計原則軟件設計的基本原則
設計模式常見架構/設計模式
設計建模敏捷UML建模
設計最佳實踐設計的最佳實踐

 

課程大綱:

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

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

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

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

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