SlideShare a Scribd company logo
1 of 27
TDD in action
HOW WE APPLIED AT SHIPPO
Tôi là ai
• Nguyễn Xuân Kiên
• PandaTechlead at Shippo
• Đã tham gia nhiều dự án khác nhau trên:
• DELPHI
• ASP.NET
• PHP
• NODE.JS
Tât cả đều KHÔNG có test
Tại sao lại TDD
Quá khứ
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
Nov-15 Dec-15 Jan-16 Feb-16 Mar-16
Tỉ lệ thời gian fix bugs dự án Seudo.vn
Bugs New features Others
Hiện tại
• Thời gian fix bug nằm trong Sprint, trước khi
release
• Bug Product xuất hiện 01 bug/tuần, hot fix nhanh
chóng
• Đã triển khai được một cụm chức năng không có lỗi
trực tiếp
• Đã phát hiện ra lỗi chỉ xuất hiện trên một vài máy cụ
thể
• Continuous Integration
• Continuous Delivery
• Develop new features
• Auto integration to release
• Auto build a prerelease version
• Auto test new version
• Auto Deploy
• Have more Beer AND sleep well at night
Tương lai
Khi nào thì không cần TDD?
• Từ góc độ kỹ thuật: Murphy’s Law
• Anything that can go wrong will go wrong
• Từ góc độ quản lý:
• Dự án có vòng đời ngắn, không cần maintain
• Không có nhu cầu triển khai nhanh và liên tục
• Không thích làm theo Agile
How Agile are
you report 2013
Nhìn ra thế giới
• Google
• Golang
• Guice (Google DI for Java 6)
• GoogleTest
• Microsoft & IBM
• Có nghiên cứu trên các project thực tế
• Others
• Pivotal (PivotalTracker)
• eBay Enterprise
• WeDoTDD.com
Làm thế nào để bắt đầu
• Cần thuyết phục được lãnh đạo
• Thời gian phát triển tăng
• Nhưng liệu bug có giảm?
• Dev quyết tâm
• Thay đổi hẳn về tư duy
• Áp lực chứng minh hiệu quả
• Test first approach
Chuẩn bị về công nghệ
• Gần như luôn sẵn sàng
• Java: JUnit, Faker,…
• JavaScript/Node.js: Mocha, chai,…
• .Net: Microsoft .NetTest Framework, NUnit, Microsoft Fakes,…
• PHP: PHPUnit, PHP Faker,…
• Golang: built-in test (testing package)
• Python: PyUnit
Nâng cao chất lượng
• Đào tạo
• Tổ chức các buổi đào tạo nội bộ
• Tham gia các chương trình đào tạo ngoài
• http://blog.shippo.vn
• Rèn luyện
• Tổ chức chia sẻ kinh nghiệm
• Thực hành
• https://github.com/kiennx/shippo_code_practices
TDD ở Shippo
•Đang triển khai BDD
•Áp dụng kết hợpTDD và BDD
•TDD áp dụng ở mức tự giác cá nhân
BDD ở Shippo
• Tiếp nhận requirement dưới dạng User-Story
• PO, Dev vàTester viết Scenario
• Planning: How to do it
• Code khung cho AutomationTest
• Code khung cho Feature
A Cycle of Life
Write A
Test
Fails
theTest
Write
Code
Pass
theTest
SEE HOW IT RUN
BDD AUTOMATION TEST & MOCHA UNIT TEST
KHÓ KHĂN VÀ SAI LẦM
TDD là Test-first
• Thường được nhắc đến đầu tiên
• Không có feature, làm sao để test?
• TDD không phải chỉ là test trước
Test phụ thuộc lẫn nhau
• Trong nhiều trường hợp, thấy test ngắn hơn
• Khó phát hiện nguyên nhân gây lỗi
• Khó maintain
Kiểm tra nhiều thứ trong cùng một Test
• Cảm thấy test trùng lặp nên gộp vào
• Không xác định được mục tiêu củaTest case
• Khó maintain
Không có thời gian viết test
• Chức năng này quá dễ để có bug
• Hãy nhìn lại bug cost
• Hãy xem lại cách viết test
• Test giúp chúng ta design hệ thống
• Test giúp chúng ta thực sự hiểu yêu cầu
Unit-test, Integration Test, Functional Test,
Acceptance Test
• Gặp khó khăn khi viết Unit-Test
• Test phụ thuộc nhiều vào setup
• Viết test tốn nhiều thời gian hơn
• Dễ phạm phải sai lầm hơn
BDD thì không cần TDD
• BDD không thay thế hoàn toànTDD
• TDD giúp chúng ta biết code chạy
• BDD giúp chúng ta biết sản phẩm đúng
• TDD và BDD giúp chúng ta biết chúng ta vẫn đúng
THE END
THANKS FORYOUR ATTENTION
Contact me
koh2203@gmail.com
0919059004

More Related Content

Similar to Tdd in action

Agile training
Agile trainingAgile training
Agile trainingLong Ta
 
Clean code - Trở thành một lập trình viên tốt hơn
Clean code - Trở thành một lập trình viên tốt hơnClean code - Trở thành một lập trình viên tốt hơn
Clean code - Trở thành một lập trình viên tốt hơnNhật Nguyễn Khắc
 
TDD (Test Driven Development)
TDD (Test Driven Development)TDD (Test Driven Development)
TDD (Test Driven Development)Đông Đô
 
Code Refactoring: Thay đổi nhỏ - Lợi ích lớn
Code Refactoring: Thay đổi nhỏ - Lợi ích lớnCode Refactoring: Thay đổi nhỏ - Lợi ích lớn
Code Refactoring: Thay đổi nhỏ - Lợi ích lớnNhật Nguyễn Khắc
 
Design Pattern - Những công thức vàng trong thiết kế
Design Pattern - Những công thức vàng trong thiết kếDesign Pattern - Những công thức vàng trong thiết kế
Design Pattern - Những công thức vàng trong thiết kếNhật Nguyễn Khắc
 
Quản lí nhóm làm việc ở nhà - phiên bản 1
Quản lí nhóm làm việc ở nhà - phiên bản 1Quản lí nhóm làm việc ở nhà - phiên bản 1
Quản lí nhóm làm việc ở nhà - phiên bản 1Đới Học viện Agile
 
DevOps flow to improve developer's productivity & quality
DevOps flow to improve developer's productivity & qualityDevOps flow to improve developer's productivity & quality
DevOps flow to improve developer's productivity & qualityPhi Huynh
 
Đồ án kiểm thử phần mềm
Đồ án kiểm thử phần mềmĐồ án kiểm thử phần mềm
Đồ án kiểm thử phần mềmNguyễn Anh
 
kiemthuphanmemnhom14 (1)nhomsvk17thuchien.pptx
kiemthuphanmemnhom14 (1)nhomsvk17thuchien.pptxkiemthuphanmemnhom14 (1)nhomsvk17thuchien.pptx
kiemthuphanmemnhom14 (1)nhomsvk17thuchien.pptxLnNguynThnh4
 
VMD2017 - Sử dụng React Native cho môi trường Production: khả thi đến đâu? kh...
VMD2017 - Sử dụng React Native cho môi trường Production: khả thi đến đâu? kh...VMD2017 - Sử dụng React Native cho môi trường Production: khả thi đến đâu? kh...
VMD2017 - Sử dụng React Native cho môi trường Production: khả thi đến đâu? kh...Thanh Nguyen
 
Tài liệu giới thiệu công ty GMO-Z.com Vietnam Lab Center
Tài liệu giới thiệu công ty GMO-Z.com Vietnam Lab CenterTài liệu giới thiệu công ty GMO-Z.com Vietnam Lab Center
Tài liệu giới thiệu công ty GMO-Z.com Vietnam Lab CenterGMO-Z.com Vietnam Lab Center
 
[HanoiScrum.net] Scrum foundation
[HanoiScrum.net] Scrum foundation[HanoiScrum.net] Scrum foundation
[HanoiScrum.net] Scrum foundationAgile đây Vietnam
 
ScrumDay Vietnam 2012 - Scrum tu chien hao VNext - Trung
ScrumDay Vietnam 2012 - Scrum tu chien hao VNext - TrungScrumDay Vietnam 2012 - Scrum tu chien hao VNext - Trung
ScrumDay Vietnam 2012 - Scrum tu chien hao VNext - TrungDUONG Trong Tan
 
Fu agile coding dojo
Fu agile coding dojoFu agile coding dojo
Fu agile coding dojoNguyen Anh
 
Code review - Kinh nghiệm - Công cụ
Code review - Kinh nghiệm - Công cụCode review - Kinh nghiệm - Công cụ
Code review - Kinh nghiệm - Công cụssusera24ebf
 
Agile Scrum for your startup
Agile Scrum for your startupAgile Scrum for your startup
Agile Scrum for your startupKevin Vu
 
Hành trình trở thành web đì ve lốp pơ
Hành trình trở thành web đì ve lốp pơHành trình trở thành web đì ve lốp pơ
Hành trình trở thành web đì ve lốp pơHuy Hoàng Phạm
 

Similar to Tdd in action (20)

Automation Testing & TDD
Automation Testing & TDDAutomation Testing & TDD
Automation Testing & TDD
 
Agile training
Agile trainingAgile training
Agile training
 
Giới thiệu Agile + Scrum
Giới thiệu Agile + ScrumGiới thiệu Agile + Scrum
Giới thiệu Agile + Scrum
 
Clean code - Trở thành một lập trình viên tốt hơn
Clean code - Trở thành một lập trình viên tốt hơnClean code - Trở thành một lập trình viên tốt hơn
Clean code - Trở thành một lập trình viên tốt hơn
 
TDD (Test Driven Development)
TDD (Test Driven Development)TDD (Test Driven Development)
TDD (Test Driven Development)
 
Code Refactoring: Thay đổi nhỏ - Lợi ích lớn
Code Refactoring: Thay đổi nhỏ - Lợi ích lớnCode Refactoring: Thay đổi nhỏ - Lợi ích lớn
Code Refactoring: Thay đổi nhỏ - Lợi ích lớn
 
Design Pattern - Những công thức vàng trong thiết kế
Design Pattern - Những công thức vàng trong thiết kếDesign Pattern - Những công thức vàng trong thiết kế
Design Pattern - Những công thức vàng trong thiết kế
 
Quản lí nhóm làm việc ở nhà - phiên bản 1
Quản lí nhóm làm việc ở nhà - phiên bản 1Quản lí nhóm làm việc ở nhà - phiên bản 1
Quản lí nhóm làm việc ở nhà - phiên bản 1
 
DevOps flow to improve developer's productivity & quality
DevOps flow to improve developer's productivity & qualityDevOps flow to improve developer's productivity & quality
DevOps flow to improve developer's productivity & quality
 
Đồ án kiểm thử phần mềm
Đồ án kiểm thử phần mềmĐồ án kiểm thử phần mềm
Đồ án kiểm thử phần mềm
 
Introduction to coding dojo
Introduction to coding dojoIntroduction to coding dojo
Introduction to coding dojo
 
kiemthuphanmemnhom14 (1)nhomsvk17thuchien.pptx
kiemthuphanmemnhom14 (1)nhomsvk17thuchien.pptxkiemthuphanmemnhom14 (1)nhomsvk17thuchien.pptx
kiemthuphanmemnhom14 (1)nhomsvk17thuchien.pptx
 
VMD2017 - Sử dụng React Native cho môi trường Production: khả thi đến đâu? kh...
VMD2017 - Sử dụng React Native cho môi trường Production: khả thi đến đâu? kh...VMD2017 - Sử dụng React Native cho môi trường Production: khả thi đến đâu? kh...
VMD2017 - Sử dụng React Native cho môi trường Production: khả thi đến đâu? kh...
 
Tài liệu giới thiệu công ty GMO-Z.com Vietnam Lab Center
Tài liệu giới thiệu công ty GMO-Z.com Vietnam Lab CenterTài liệu giới thiệu công ty GMO-Z.com Vietnam Lab Center
Tài liệu giới thiệu công ty GMO-Z.com Vietnam Lab Center
 
[HanoiScrum.net] Scrum foundation
[HanoiScrum.net] Scrum foundation[HanoiScrum.net] Scrum foundation
[HanoiScrum.net] Scrum foundation
 
ScrumDay Vietnam 2012 - Scrum tu chien hao VNext - Trung
ScrumDay Vietnam 2012 - Scrum tu chien hao VNext - TrungScrumDay Vietnam 2012 - Scrum tu chien hao VNext - Trung
ScrumDay Vietnam 2012 - Scrum tu chien hao VNext - Trung
 
Fu agile coding dojo
Fu agile coding dojoFu agile coding dojo
Fu agile coding dojo
 
Code review - Kinh nghiệm - Công cụ
Code review - Kinh nghiệm - Công cụCode review - Kinh nghiệm - Công cụ
Code review - Kinh nghiệm - Công cụ
 
Agile Scrum for your startup
Agile Scrum for your startupAgile Scrum for your startup
Agile Scrum for your startup
 
Hành trình trở thành web đì ve lốp pơ
Hành trình trở thành web đì ve lốp pơHành trình trở thành web đì ve lốp pơ
Hành trình trở thành web đì ve lốp pơ
 

Tdd in action

  • 1. TDD in action HOW WE APPLIED AT SHIPPO
  • 2. Tôi là ai • Nguyễn Xuân Kiên • PandaTechlead at Shippo • Đã tham gia nhiều dự án khác nhau trên: • DELPHI • ASP.NET • PHP • NODE.JS Tât cả đều KHÔNG có test
  • 4. Quá khứ 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% Nov-15 Dec-15 Jan-16 Feb-16 Mar-16 Tỉ lệ thời gian fix bugs dự án Seudo.vn Bugs New features Others
  • 5. Hiện tại • Thời gian fix bug nằm trong Sprint, trước khi release • Bug Product xuất hiện 01 bug/tuần, hot fix nhanh chóng • Đã triển khai được một cụm chức năng không có lỗi trực tiếp • Đã phát hiện ra lỗi chỉ xuất hiện trên một vài máy cụ thể
  • 6. • Continuous Integration • Continuous Delivery • Develop new features • Auto integration to release • Auto build a prerelease version • Auto test new version • Auto Deploy • Have more Beer AND sleep well at night Tương lai
  • 7. Khi nào thì không cần TDD? • Từ góc độ kỹ thuật: Murphy’s Law • Anything that can go wrong will go wrong • Từ góc độ quản lý: • Dự án có vòng đời ngắn, không cần maintain • Không có nhu cầu triển khai nhanh và liên tục • Không thích làm theo Agile
  • 8. How Agile are you report 2013
  • 9. Nhìn ra thế giới • Google • Golang • Guice (Google DI for Java 6) • GoogleTest • Microsoft & IBM • Có nghiên cứu trên các project thực tế • Others • Pivotal (PivotalTracker) • eBay Enterprise • WeDoTDD.com
  • 10. Làm thế nào để bắt đầu • Cần thuyết phục được lãnh đạo • Thời gian phát triển tăng • Nhưng liệu bug có giảm? • Dev quyết tâm • Thay đổi hẳn về tư duy • Áp lực chứng minh hiệu quả • Test first approach
  • 11. Chuẩn bị về công nghệ • Gần như luôn sẵn sàng • Java: JUnit, Faker,… • JavaScript/Node.js: Mocha, chai,… • .Net: Microsoft .NetTest Framework, NUnit, Microsoft Fakes,… • PHP: PHPUnit, PHP Faker,… • Golang: built-in test (testing package) • Python: PyUnit
  • 12. Nâng cao chất lượng • Đào tạo • Tổ chức các buổi đào tạo nội bộ • Tham gia các chương trình đào tạo ngoài • http://blog.shippo.vn • Rèn luyện • Tổ chức chia sẻ kinh nghiệm • Thực hành • https://github.com/kiennx/shippo_code_practices
  • 13.
  • 14.
  • 15.
  • 16. TDD ở Shippo •Đang triển khai BDD •Áp dụng kết hợpTDD và BDD •TDD áp dụng ở mức tự giác cá nhân
  • 17. BDD ở Shippo • Tiếp nhận requirement dưới dạng User-Story • PO, Dev vàTester viết Scenario • Planning: How to do it • Code khung cho AutomationTest • Code khung cho Feature
  • 18. A Cycle of Life Write A Test Fails theTest Write Code Pass theTest
  • 19. SEE HOW IT RUN BDD AUTOMATION TEST & MOCHA UNIT TEST
  • 20. KHÓ KHĂN VÀ SAI LẦM
  • 21. TDD là Test-first • Thường được nhắc đến đầu tiên • Không có feature, làm sao để test? • TDD không phải chỉ là test trước
  • 22. Test phụ thuộc lẫn nhau • Trong nhiều trường hợp, thấy test ngắn hơn • Khó phát hiện nguyên nhân gây lỗi • Khó maintain
  • 23. Kiểm tra nhiều thứ trong cùng một Test • Cảm thấy test trùng lặp nên gộp vào • Không xác định được mục tiêu củaTest case • Khó maintain
  • 24. Không có thời gian viết test • Chức năng này quá dễ để có bug • Hãy nhìn lại bug cost • Hãy xem lại cách viết test • Test giúp chúng ta design hệ thống • Test giúp chúng ta thực sự hiểu yêu cầu
  • 25. Unit-test, Integration Test, Functional Test, Acceptance Test • Gặp khó khăn khi viết Unit-Test • Test phụ thuộc nhiều vào setup • Viết test tốn nhiều thời gian hơn • Dễ phạm phải sai lầm hơn
  • 26. BDD thì không cần TDD • BDD không thay thế hoàn toànTDD • TDD giúp chúng ta biết code chạy • BDD giúp chúng ta biết sản phẩm đúng • TDD và BDD giúp chúng ta biết chúng ta vẫn đúng
  • 27. THE END THANKS FORYOUR ATTENTION Contact me koh2203@gmail.com 0919059004