Test Driven Development
PHAM VAN DONG - VNLAB
Nội dung
1. Software testing – Unit test
2. TDD là gì?
3. Cách thực hiện
4. Ưu điêm
5. Demo
Software testing
UnitTest: test các module (unit) để kiểm tra thiết kế chi tiết
của nó là được thực hiện đúng.
IntegrationTest: test việc ghép nối giữa một nhóm các
module
SystemTest: test toàn bộ hệ thống để xem đã đáp ứng
được software requirement
PerformanceTest: kiểm tra các tham số QoS được đưa ra
khi xác đinh yêu cầu của sản phẩm.
AcceptanceTest (CustomerTest, FunctionalTest) tạo bởi
end-user, customer để kiểm tra sản phẩm nhận được
UnitTest
Unit testing là một thủ tục để xác định những module (unit) mã nguồn
của phần mềm có hoạt động đúng hay không.
• Trong lập trình thủ tục : trương chình riêng lẻ, hàm, thủ tục,…;
• Trong lập trình hướng đối tượng : phương thức, lớp
UnitTest được thực hiện bởi developers, ko phải bởi Software testers
hoặc end-users.
Hạn chế của UnitTest
• Không phát hiện được hết các lỗi của ctrình
• Khi thay đổi interface của module -> phải sửa lại nhiều testcase -> khi
thiết kế testcase cần bỏ đi những code trùng lặp
Unit test
Cách công cụ hiện có
• ASP: ASPUnit
• C/C++: Cunit, CppUnit, Ctest
• C#: Nunit, csUnit, NUnitÁp,…
• Objective-C: OCUnit
• PHP: PHPUnit
• Java: JUnit
TDD là gì?
Quy trình áp dụng cho việc xây dựng unittest cho module
• Truyền thống: xây dựng xong module rồi viết unittest
• TDD: viết test trước rồi viết code song song
TDD (Test Driven Development) là một phương thức làm việc,
hay một quy trình viết mã hiện đại.
Yêu cầu phải có test tự động
Cách thực hiện
Viết 1 test cho hàm mới. Đảm bảo rằng test sẽ fail.
Chuyển qua viết code sơ khai nhất cho hàm đó để test có thể
pass.
Tối ưu hóa đoạn code của hàm vừa viết sao cho đảm bảo test
vẫn pass và tối ưu nhất cho việc lập trình kế tiếp
Lặp lại cho các hàm khác từ bước 1
Cách thực hiện
Các testsuite (file) nên đặt riêng ra, độc lập code với module
Nên sử dụng 25-50% thời gian để viết test với lượng code viết
testcase khoảng 50% lượng code module
Có thể lấy code của testcase làm example trong tài liệu kỹ thuật
của module
Sau thời gian dài, số testcase sẽ nhiều thời gian chạy lớn
chia ra làm các testcase mới và cũ. Testcase cũ sẽ chạy với tần
suất ít hơn
Ưu điểm
Thời gian viết test thì nhiều, tương đương thời gian code module
nhưng sẽ ít hơn thời gian phải debug theo các test truyền thống
Đảm bảo hệ thống luôn chạy, luôn hoạt động tại mọi thời điểm
gần như ít phải debug
Dễ dàng phát hiện được lỗi (ko đáp ứng đúng requirement) mỗi
khi thay đổi code của module
Demo

TDD (Test Driven Development)

  • 1.
  • 2.
    Nội dung 1. Softwaretesting – Unit test 2. TDD là gì? 3. Cách thực hiện 4. Ưu điêm 5. Demo
  • 3.
    Software testing UnitTest: testcác module (unit) để kiểm tra thiết kế chi tiết của nó là được thực hiện đúng. IntegrationTest: test việc ghép nối giữa một nhóm các module SystemTest: test toàn bộ hệ thống để xem đã đáp ứng được software requirement PerformanceTest: kiểm tra các tham số QoS được đưa ra khi xác đinh yêu cầu của sản phẩm. AcceptanceTest (CustomerTest, FunctionalTest) tạo bởi end-user, customer để kiểm tra sản phẩm nhận được
  • 4.
    UnitTest Unit testing làmột thủ tục để xác định những module (unit) mã nguồn của phần mềm có hoạt động đúng hay không. • Trong lập trình thủ tục : trương chình riêng lẻ, hàm, thủ tục,…; • Trong lập trình hướng đối tượng : phương thức, lớp UnitTest được thực hiện bởi developers, ko phải bởi Software testers hoặc end-users. Hạn chế của UnitTest • Không phát hiện được hết các lỗi của ctrình • Khi thay đổi interface của module -> phải sửa lại nhiều testcase -> khi thiết kế testcase cần bỏ đi những code trùng lặp
  • 5.
    Unit test Cách côngcụ hiện có • ASP: ASPUnit • C/C++: Cunit, CppUnit, Ctest • C#: Nunit, csUnit, NUnitÁp,… • Objective-C: OCUnit • PHP: PHPUnit • Java: JUnit
  • 6.
    TDD là gì? Quytrình áp dụng cho việc xây dựng unittest cho module • Truyền thống: xây dựng xong module rồi viết unittest • TDD: viết test trước rồi viết code song song TDD (Test Driven Development) là một phương thức làm việc, hay một quy trình viết mã hiện đại. Yêu cầu phải có test tự động
  • 7.
    Cách thực hiện Viết1 test cho hàm mới. Đảm bảo rằng test sẽ fail. Chuyển qua viết code sơ khai nhất cho hàm đó để test có thể pass. Tối ưu hóa đoạn code của hàm vừa viết sao cho đảm bảo test vẫn pass và tối ưu nhất cho việc lập trình kế tiếp Lặp lại cho các hàm khác từ bước 1
  • 10.
    Cách thực hiện Cáctestsuite (file) nên đặt riêng ra, độc lập code với module Nên sử dụng 25-50% thời gian để viết test với lượng code viết testcase khoảng 50% lượng code module Có thể lấy code của testcase làm example trong tài liệu kỹ thuật của module Sau thời gian dài, số testcase sẽ nhiều thời gian chạy lớn chia ra làm các testcase mới và cũ. Testcase cũ sẽ chạy với tần suất ít hơn
  • 11.
    Ưu điểm Thời gianviết test thì nhiều, tương đương thời gian code module nhưng sẽ ít hơn thời gian phải debug theo các test truyền thống Đảm bảo hệ thống luôn chạy, luôn hoạt động tại mọi thời điểm gần như ít phải debug Dễ dàng phát hiện được lỗi (ko đáp ứng đúng requirement) mỗi khi thay đổi code của module
  • 12.