SlideShare a Scribd company logo
Automation Testing &
TDD
Nguyễn Khắc Nhật
Nội dung
• Kiểm thử
• Kiểm thử tự động
• Kiểm thử đơn vị
• TDD – Phát triển Hướng Kiểm thử
• Demo
CRISIS
Numbers:
4.4 million cars recalled
$7.7 Billions of $ loss.
Damage the brand
Ảnh: Reuters
Numbers:
$17 Billions of $ loss.
Damage the brand
Galaxy Note 7 recall
Automation Testing & TDD
Do you know?
Software Bugs Cost U.S. Economy
$312 Billion
Annually
6
Source:http://insight.jbs.cam.ac.uk/2013/financial-content-cambridge-university-study-states-software-bugs-cost-economy-312-billion-per-year
Automation Testing & TDD
Kiểm thử
càng sớm
càng tốt
• Nếu các bug
được phát hiện
càng muộn thì chi
phí sẽ càng cao
Kiểm thử
Mong muốn vs. Thực tế
10
Requirement
Design
Desired
Implementation
Reality
testing
gap
Ai chịu trách nhiệm cho chất lượng phần
mềm?
• Tester
• QA
• Developer
• ScrumMaster
• PM
• Product Manager
• Product Owner
• BA
• Customer?
11
Faster delivery, faster feedback
Time
…
Iteration
Process of testing
Test-related
learning
Test design
Test execution
Result
interpretation
13
Các chiến thuật kiểm thử
• Black-box (hộp đen)
• Dựa trên thiết kế chức năng của hệ thống
• Không quan tâm đến “nội bộ” bên trong từng chức năng
• Không kiểm thử được các chức năng “ẩn”
• White-box (hộp trắng)
• Dựa trên thiết kế chi tiết bên trong của chức năng, hoặc dựa trên code
• Không phát hiện được các chức năng bị thiếu
Black-box vs. White-box
Desired
Designed
Implemented
Black Box
White Box
Kiểm thử tự động
Tốc độ phát hành phần mềm
Development Flow
Requirement
Analysis
UI Mocking
•Customer
discussion
Design Draft
•Design
Discussion
Code the
skeleton to
test the
design
Coding in
team
Refactoring
and
Refinement
Build the
increment
$
DevTeamPO
Collaboration:
Steps:
Artifacts:
As a super user,
I want to …
A
B
IDo
Interface IDo{
//TODO …
}
Class A{
//TODO …
}
Class B:IDo{
//TODO …
}
Interface IDo{
//TODO …
}
Class A{
method1(){
//Mr. A codes here
}
}
Class B:IDo{
method1(){
//Mrs. B codes here
}
}
Class C{
}
$
PO
Test (5)
Test (10)
Test (15)
Test (100)
Test (1000)
Automation Test
Kiểm thử tự động
• Kiểm thử tự động (automated testing) là hình thức sử dụng các
công cụ để tự động thực thi các test case, khác với kiểm thử
thủ công (manual testing – do con người thực hiện)
• Lợi ích của kiểm thử tự động:
• Tăng tốc độ kiểm thử
• Giảm chi phí
• Dễ thực hiện kiểm thử hồi quy (regression testing)
• Kiểm thử đơn vị thường được tiến hành dưới hình thức tự động
• Một số công cụ hỗ trợ kiểm thử tự động phổ biến cho Java:
Junit, TestNG, JTest, Mockito
Unit Test –
Kiểm thử đơn vị
Các mức kiểm thử
• Dựa vào đối tượng được kiểm thử, có thể
chia thành 4 mức độ kiểm thử phổ biến
như sau:
• Kiểm thử Đơn vị (Unit Testing)
• Kiểm thử Tích hợp (Integration Testing)
• Kiểm thử Hệ thống (System Testing)
• Kiểm thử Người dùng/Kiểm thử Chấp nhận
(User Testing/Acceptance Testing)
Kiểm thử Đơn vị
• Kiểm thử Đơn vị (Unit Testing) là thao tác kiểm thử được thực
hiện trên các đơn vị/thành phần nhỏ của chương trình
• Kiểm thử Đơn vị được dùng để kiểm tra tính chính xác của các
đơn vị mã nguồn nhỏ khi chúng được thực thi độc lập
• Một ”đơn vị” có thể là một khối lệnh, một phương thức, một lớp,
một module…
• Một đơn vị thường là “nhỏ”: bao gồm ít đầu vào, ít đầu ra và
không quá phức tạp
• Đơn vị thường được áp dụng phổ biến là ở mức phương thức
• Kiểm thử đơn vị thường được thực hiện bởi Lập trình viên
JUnit
• JUnit là một Testing Framework được sử dụng cho ngôn ngữ
Java
• Website: https://junit.org
• Junit thường được tích hợp sẵn trong các IDE thông dụng như
Netbeans, Eclipse, IntelliJ IDEA
• Ngoài JUnit thì có TestNG là một Testing Framework thông
dụng cho Java
• Có thể sử dụng JUnit kết hợp với các công cụ khác như
Mockito, PowerMock, EvoSuite…
Viết test case trong Junit: Ví dụ
• Trong đó:
• @Test được sử dụng để khai báo một phương thức test
• assertEquals dùng để so sánh bằng 2 giá trị
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
class FirstJUnit5Tests {
@Test
void myFirstTest() {
assertEquals(2, 1 + 1);
}
}
Một lớp Test cơ bản
class StandardTests {
@BeforeAll
static void initAll() {
}
@BeforeEach
void init() {
}
@Test
void succeedingTest() {
}
@Test
void failingTest() {
fail("a failing test");
}
...
@Test
@Disabled("for demonstration purposes")
void skippedTest() {
// not executed
}
@AfterEach
void tearDown() {
}
@AfterAll
static void tearDownAll() {
}
}
Các assertions
• assertEquals()
• assertTrue()
• assertFalse()
• assertNull()
• assertNotNull()
• assertThrows()
• assertTimeout()
• assertArrayEquals()
DEMO
Kiểm thử đơn vị
TDD –
Test Driven Development
Test First và TDD
• Test First là một cách tiếp cận mới so với mô hình phát triển
phần mềm truyền thống, trong đó việc lập trình bắt đầu bằng
cách viết các bài kiểm thử trước khi bắt tay vào viết mã nguồn
của chương trình
• TDD (Test Driven Development) là một quy trình lập trình, trong
đó bao gồm nhiều giai đoạn nhỏ lặp đi lặp lại, mỗi giai đoạn bao
gồm các bước:
• Viết các bài kiểm thử
• Viết mã nguồn
• Tái cấu trúc mã nguồn.
Vòng thực thi của TDD
• Viết Test
• Fail bởi vì chưa có mã nguồn
• Thông thường các IDE sẽ báo message màu
đỏ
• Viết mã nguồn
• Viết mã nguồn để vượt qua test
• Thông thường các IDE sẽ báo message màu
xanh
• Tái cấu trúc mã nguồn
• Chỉnh sửa mã nguồn để ”tốt” hơn
• Cần đảm bảo mã nguồn vẫn vượt qua được
các bài test
1. FAIL
2. PASS
3.
REFACTOR
Automation Testing & TDD
Phân loại tam giác
Giá trị của
cạnh a
Giá trị của
cạnh b
Giá trị của
cạnh c
Loại tam giác
2 2 2 tam giác đều
2 2 3 tam giác cân
3 4 5 tam giác thường
8 2 3 không phải là tam giác

More Related Content

What's hot (20)

PPTX
Postman. From simple API test to end to end scenario
HYS Enterprise
 
PDF
Ứng dụng công cụ test tự động kiểm thử website
Dotnet Open Group
 
PPTX
Test Automation and Selenium
Karapet Sarkisyan
 
DOCX
Đồ án kiểm thử phần mềm
Nguyễn Anh
 
PPTX
Selenium PPT 2.pptx
ssusere4c6aa
 
PDF
Postman: An Introduction for Developers
Postman
 
PPTX
Automation Testing by Selenium Web Driver
Cuelogic Technologies Pvt. Ltd.
 
PDF
SOLID - Những nguyên lí sống còn
Nhật Nguyễn Khắc
 
PPTX
Belajar Postman test runner
Fachrul Choliluddin
 
PDF
Postman
Igor Shubovych
 
PDF
API Testing following the Test Pyramid
Elias Nogueira
 
DOC
luan van thac si tim hieu lap trinh python va ung dung phat trien web
Dịch vụ viết thuê Luận Văn - ZALO 0932091562
 
PPTX
Angular Unit Testing
Shailendra Chauhan
 
PDF
Kiem thu
Van Tiep Dinh
 
DOC
Báo cáo thực tập chuyên nghành lập trình Android GPSGroup
Tinh Ngo
 
DOCX
Tìm hiểu các kỹ thuật kiểm thử phần mềm ứng dụng trong lập trình Java.
Nguyễn Anh
 
PDF
Test and Behaviour Driven Development (TDD/BDD)
Lars Thorup
 
PDF
Đề tài: Kiểm thử phần mềm trên thiết bị di động, HAY, 9đ
Dịch Vụ Viết Bài Trọn Gói ZALO 0917193864
 
PPTX
Appium ppt
natashasweety7
 
PDF
SELENIUM PPT.pdf
RebelSnowball
 
Postman. From simple API test to end to end scenario
HYS Enterprise
 
Ứng dụng công cụ test tự động kiểm thử website
Dotnet Open Group
 
Test Automation and Selenium
Karapet Sarkisyan
 
Đồ án kiểm thử phần mềm
Nguyễn Anh
 
Selenium PPT 2.pptx
ssusere4c6aa
 
Postman: An Introduction for Developers
Postman
 
Automation Testing by Selenium Web Driver
Cuelogic Technologies Pvt. Ltd.
 
SOLID - Những nguyên lí sống còn
Nhật Nguyễn Khắc
 
Belajar Postman test runner
Fachrul Choliluddin
 
API Testing following the Test Pyramid
Elias Nogueira
 
luan van thac si tim hieu lap trinh python va ung dung phat trien web
Dịch vụ viết thuê Luận Văn - ZALO 0932091562
 
Angular Unit Testing
Shailendra Chauhan
 
Kiem thu
Van Tiep Dinh
 
Báo cáo thực tập chuyên nghành lập trình Android GPSGroup
Tinh Ngo
 
Tìm hiểu các kỹ thuật kiểm thử phần mềm ứng dụng trong lập trình Java.
Nguyễn Anh
 
Test and Behaviour Driven Development (TDD/BDD)
Lars Thorup
 
Đề tài: Kiểm thử phần mềm trên thiết bị di động, HAY, 9đ
Dịch Vụ Viết Bài Trọn Gói ZALO 0917193864
 
Appium ppt
natashasweety7
 
SELENIUM PPT.pdf
RebelSnowball
 

Similar to Automation Testing & TDD (20)

PPT
Test Driven development
MU VN
 
PPTX
Kiểm Thử Junit
Thanh Huong
 
PPT
Unit Test
guest45ac48
 
DOCX
Adp junit
Phong Mai
 
PPTX
TDD (Test Driven Development)
Đông Đô
 
PPTX
Tdd in action
Kien Nguyen
 
DOC
Bai tap testing junit…..
Mua Xuong
 
PPTX
ĐẢM BẢO CHẤT LƯỢNG PHẦN MỀM
ThanCoi20102202
 
DOCX
6 câu hỏi phỏng vấn tester thông dụng năm 2021
MDuyn83
 
PPT
01 tester training - overview
song_lachinhminh_smile
 
PDF
001-Tong-quan-kiem-thu_thanhDHTL_244.pdf
phamquocthoai7a4
 
PDF
Đề tài: Công cụ sinh dữ liệu thử tự động cho chương trình Java
Dịch vụ viết bài trọn gói ZALO: 0909232620
 
DOC
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
Nguyễn Anh
 
DOCX
Nunit framework for .NET application
Minh Tri Lam
 
DOC
Tailieu.vncty.com t ke-testcase
Trần Đức Anh
 
PDF
CHUONG 2.pdf
ChauNguyenThiMinh6
 
PPT
Nhập môn BDD
Ngoc Dao
 
PPTX
Kiem tra phan mem
thinhtq207vn
 
DOC
Xây Dựng Công Cụ Sinh Dữ Liệu Thử Tự Động Cho Chương Trình Java.doc
Dịch vụ viết thuê Luận Văn - ZALO 0932091562
 
PPTX
2014/07/07 Software Testing - Truong Anh Hoang
Vu Hung Nguyen
 
Test Driven development
MU VN
 
Kiểm Thử Junit
Thanh Huong
 
Unit Test
guest45ac48
 
Adp junit
Phong Mai
 
TDD (Test Driven Development)
Đông Đô
 
Tdd in action
Kien Nguyen
 
Bai tap testing junit…..
Mua Xuong
 
ĐẢM BẢO CHẤT LƯỢNG PHẦN MỀM
ThanCoi20102202
 
6 câu hỏi phỏng vấn tester thông dụng năm 2021
MDuyn83
 
01 tester training - overview
song_lachinhminh_smile
 
001-Tong-quan-kiem-thu_thanhDHTL_244.pdf
phamquocthoai7a4
 
Đề tài: Công cụ sinh dữ liệu thử tự động cho chương trình Java
Dịch vụ viết bài trọn gói ZALO: 0909232620
 
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
Nguyễn Anh
 
Nunit framework for .NET application
Minh Tri Lam
 
Tailieu.vncty.com t ke-testcase
Trần Đức Anh
 
CHUONG 2.pdf
ChauNguyenThiMinh6
 
Nhập môn BDD
Ngoc Dao
 
Kiem tra phan mem
thinhtq207vn
 
Xây Dựng Công Cụ Sinh Dữ Liệu Thử Tự Động Cho Chương Trình Java.doc
Dịch vụ viết thuê Luận Văn - ZALO 0932091562
 
2014/07/07 Software Testing - Truong Anh Hoang
Vu Hung Nguyen
 
Ad

More from Nhật Nguyễn Khắc (11)

PPTX
Reflective Learning
Nhật Nguyễn Khắc
 
PPTX
Livestream - Nhật ký học lập trình
Nhật Nguyễn Khắc
 
PPTX
Livestream - Học lập trình là học gì?
Nhật Nguyễn Khắc
 
PPTX
Hội thảo nghề nghiệp tại CodeGym 6/6/2020
Nhật Nguyễn Khắc
 
PPTX
WHY DO WE REPORT?
Nhật Nguyễn Khắc
 
PPTX
Live stream: Học lập trình
Nhật Nguyễn Khắc
 
PPTX
Code Refactoring: Thay đổi nhỏ - Lợi ích lớn
Nhật Nguyễn Khắc
 
PPTX
Design Pattern - Những công thức vàng trong thiết kế
Nhật Nguyễn Khắc
 
PDF
Clean code - Trở thành một lập trình viên tốt hơn
Nhật Nguyễn Khắc
 
PDF
Agile Education - Classroms need Agility - Agile Vietnam Conference 2018
Nhật Nguyễn Khắc
 
PPTX
Clean code coding like a professional
Nhật Nguyễn Khắc
 
Reflective Learning
Nhật Nguyễn Khắc
 
Livestream - Nhật ký học lập trình
Nhật Nguyễn Khắc
 
Livestream - Học lập trình là học gì?
Nhật Nguyễn Khắc
 
Hội thảo nghề nghiệp tại CodeGym 6/6/2020
Nhật Nguyễn Khắc
 
WHY DO WE REPORT?
Nhật Nguyễn Khắc
 
Live stream: Học lập trình
Nhật Nguyễn Khắc
 
Code Refactoring: Thay đổi nhỏ - Lợi ích lớn
Nhật Nguyễn Khắc
 
Design Pattern - Những công thức vàng trong thiết kế
Nhật Nguyễn Khắc
 
Clean code - Trở thành một lập trình viên tốt hơn
Nhật Nguyễn Khắc
 
Agile Education - Classroms need Agility - Agile Vietnam Conference 2018
Nhật Nguyễn Khắc
 
Clean code coding like a professional
Nhật Nguyễn Khắc
 
Ad

Automation Testing & TDD

  • 2. Nội dung • Kiểm thử • Kiểm thử tự động • Kiểm thử đơn vị • TDD – Phát triển Hướng Kiểm thử • Demo
  • 3. CRISIS Numbers: 4.4 million cars recalled $7.7 Billions of $ loss. Damage the brand
  • 4. Ảnh: Reuters Numbers: $17 Billions of $ loss. Damage the brand Galaxy Note 7 recall
  • 6. Do you know? Software Bugs Cost U.S. Economy $312 Billion Annually 6 Source:http://insight.jbs.cam.ac.uk/2013/financial-content-cambridge-university-study-states-software-bugs-cost-economy-312-billion-per-year
  • 8. Kiểm thử càng sớm càng tốt • Nếu các bug được phát hiện càng muộn thì chi phí sẽ càng cao
  • 10. Mong muốn vs. Thực tế 10 Requirement Design Desired Implementation Reality testing gap
  • 11. Ai chịu trách nhiệm cho chất lượng phần mềm? • Tester • QA • Developer • ScrumMaster • PM • Product Manager • Product Owner • BA • Customer? 11
  • 12. Faster delivery, faster feedback Time … Iteration
  • 13. Process of testing Test-related learning Test design Test execution Result interpretation 13
  • 14. Các chiến thuật kiểm thử • Black-box (hộp đen) • Dựa trên thiết kế chức năng của hệ thống • Không quan tâm đến “nội bộ” bên trong từng chức năng • Không kiểm thử được các chức năng “ẩn” • White-box (hộp trắng) • Dựa trên thiết kế chi tiết bên trong của chức năng, hoặc dựa trên code • Không phát hiện được các chức năng bị thiếu
  • 16. Kiểm thử tự động
  • 17. Tốc độ phát hành phần mềm
  • 18. Development Flow Requirement Analysis UI Mocking •Customer discussion Design Draft •Design Discussion Code the skeleton to test the design Coding in team Refactoring and Refinement Build the increment $ DevTeamPO Collaboration: Steps: Artifacts: As a super user, I want to … A B IDo Interface IDo{ //TODO … } Class A{ //TODO … } Class B:IDo{ //TODO … } Interface IDo{ //TODO … } Class A{ method1(){ //Mr. A codes here } } Class B:IDo{ method1(){ //Mrs. B codes here } } Class C{ } $ PO
  • 24. Kiểm thử tự động • Kiểm thử tự động (automated testing) là hình thức sử dụng các công cụ để tự động thực thi các test case, khác với kiểm thử thủ công (manual testing – do con người thực hiện) • Lợi ích của kiểm thử tự động: • Tăng tốc độ kiểm thử • Giảm chi phí • Dễ thực hiện kiểm thử hồi quy (regression testing) • Kiểm thử đơn vị thường được tiến hành dưới hình thức tự động • Một số công cụ hỗ trợ kiểm thử tự động phổ biến cho Java: Junit, TestNG, JTest, Mockito
  • 25. Unit Test – Kiểm thử đơn vị
  • 26. Các mức kiểm thử • Dựa vào đối tượng được kiểm thử, có thể chia thành 4 mức độ kiểm thử phổ biến như sau: • Kiểm thử Đơn vị (Unit Testing) • Kiểm thử Tích hợp (Integration Testing) • Kiểm thử Hệ thống (System Testing) • Kiểm thử Người dùng/Kiểm thử Chấp nhận (User Testing/Acceptance Testing)
  • 27. Kiểm thử Đơn vị • Kiểm thử Đơn vị (Unit Testing) là thao tác kiểm thử được thực hiện trên các đơn vị/thành phần nhỏ của chương trình • Kiểm thử Đơn vị được dùng để kiểm tra tính chính xác của các đơn vị mã nguồn nhỏ khi chúng được thực thi độc lập • Một ”đơn vị” có thể là một khối lệnh, một phương thức, một lớp, một module… • Một đơn vị thường là “nhỏ”: bao gồm ít đầu vào, ít đầu ra và không quá phức tạp • Đơn vị thường được áp dụng phổ biến là ở mức phương thức • Kiểm thử đơn vị thường được thực hiện bởi Lập trình viên
  • 28. JUnit • JUnit là một Testing Framework được sử dụng cho ngôn ngữ Java • Website: https://junit.org • Junit thường được tích hợp sẵn trong các IDE thông dụng như Netbeans, Eclipse, IntelliJ IDEA • Ngoài JUnit thì có TestNG là một Testing Framework thông dụng cho Java • Có thể sử dụng JUnit kết hợp với các công cụ khác như Mockito, PowerMock, EvoSuite…
  • 29. Viết test case trong Junit: Ví dụ • Trong đó: • @Test được sử dụng để khai báo một phương thức test • assertEquals dùng để so sánh bằng 2 giá trị import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; class FirstJUnit5Tests { @Test void myFirstTest() { assertEquals(2, 1 + 1); } }
  • 30. Một lớp Test cơ bản class StandardTests { @BeforeAll static void initAll() { } @BeforeEach void init() { } @Test void succeedingTest() { } @Test void failingTest() { fail("a failing test"); } ... @Test @Disabled("for demonstration purposes") void skippedTest() { // not executed } @AfterEach void tearDown() { } @AfterAll static void tearDownAll() { } }
  • 31. Các assertions • assertEquals() • assertTrue() • assertFalse() • assertNull() • assertNotNull() • assertThrows() • assertTimeout() • assertArrayEquals()
  • 33. TDD – Test Driven Development
  • 34. Test First và TDD • Test First là một cách tiếp cận mới so với mô hình phát triển phần mềm truyền thống, trong đó việc lập trình bắt đầu bằng cách viết các bài kiểm thử trước khi bắt tay vào viết mã nguồn của chương trình • TDD (Test Driven Development) là một quy trình lập trình, trong đó bao gồm nhiều giai đoạn nhỏ lặp đi lặp lại, mỗi giai đoạn bao gồm các bước: • Viết các bài kiểm thử • Viết mã nguồn • Tái cấu trúc mã nguồn.
  • 35. Vòng thực thi của TDD • Viết Test • Fail bởi vì chưa có mã nguồn • Thông thường các IDE sẽ báo message màu đỏ • Viết mã nguồn • Viết mã nguồn để vượt qua test • Thông thường các IDE sẽ báo message màu xanh • Tái cấu trúc mã nguồn • Chỉnh sửa mã nguồn để ”tốt” hơn • Cần đảm bảo mã nguồn vẫn vượt qua được các bài test 1. FAIL 2. PASS 3. REFACTOR
  • 37. Phân loại tam giác Giá trị của cạnh a Giá trị của cạnh b Giá trị của cạnh c Loại tam giác 2 2 2 tam giác đều 2 2 3 tam giác cân 3 4 5 tam giác thường 8 2 3 không phải là tam giác