所在位置:首頁 -- 企業內訓 -- 正文

代碼整潔之道-卓越軟件代碼質量體系最佳實踐內訓課程


發布時間:2013-2-17  來源:admin

一、為什么需要該課程
管理者最擔心聽到開發人員這樣抱怨:“不能再增加功能了!我們得停下來重寫代碼。軟件代碼一團糟,就像紙糊的老虎,根本應付不了持續增加的用戶需求。我們實在維護不下去了!最好推倒重寫吧”
這一幕在很多公司上演過,現在依然在不斷重演。一旦公司陷入這種困境,以前版本的開發者往往淪為替罪羊。新的開發者一般就會罵前人怎么寫這么爛的代碼。他們準備推倒重來,準備重寫系統。在重寫代碼的過程中,用戶無法看到產品的任何改進。你可能認為重寫代碼至多也就幾個月,但是實際花費的時間無一例外要多得多。你只能坐在一旁,眼睜睜看著用戶投奔競爭對手,而這個時候,競爭對手恰恰在不斷地改進產品。
因此我們認為軟件質量,不但依賴于架構及項目管理,而且與代碼質量緊密相關。這一點,無論是敏捷開發流派還是傳統開發流派,都不得不承認。干凈整潔的代碼,既在質量上較為可靠,也為后期維護、升級,架構演進奠定了良好基礎。在最近幾年的業界,大家都把精力花費在了軟件需求,架構,過程和管理等,反而代碼這個與軟件開發骨肉相連的環節反而被忽視了。
我們研發中心有一個理念”代碼是債務而不是資產”。最開始,團隊會編寫代碼,做出產品,并用它來賺錢,但是,之后團隊應該盡可能地尋找減少代碼的方法和使代碼盡量整潔,從而降低成本。軟件界有一個真理,你擁有的代碼越多,維護代碼所要付出的成本就越高。如果你的代碼結構越好,你做了越多的單元測試,你的代碼質量越好、越小、耦合越松,那么添加新代碼所需要付出的成本就越少。因此OOP大師 Craig Larman: “最好維護的代碼就是沒有代碼,好的程序員的代碼產量是負的,因為他通過減少代碼來增加功能”。對比現實中,很多人以為,LOC(line of code)越多的feature越大,寫LOC越多的程序員越牛。這其實是極其錯誤的觀念。
因此我們必須有全面的管理制度讓我們保持代碼少而整潔。所以軟件大師Michael Feathers認為"未來屬于知道如何有策略地刪除代碼的公司”。持有代碼的成本要比我們想象的大。意識到這一點的公司更具有競爭優勢。
為了切實幫助軟件企業降低企業項目開發成本,大面積提高軟件工程師編程能力和代碼質量管理能力,我們特別推出了代碼質量實戰訓練營. 分享多家大型研發中心代碼管理經驗給大家. 該課程適應于各個階段的技術人員.初級工程師能夠透過大師的眼睛來看待編程,了解編程的價值觀和原則;具有豐富經驗的設計師和架構師可以通過模式進行反思,探究成功實踐背后的意義.把價值觀,原則和開發實踐結合;管理者通過學習業界著名研發中心的管理經驗和失敗的教訓,來制定自己公司的代碼管理策略.質量管理相關人員學習如何定制代碼質量指標,通過哪些工具進行監控,怎樣管理代碼質量。
 

 

我們已經為幾十家企業提供了多次培訓和咨詢服務,以下企業已經選擇了我們的內訓課程
互聯網研發企業,比如百度研發中心2次,阿里巴巴1次
電信研發企業,比如思科研發中心5次,阿爾卡特-朗訊研發中心11次,華為研發中心 1次,摩托羅拉研發中心 1次,大唐電信研發 1次
企業軟件研發企業,比如Adobe中國研發中心,北京久其研發中心,博古中國研發中心
嵌入式軟件企業,比如阿爾卑斯中國研發中心,德國M&M Software,西門子研發中心
外包類企業,聯盟計算機服務(天津)有限公司ACS 3次。
金融行業:恒生電子2次,華騰1次,中國人民銀行研發中心,工商銀行研發中心

我們已經為幾十期公開課,已經有100多家企業已經選擇了我們的公開課程
騰訊(深圳)有限公司, EMC中國研發中心,華為終端有限公司、 斯倫貝謝技術,通用電氣醫療系統(中國)有限公司,華為技術有限公司,廣州從興電子開發有限公司、福建星網銳捷股份有限公司,廣州菲特網絡科技有限公司,盛立金融(杭州)軟件公司 ,索尼中國研發中心, 愛德萬,上海金慧軟件有限公司,珠海世紀鼎利通信科技股份,蘭吉爾儀表系統有限公司,珠海飛企軟件有限公司,廣東佳和通信技術有限公司,珠海一多監測科技有限公司,遠光軟件股份有限公司

你可以參加嗎?
各類軟件企業和研發中心的程序員、軟件設計師、架構師, 項目經理,質量部門員工。
- 如果你不重視代碼質量, 請不要參加. 本課程面向重視代碼質量的管理者。
- 如果你不認為寫好代碼是一件重要,困難并且有趣的事情,請你不要參加. 本課程面向追求卓越的程序員,我們認為編程是一種態度。
- 如果你已經多年不寫代碼,最好不要參加,本課程面向一線還在編程的程序員/設計師/架構師。

你的角色和收獲
課程根據著名編程大師的理論:
編程是一種態度,編程是一種技藝,編程是一種習慣。
面向以下不同的人群,有不同收獲。

角色
收獲
技術負責人/技術總監
樹立代碼質量意識
代碼是債務
代碼的兩面性,靜態結構與動態功能
軟件技術債務和代碼腐化
國際多家著名研發企業的代碼質量管理思想
項目經理/項目管理人員/架構師
- 學習其他研發機構的代碼管理思想
- 代碼管理手段
- 代碼管理相關流程和相關工具
- 代碼監控
測試部門/質量管理部門
- 代碼審查
- 代碼檢查列表
- 代碼管理手段
- 代碼管理制度的建立
資深開發人員
- 編程技藝和相關編程實踐
- 重構手段
一般開發人員
- 編程技藝和相關編程實踐
- 重構手段
- 代碼壞味道

你有這樣的基礎嗎?
學員學習本課程應具備下列基礎知識:
了解Java/C#或者C++/C或者其他任何一種編程語言,你一定要寫過代碼吧!

第一篇: 編程是一種態度-------價值觀
主題
培訓內容
第1單元
代碼就是債務

內容一:代碼是債務
1、 代碼的認識---代碼就是債務
2、 代碼是債務,越少越好
3、 你擁有的代碼越多,添加新內容所要付出的成本就越高
4、 通過案例分析讓代碼庫盡可能小的方法:
5、 通過國際研發中心電信計費系統演示代碼是債務的思想,10多年國外研發團隊設計與研發第一版本,目前幾百人在維護
通過項目演示通過重構如何減少了一半的代碼,維護的人員的減少

項目的失敗可能歸咎于各種各樣的原因。一些項目因糟糕的需求而失敗,另一些則由于錢和時間超支了,還有少數單純是因為糟糕的管理所致。如果我們探究其根本原因,是否會發現所有項目失敗的罪魁禍首是糟糕的代碼呢?

Bob大叔堅信糟糕的代碼所帶來的成本之大足夠讓一個項目失敗。

內容二 軟件界要以新視角看待代碼
1、
傳統的軟件工程對代碼的錯誤認識
2、 代碼的兩面性,代碼的靜態結構和運行時行為
3、 客戶和管理者往往僅僅關注代碼的運行時的行為
4、 溫伯格認為的主管必須關注代碼
5、 軟件設計與代碼的關系—真正好的設計是在編碼階段一步一步而形成的,通過案例分析,設計如何根據代碼進行演化
6、 編程真的是簡單的勞動嗎?
7、 通過多家項目案例進行分析,傳統思想對代碼的種種誤解,我們提出了從3種新的角度來觀察代碼,
a)從管理者的角度,我們僅僅觀察代碼的運行時行為,導致代碼的靜態結構混亂的根源。這就是代碼的冰山原理,大量垃圾代碼隱藏在冰山之下。
b)設計師的角度認為只要有好的設計,軟件質量就可以保證。其實我們認為代碼是真正唯一可以精確描述的設計文檔。
c )程序員的視角,編程真的很難,通過某一個項目案例分析,20多人一周的工作量就為幾行代碼問題

第2單元
編程價值觀

內容一:編程價值觀
1、
編程的方法學
2、什么是好的代碼,我們卻認為“Good code is not bad code !”
3、編程價值觀---溝通,簡單,靈活
4、價值觀決定行為
5、優秀代碼的評價標準, 什么是高質量編碼? 特征是什么?
6、軟件代碼的可讀性
7、代碼的可擴展性
8、糟糕代碼的特征
9、劣質代碼的代價
10、大師評價整潔代碼的標準
11、 通過大量項目案例分析,什么是好的代碼,對好代碼新的認識

第二篇: 編程是一種技藝-------實踐篇
第3單元
高質量函數
內容一:高質量函數/過程
1、為什么需要函數
2、函數復雜度度量
3、函數圈復雜度以及度量
4、函數抽象層次-單一抽象層次原則SLAP(Single Level of Abstrction Principle)
5、函數實現模式之—組合函數(Composed Method)
6、萬惡之源—函數過長
7、函數第一原則:是要短小,函數第二原則:是還要短小,函數第三原則:是必須短小
8、函數重構之道—抽取方法(Extract Method)和抽取對象函數
9、函數命名—怎樣取好的函數名
10、通過大量項目代碼分析,函數的遇到的各種問題,如何編程高質量函數

內容二:函數代碼重復
1、重復的危害
2、 強加的重復/無意的重復/無耐心的重復/開發者之間的重復
3、 不要重復自己DRY—Don't Repeat Yourself Principle
4、Make It Easy to Reuse(讓復用變得容易)
5、魔法數(Magic number)
6、重復性代碼(Duplicated Code)
7、接口不同的相似類(Alternative Classes with Different Interfaces)
8、系統分離關注點
9、系統架構的基礎通用服務組件
10、通過某項目代碼是介紹重復編碼問題
11、演示研發過程之中的常見重復問題,以及如何解決

內容三:函數參數
1、函數參數過長
2、最理想的參數數量是零,其次是一,再次是二,有足夠的理由才能使用三個以上參數.
3、函數參數重構之道-引入參數對象(introduce parameter object)
4、函數參數的順序
5、不要把程序參數當做工作變量/臨時變量
6、函數參數模式-collecting parameter
7、函數返回值
8、通過大量項目代碼是函數參數問題
9、演示函參數的重構


內容四:條件表達式
1、IF/ELSE語句應該如何編寫
2、Switch/Case語句應該如何編寫
3、復雜條件表示式的危害
4、過分深層的縮進,或者“嵌套”,已經困擾了計算機界達25年之久,并且至今仍然是產生混亂代碼的罪魁禍首之一
5、復雜表達式重構之道—引入解釋變量/分解條件/抽取方法計算條件
6、表驅動法-多級嵌套IF語句的必然之道
7、表驅動法使用總則
8、某保險項目表驅動法應用案例分析
9、通過大量項目代碼演示條件表達式編碼問題
10、復雜表達式的注意事項,如何解決

內容五:利用多態解決復雜表達式
1、面向對象多態技術的新認識
2、減少使用if語句,重構到多態
3、以State/Strategy取代類型代碼
4、引入Null Object
5、以Command替換條件調度程序
6、轉移聚集操作到Visitor
7、轉移裝飾功能到Decorator
8、通過大量項目代碼演示多態可以解決的編程問題

 

第4單元
高質量類

內容一:類基礎-數據抽象類型(Abstract Data Types)
1、類的基礎:抽象數據類
2、需要用到ADT的場景
3、使用ADT的益處
4、基本類型依賴壞味道
5、數據泥團壞味道
6、案例—通過電信項目介紹數據的抽象
7、通過大量項目代碼演示數據抽象類型解決的問題

內容二:面向對象設計----職責分配
1、單一職責原則
2、RDD-職責驅動的面向對象設計方法
3、上帝類,代碼之中的大量的上帝類
4、通過案例分析,如何進行設計高質量類和重構

內容三:面向對象的編程
1、上帝類/過大的類--違反單一職責
2、依戀情結-一個方法視乎過于強調處理其他類的數據,而不是處理自己的數據
3、發散式改變
4、散彈式修改
5、消息鏈
6、中間人
7、不當的緊密性
8、案例—通過電信項目介紹OOP

第5單元
單元測試與代碼可測試性

內容一:單元測試
1、單元測試基本知識
2、單元測試框架提供了什么功能
3、好的測試是什么樣子的
4、為什么要寫單元測試,為什么不寫單元測試
5、為什么要寫"好"的單元測試
6、通過案例分析單元測試的基本概念,以及如何評價好的單元測試,單元測試為價值。

內容二:編寫可測試代碼
1、
如何編寫可信賴的測試
2、如何編寫可維護性的測試
3、如何編寫可讀的測試
4、測試代碼的重構
5、 通過大量真實項目案例分析如何編寫可測試性代碼

第三篇: 編程是一種習慣-------管理篇
第6單元
代碼重構

內容一:代碼重構
1、重構必然性
2、破窗效應與技術債務
3、 實際重構遇到的4大問題
a)如何發現重構點
b)如何去重構(重構方式)
c)如何知道重構何止截止
d)如何保證重構的正確性
4、介紹常見的重構技術
5、重構到模式的目錄
6、 通過多個案例分析,重構面臨的問題和解決之道

內容二:大型項目的重構案例分析
1、通過大型項目的重構,分析重構的最佳實踐

內容三:重構目錄
1、重構名錄
2、介紹常見的重構技術
3、分別通過相關案例展示重構手段
4、 通過項目的重構案例,分析重構的手段

第7單元
修改遺留系統代碼

內容一:修改遺留項目代碼
1、必須修改遺留的代碼起因
2、遺留代碼修改危險事項
3、如何對依賴代碼做測試
4、依賴代碼的感知與分離
5、依賴代碼修改的接縫技術
6、修改依賴代碼的工具
7、降低風險的措施
8、接依賴技術
9、通過多個大型項目案例分析,如何修改遺留代碼,分析如何解耦

內容二:拒絕退化-如何修改遺留系統,而不破壞現有系統結構
1、拒絕退化—“首先不要傷害”
2、Sprout Method
3、Sprout Class
4、Wrap Method
5、Wrap Method
6、通過案例分析,如何修改遺留代碼,而不破壞現有系統代碼結構

第8單元
代碼質量體系最佳實踐

內容一:代碼質量管理4個現代化
1、代碼管理的4個現代化
a)質量量化(如何設置質量指標)
b)工具化(如何尋找合適的工具
c)自動化(把流程自動化,忘記流程)
d)持續優化(反思與優化)
2、多家電信研發中心,如何實現4個代碼現代化

內容二:代碼靜態分析工具
1、代碼靜態分析工具概述
2、以Java語言代碼靜態分析工具為例介紹,該內容的思想仍然適合其他語言
a)Sonar集成平臺
b)CheckStyle:用于編碼標準
c)PMD 的 CPD:幫助發現代碼重復
d)Coverlipse:測量代碼覆蓋率
e)Depend:提供依賴項分析
f)Metric:有效地查出復雜度
g)其他語言相關代碼靜態分析工具
3、通過案例演示工具在項目之中的應用

內容三:代碼評審
1、代碼評審前期準備
2、代碼評審的代碼量
3、代碼評審的檢查表
4、代碼評審的總結與學習

內容四:代碼質量管理體系
1、結合國內多家研發中心的代碼管理經驗分享
2、代碼質量體系的建立

中国比特币暴涨 安徽时时快3玩法 江西十一选5 今日华东15选5开奖结果 内蒙古时时怎么查 马会特供资料站 老时时开奖结果今天 重庆时时在手机 云南快乐10技巧 pk10冠亚和值口诀 北京时时彩开奖 重庆时时可以发财吗 快乐十分怎么选号陕西 快乐12开奖结一定牛 重庆时时彩 云南快乐十分开奖杳询 皇家北京赛pk10app