Continuous Integration

CI是最近公司流行要做的practice. 但是很多人還是不知道它是什, 以及它有什麼功用. 因此小弟在此survey了一下,來跟大家介紹.

1. Agile Software Development
不能免俗的先介紹一下agile宣言是什麼, 從這宣言中再導出什麼事CI要focus的
(1) 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
(2) What is CI
a. Continuous Integration helps us to deliver working software
b. In a nutshell, Continuous Integration (CI) is assembling software every time code changes
c. CI is important because Integrating software often decreases the life-span of a defect
d. From Martin Fowler
   - “ … is a software development practice where  members of a team integrate their work frequency…”
   - Each integration is verified by an automated build (including test) to defect integration errors as quickly as possible

2. What CI Can Checks
(1) Inspection
   - Complexity: SourceMonitor
   - Duplication
   - Dependencies: NDepend, SourceMonitor
   - Coding standards
   - Code coverage: NCover, BullsEye
(2) Functional Testing
(3) Unit Testing
(4) Performance Testing

3. What is not Continuous Integration
(1) Continuous!
   - It’s really refers to an activity that is frequency or continual
(2) Dependent on the adoption of Agile Development
   - Although it enables such an approach
(3) A tool or set of tools
   - It is a practice or philosophy that a team has to buy into
   - Recall: individuals and interactions over processes and tools
(4) Difficult
   - Hey, I can do it!
(5) NEW!
   - And I’ve been sort of doing it for years without knowing it

4. How Does CI Complement Other Development Practices
(1) Developer testing
   - CI enable automated regression tests to be run the entire code when code changes
(2) Coding standard adherence
(3) Refactoring
   - CI assist with refactoring by running inspection tools that identify potential problem areas
(4) Small releases

5. Conclusion
(1) Detect integration errors as quickly as possible
(2) Assume a high degree of tests
(3) Always have a deployable build
(4) Generate metrics to guide project management
(5) Continuous Integration is vital for Agile development

6. References
(1) “Continuous Integration – Improving software quality with continuous integration”, Andrew Glover, Stelligent
(2) “Continuous Integration for Ruby on Rails”, Ross Niemi, ThoughtWorks


kojenchieh 發表在 痞客邦 留言(0) 人氣()