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
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
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
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