您好!歡迎來到確立達集團 · 惠州公司,制造培訓網!
咨詢熱線
您現在的位置:首頁 > 培訓課程分類 > 研發管理
軟件高質量代碼體系最佳實踐
發布日期:2020-04-08  瀏覽次數:

軟件高質量代碼體系最佳實踐

【課程背景】
    軟件質量,不但依賴于架構,設計以及項目管理,而且與代碼質量緊密相關.這一點,無論你使用什么開發技術,都不得不承認. 代碼是程序員溝通最直接的手段,代碼是技術交流的手段,代碼是需求交流的途徑。重視代碼,回歸本源,曾經我們遠離代碼,談架構設計,談UML,談開發流程。如今我們落地,找回軟件的本源,徹徹底底看清代碼、深入思考代碼。那些一流的研發中心非常重視代碼,Facebook就有經典的Code wins arguments(代碼贏得爭論)。在Facebook 做 code review時間大約占50%,管理者對代碼質量負有一定責任 。甚至代碼質量高于一切:Facebook Code review是重點KPI考核的對象,實行連坐制,如果因為代碼質量問題,那么產生的KPI責任包括領導30%、程序員50%、審核人員20%。 
    但是我們的管理者經常聽到開發人員這樣抱怨:“不能再增加功能了!我們得停下來重寫代碼。軟件代碼一團糟,就像紙糊的老虎,根本應付不了持續增加的用戶需求。我們實在維護不下去了!最好推倒重寫吧” 
    這一幕在很多公司上演過,現在依然在不斷重演。一旦公司陷入這種困境,以前版本的開發者往往淪為替罪羊。新的開發者一般就會罵前人怎么寫這么爛的代碼。他們準備推倒重來,準備重寫系統。在重寫代碼的過程中,用戶無法看到產品的任何改進。你可能認為重寫代碼至多也就幾個月,但是實際花費的時間無一例外要多得 多。你只能坐在一旁,眼睜睜看著用戶投奔競爭對手,而這個時候,競爭對手恰恰在不斷地改進產品。 
    我們研發中心有一個理念”代碼是債務而不是資產”。最開始,團隊會編寫代碼,做出產品,并用它來賺錢,但是,之后團隊應該盡可能地尋找減少代碼的方法和使代碼盡量整潔,從而降低成本。軟件界有一個真理,你擁有的代碼越多,維護代碼所要付出的成本就越高。如果你的代碼結構越好,你做了越多的單元測試,你的代碼質量越好、越小、耦合越松,那么添加新代碼所需要付出的成本就越少。因此大師 Craig Larman說: “最好維護的代碼就是沒有代碼,好的程序員的代碼產量是負的,因為他通過減少代碼來增加功能”。對比現實中,很多人以為,LOC(line of code)越多的feature越大,寫LOC越多的程序員越牛。這其實是極其錯誤的觀念.
    因此我們必須有全面的管理制度讓我們保持代碼少而整潔。所以Michael Feathers認為"未來屬于知道如何有策略地刪除代碼的公司”。持有代碼的成本要比我們想象的大。意識到這一點的公司更具有競爭優勢。 
    為了切實幫助軟件企業降低企業項目開發成本,大面積提高軟件工程師編程能力和代碼質量管理能力,我們特別推出實戰訓練營. 分享多家大型研發中心代碼管理經驗給大家. 
    該課程適應于各個階段的技術人員.初級工程師能夠透過大師的眼睛來看待編程,了解編程的價值觀和原則;具有豐富經驗的設計師和架構師可以通過實現模式進行反思,探究成功實踐背后的意義.把價值觀,原則和開發實踐結合;管理者通過學習業界著名研發中心的管理經驗和失敗的教訓,來制定自己公司的代碼管理策略. 質量管理相關人員學習如何定制代碼質量指標,通過哪些工具進行監控,怎樣管理代碼質量。 
【課程對象】
各類軟件企業和研發中心的程序員、軟件設計師、架構師, 項目經理,質量部門員工。 
l 如果你不重視代碼質量, 請不要參加. 本課程面向重視代碼質量的管理者. 
l 如果你不認為寫好代碼是一件重要,困難并且有趣的事情,請你不要參加. 本課程面向追求卓越的程序員,我們認為編程是一種態度. 
l 如果你已經多年不寫代碼,最好不要參加,本課程面向一線還在編程的程序員/設計師/架構師 
【課程收益】
課程根據著名編程大師的理論: 編程是一種態度,編程是一種技藝,編程是一種習慣。 
面向以下不同的人群,有不同收獲。


角色

收獲

技術負責人/技術總監

1、了解業內先進的代碼審查的形式、技術、技巧和流程的成功經驗,優化現有開發中心代碼審核方法;
2.   2、掌握業內成熟的自動化審核審查工具及方法,提升開發人員在代碼結構分析、代碼質量度量、代碼覆蓋率分析等方面的能力,并有效運用到項目研發工作中。

項目經理/項目管理人員/架構師

1.   1、學習其他研發機構的代碼管理思想
2.   2、代碼管理手段
3.   3、代碼管理相關流程和相關工具
4.   4、代碼監控

測試部門/質量管理部門

1.   1、代碼審查
2.   2、代碼檢查列表
3.   3、代碼管理手段
4.   4、代碼管理制度的建立

資深開發人員

1.   1、掌握代碼編碼規范、代碼評審要點等知識,引導開發人員養成正確的代碼編寫習慣;
2.   2、編程技藝和相關編程實踐
3.   3、重構手段

一般開發人員

1.   1、編程技藝和相關編程實踐
2.   2、重構手段
3.   3、代碼壞味道

 
【課程大綱】
第一篇: 編程是一種態度-------價值觀
第1單元  代碼就是債務
內容一:代碼是債務

1.      代碼的認識---代碼就是債務
2.      代碼是債務,越少越好
3.      你擁有的代碼越多,添加新內容所要付出的成本就越高
4.      通過案例分析讓代碼庫盡可能小的方法:
5.      通過國際研發中心電信計費系統演示代碼是債務的思想,10多年國外研發團隊設計與研發第一版本,目前幾百人在維護
v 通過項目演示通過重構如何減少了一半的代碼,維護的人員的減少
項目的失敗可能歸咎于各種各樣的原因。一些項目因糟糕的需求而失敗,另一些則由于錢和時間超支了,還有少數單純是因為糟糕的管理所致。如果我們探究其根本原因,是否會發現所有項目失敗的罪魁禍首是糟糕的代碼呢?
Bob大叔堅信糟糕的代碼所帶來的成本之大足夠讓一個項目失敗。
內容二軟件界要以新視角看待代碼
1.      傳統的軟件工程對代碼的錯誤認識
2.      代碼的兩面性,代碼的靜態結構和運行時行為
3.      客戶和管理者往往僅僅關注代碼的運行時的行為
4.      溫伯格認為的主管必須關注代碼
5.      軟件設計與代碼的關系—真正好的設計是在編碼階段一步一步而形成的,通過案例分析,設計如何根據代碼進行演化
6.      編程真的是簡單的勞動嗎?
7.      通過多家項目案例進行分析,傳統思想對代碼的種種誤解,我們提出了從3種新的角度來觀察代碼
第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.      函數第一原則:是要短小,函數第二原則:是還要短小,函數第三原則:是必須短小
9.      函數重構之道—抽取方法(Extract Method)和抽取對象函數
10.   函數命名—怎樣取好的函數名
11.   通過大量項目代碼分析,函數的遇到的各種問題,如何編程高質量函數
內容二:函數易理解與溝通
1.      函數主體流
2.      函數的異常處理
3.      函數主題流程簡化方法1-助手方法
4.      助手方法的應用場景
5.      助手方法的效果
6.      函數主題流程簡化方法2-函數對象(MethodObject)
7.      通過真實項目代碼進行分析,如果提高代碼的可讀性
內容三:函數靈活/易可擴展---函數接縫
1.      歷史遺留代碼維護問題
2.      某電信研發中心的維護問題—開發維護的效率問題。
3.      增加一個功能特性的成本并不單單是為這些功能編碼所花費時間的成本,還應該包括特性擴展的障礙成本。
4.      代碼的可維護成本分析—通過大量案例分析
5.      如何實現代碼的易擴展—函數接縫
6.      接縫(seam),指程序中的一些特殊的點,在這些點上你無需做任何修改就可以達到改動程序行為的目的
7.      通過案例分析,如何實現函數的靈活/易擴展。
內容四:函數參數
1.      函數參數過長
2.      最理想的參數數量是零,其次是一,再次是二,有足夠的理由才能使用三個以上參數.
3.      函數參數重構之道-引入參數對象(introduce parameter object
4.      函數參數的順序.
5.      不要把程序參數當做工作變量/臨時變量
6.      函數參數模式-collecting parameter
7.      函數返回值
8.      通過大量項目代碼是函數參數問題 
9.      演示函參數的重構 
內容五:變量
1.      “一旦了解在程序設計中如何使用變量,他就掌握了程序設計的精華。”-Dijkstra
2.      為什么需要變量—變量的引入的理由
3.      單一變量用途
4.      變量與方法
5.      變量作用域
6.      變量聲明與初始化
7.      通過案例分析, 函數的變量如何處理與控制。
內容六:函數代碼重復
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.   演示研發過程之中的常見重復問題,以及如何解決
內容七:條件表達式...

 

最新公開課更多>>
神龙365电玩送分下分 高手一尾中特平 绝地求生战绩查询 (★^O^★)MG大航海时代_电子游戏 (★^O^★)MG极速抢钱闯关 网上吉祥彩票平台是真的吗 3d试机号今天晚上金码一 吉林省新快3 (*^▽^*)MG有你的校园_豪华版 码报资料2021大全彩图 体育彩票31选7几点开奖 新疆18选7开奖结果 湖北快三开奖走势图 诺亚彩票平台下载 一肖中特死公式规律 安徽25选5走势图连线 欢乐生肖查欢乐生肖数字代表的生肖 高手一尾中特平 绝地求生战绩查询 (★^O^★)MG大航海时代_电子游戏 (★^O^★)MG极速抢钱闯关 网上吉祥彩票平台是真的吗 3d试机号今天晚上金码一 吉林省新快3 (*^▽^*)MG有你的校园_豪华版 码报资料2021大全彩图 体育彩票31选7几点开奖 新疆18选7开奖结果 湖北快三开奖走势图 诺亚彩票平台下载 一肖中特死公式规律 安徽25选5走势图连线 欢乐生肖查欢乐生肖数字代表的生肖