Agile development

30
Agile development( 敏敏敏 敏) 2014/04/03 Sway Wang

description

Agile software development introduction.

Transcript of Agile development

Page 1: Agile development

Agile development( 敏捷開發 )

2014/04/03Sway Wang

Page 2: Agile development

Outline

• 傳統的軟體工程• 敏捷開發 (Agile development)• Extreme Programming• Scrum• 實務上常使用的工具• 結論

Page 3: Agile development

傳統的軟體工程

• Capability Maturity Model Integration(CMMI)• UML• 瀑布式開發 (Waterfall Development )• 強調寫文件的重要性

• 需求分析規格書 • 系統分析規格書 • 系統設計規格書 • 系統測試設計規格書 • 系統測試計畫書 • 系統測試報告書

Page 4: Agile development

Use-case diagram

Page 5: Agile development

Class diagram

Page 6: Agile development

Sequence diagram

Page 7: Agile development

敏捷開發 (Agile development)

• 1995 年後,陸續有人提出敏捷開發的觀念• Lightweight agile software development

methods

• 主張軟體有容易改變的特性,改變是無法避免的• 擁抱改變以及即時回饋• Small release (release 週期短, 2 周 ~ 一個月 )

Page 8: Agile development

The Agile Manifesto ( 敏捷宣言 )

• Individuals and interactions over processes and tools• Working software over comprehensive documentation• Customer collaboration over contract negotiation• Responding to change over following a plan

個人與互動 重於 流程與工具 可用的軟體 重於 詳盡的文件 與客戶合作 重於 合約協商   回應變化 重於 遵循計劃 

雖然右側項目有其價值,但我們更重視左側項目。http://agilemanifesto.org/

Page 9: Agile development

The Agile Principles ( 敏捷原則 )

• 最為優先的事情是透過早期與持續交付有價值的軟體來使客戶滿意。

• 歡迎需求的變動,即使是在開發的晚期。敏捷式流程駕馭變動來作為客戶的競爭優勢。

• 頻繁的交付工作產生的軟體,自數週至數月,週期越短越好。

• 領域專家與開發成員必須一同作業,並貫穿整個專案開發時期。

• 使用積極的工作成員來建構專案,給予他們環境以及支援所需的一切,然後信任他們能夠完成工作。

Page 10: Agile development

The Agile Principles ( 敏捷原則 )

• 在開發團隊中最快也最有效的傳遞資訊方法就是面對面的溝通。

• 工作產生的軟體是衡量進度最主要的依據。• 敏捷式流程倡導水平一致的軟體開發• 專案發起者,開發人員以及使用者都必須持續的維持專案進

度。• 持續重視技術的優勢以及設計品質• 最好的架構、需求以及設計會出現在能夠自我管理的團隊裡• 在規律的反覆之間,團隊會反省與思考如何更有效率,然後相

對的來調整與修正團隊的開發方式。http://agilemanifesto.org/principles.html

Page 11: Agile development

Reference Bookhttp://www.amazon.com/Software-Development-Principles-Patterns-Practices/dp/0135974445

Page 12: Agile development

Extreme Programming(XP)

• Extreme Programming was created by Kent Beck(Facebook)

• 強調自動測試和軟體品質

• Pair programming• Unit test( 單元測試 )• Code review• Refactoring ( 重構 )• Test driven development(TDD)• 測試程式取代文件

Page 13: Agile development

Reference Bookhttp://www.amazon.com/Extreme-Programming-Explained-Embrace-Edition/dp/0321278658

Page 14: Agile development

Pair Programming

• 兩人共用一台電腦一起開發程式

• 常見疑問:生產力減半

• 軟體品質 v.s. 軟體開發速度

• 優點– 軟體品質佳– 經驗傳承– 同份 code 有兩個人懂

Page 15: Agile development

Unit Test( 單元測試 )

• 測試單一模組的正確性 (比如說函式或類別 )

• 在修改程式碼後通常會重跑一次所有的單元測試,確認功能正常

• 如何讓程式容易被測試是一門學問– Class 之間低耦合– 高模組化– 所有邏輯都寫在 main或一個 if 的程式難以被測試

• 自動測試 framework– C#: Nunit– Java: JUnit

Page 16: Agile development

Code review

• (Google) 使用者 commit code 時會先執行 coding style檢查,並由系統分配一位reviewer 進行 code review 。

Page 17: Agile development

Refactoring( 重構 )

• XP鼓勵經常做重構• 要有完整的單元測試下才能進行重構

Page 18: Agile development

Test Driven Development(TDD)

• 開始實做程式碼前先寫測試程式• 通過所有測試程式後程式就開發完成

• 優點:– 開發程式時自然會容易測試– 寫測試程式時可以順便釐清問題

Page 19: Agile development

Scrum

• 更精簡的一種敏捷開發方法• 不需要複雜的基礎建設,使用便條紙管理

Item

Page 20: Agile development

Daily Meeting昨天做了什麼事? (或 今天做了什麼事 , 依開會時間而定 )今天要做什麼事? (或 明天要做什麼事 , 依開會時間而定 )工作上是否遇到任何阻礙或問題? ( 主持者 (Scrum Master) 必須快速解決成員所遇到的困難。 )

Page 21: Agile development

實務上常搭配的工具

Page 22: Agile development

Version Control System

Page 23: Agile development

Issue Tracking System

• 改善傳統 Email + Excel  的方法• Ex: Redmine, trac, mantis• 團隊內部透明• 處理事項目前的執行狀態• 優先權的分配• 執行人• Wiki功能

Page 24: Agile development

Continuous integration(持續整合 )

• CI Server

• 固定時間自動從 SVN 上 check out code編譯 (Daily build)

• 自動執行單元測試以及靜態程式碼分析工具

• 產生報表和 email 通知相關人員

Page 25: Agile development
Page 26: Agile development
Page 27: Agile development
Page 28: Agile development

OOP

• 要寫出好的測試程式,程式的架構很重要

Page 29: Agile development

結論• 敏捷開發對團隊內成員個人能力要求較高• 目前主流開發方式是混用各種方法的適合

團隊的地方,調整成適合內部使用的方法

Page 30: Agile development

Q & A

• Thanks for your listening!!