SlideShare a Scribd company logo
1 of 37
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
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
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
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

Sldie TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
Sldie TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀMSldie TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
Sldie TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀMNguyễn Anh
 
Robot Framework :: Demo login application
Robot Framework :: Demo login applicationRobot Framework :: Demo login application
Robot Framework :: Demo login applicationSomkiat Puisungnoen
 
Đồ á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
 
Testing with Spring: An Introduction
Testing with Spring: An IntroductionTesting with Spring: An Introduction
Testing with Spring: An IntroductionSam Brannen
 
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
 
Unit tests & TDD
Unit tests & TDDUnit tests & TDD
Unit tests & TDDDror Helper
 
API Testing & SoapUI
API Testing & SoapUIAPI Testing & SoapUI
API Testing & SoapUITran Bich
 
Báo cáo môn đảm bảo chất lượng phần mềm
Báo cáo môn đảm bảo chất lượng phần mềmBáo cáo môn đảm bảo chất lượng phần mềm
Báo cáo môn đảm bảo chất lượng phần mềmThuyet Nguyen
 
Keyword-driven Test Automation Framework
Keyword-driven Test Automation FrameworkKeyword-driven Test Automation Framework
Keyword-driven Test Automation FrameworkMikhail Subach
 
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀMTÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀMNguyễn Anh
 
Giáo trình Tester Full
Giáo trình Tester FullGiáo trình Tester Full
Giáo trình Tester FullThanh Sơn
 
Kiểm thử bảo mật web
Kiểm thử bảo mật webKiểm thử bảo mật web
Kiểm thử bảo mật webMinh Tri Nguyen
 
An Introduction to Unit Test Using NUnit
An Introduction to Unit Test Using NUnitAn Introduction to Unit Test Using NUnit
An Introduction to Unit Test Using NUnitweili_at_slideshare
 

What's hot (20)

TestNG
TestNGTestNG
TestNG
 
Sldie TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
Sldie TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀMSldie TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
Sldie TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
 
Robot Framework :: Demo login application
Robot Framework :: Demo login applicationRobot Framework :: Demo login application
Robot Framework :: Demo login application
 
TestNG Framework
TestNG Framework TestNG Framework
TestNG Framework
 
Jmeter tool
Jmeter toolJmeter tool
Jmeter tool
 
Đồ á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
 
Testing with Spring: An Introduction
Testing with Spring: An IntroductionTesting with Spring: An Introduction
Testing with Spring: An Introduction
 
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ế
 
Unit tests & TDD
Unit tests & TDDUnit tests & TDD
Unit tests & TDD
 
JUnit 5
JUnit 5JUnit 5
JUnit 5
 
API Testing & SoapUI
API Testing & SoapUIAPI Testing & SoapUI
API Testing & SoapUI
 
Báo cáo môn đảm bảo chất lượng phần mềm
Báo cáo môn đảm bảo chất lượng phần mềmBáo cáo môn đảm bảo chất lượng phần mềm
Báo cáo môn đảm bảo chất lượng phần mềm
 
Sikuli for Mobile Testing
Sikuli for Mobile TestingSikuli for Mobile Testing
Sikuli for Mobile Testing
 
testng
testngtestng
testng
 
Keyword-driven Test Automation Framework
Keyword-driven Test Automation FrameworkKeyword-driven Test Automation Framework
Keyword-driven Test Automation Framework
 
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀMTÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
 
Giáo trình Tester Full
Giáo trình Tester FullGiáo trình Tester Full
Giáo trình Tester Full
 
Robot Framework
Robot FrameworkRobot Framework
Robot Framework
 
Kiểm thử bảo mật web
Kiểm thử bảo mật webKiểm thử bảo mật web
Kiểm thử bảo mật web
 
An Introduction to Unit Test Using NUnit
An Introduction to Unit Test Using NUnitAn Introduction to Unit Test Using NUnit
An Introduction to Unit Test Using NUnit
 

Similar to Automation Testing & TDD

TDD (Test Driven Development)
TDD (Test Driven Development)TDD (Test Driven Development)
TDD (Test Driven Development)Đông Đô
 
Kiểm Thử Junit
Kiểm Thử Junit Kiểm Thử Junit
Kiểm Thử Junit Thanh Huong
 
Test Types & Test Levels.pdf
Test Types & Test Levels.pdfTest Types & Test Levels.pdf
Test Types & Test Levels.pdfnhung875961
 
Test Driven development
Test Driven developmentTest Driven development
Test Driven developmentMU VN
 
kiemthuphanmemnhom14 (1)nhomsvk17thuchien.pptx
kiemthuphanmemnhom14 (1)nhomsvk17thuchien.pptxkiemthuphanmemnhom14 (1)nhomsvk17thuchien.pptx
kiemthuphanmemnhom14 (1)nhomsvk17thuchien.pptxLnNguynThnh4
 
6 câu hỏi phỏng vấn tester thông dụng năm 2021
6 câu hỏi phỏng vấn tester thông dụng năm 20216 câu hỏi phỏng vấn tester thông dụng năm 2021
6 câu hỏi phỏng vấn tester thông dụng năm 2021MDuyn83
 
He thong cong cu kiem thu tu dong va dam bao chat luong phan mem
He thong cong cu kiem thu tu dong va dam bao chat luong phan memHe thong cong cu kiem thu tu dong va dam bao chat luong phan mem
He thong cong cu kiem thu tu dong va dam bao chat luong phan memViet Hung Vu
 
Tailieu.vncty.com t ke-testcase
Tailieu.vncty.com   t ke-testcaseTailieu.vncty.com   t ke-testcase
Tailieu.vncty.com t ke-testcaseTrần Đức Anh
 
Nguyên tắc cơ bản của kiểm thử phần mềm
Nguyên tắc cơ bản của kiểm thử phần mềmNguyên tắc cơ bản của kiểm thử phần mềm
Nguyên tắc cơ bản của kiểm thử phần mềmNgọc Khánh
 
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀMTÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀMNguyễn Anh
 
Cnpmnc ch3 kiem thu ql cau hinh
Cnpmnc ch3 kiem thu ql cau hinhCnpmnc ch3 kiem thu ql cau hinh
Cnpmnc ch3 kiem thu ql cau hinhKy Vo
 
Kĩ thuật bảo trì phần mềm
Kĩ thuật bảo trì phần mềmKĩ thuật bảo trì phần mềm
Kĩ thuật bảo trì phần mềmPhạm Trung Đức
 
Unit Test with test JUNIT
Unit Test with test JUNIT Unit Test with test JUNIT
Unit Test with test JUNIT Cusanlui
 

Similar to Automation Testing & TDD (20)

TDD (Test Driven Development)
TDD (Test Driven Development)TDD (Test Driven Development)
TDD (Test Driven Development)
 
Kiểm Thử Junit
Kiểm Thử Junit Kiểm Thử Junit
Kiểm Thử Junit
 
Test Types & Test Levels.pdf
Test Types & Test Levels.pdfTest Types & Test Levels.pdf
Test Types & Test Levels.pdf
 
Test Driven development
Test Driven developmentTest Driven development
Test Driven development
 
chuong 5
chuong 5chuong 5
chuong 5
 
kiemthuphanmemnhom14 (1)nhomsvk17thuchien.pptx
kiemthuphanmemnhom14 (1)nhomsvk17thuchien.pptxkiemthuphanmemnhom14 (1)nhomsvk17thuchien.pptx
kiemthuphanmemnhom14 (1)nhomsvk17thuchien.pptx
 
Tdd in action
Tdd in actionTdd in action
Tdd in action
 
6 câu hỏi phỏng vấn tester thông dụng năm 2021
6 câu hỏi phỏng vấn tester thông dụng năm 20216 câu hỏi phỏng vấn tester thông dụng năm 2021
6 câu hỏi phỏng vấn tester thông dụng năm 2021
 
He thong cong cu kiem thu tu dong va dam bao chat luong phan mem
He thong cong cu kiem thu tu dong va dam bao chat luong phan memHe thong cong cu kiem thu tu dong va dam bao chat luong phan mem
He thong cong cu kiem thu tu dong va dam bao chat luong phan mem
 
Kiem thu
Kiem thuKiem thu
Kiem thu
 
Đề tài: Công cụ sinh dữ liệu thử tự động cho chương trình Java
Đề tài: Công cụ sinh dữ liệu thử tự động cho chương trình JavaĐề tài: Công cụ sinh dữ liệu thử tự động cho chương trình Java
Đề tài: Công cụ sinh dữ liệu thử tự động cho chương trình Java
 
Tailieu.vncty.com t ke-testcase
Tailieu.vncty.com   t ke-testcaseTailieu.vncty.com   t ke-testcase
Tailieu.vncty.com t ke-testcase
 
Nguyên tắc cơ bản của kiểm thử phần mềm
Nguyên tắc cơ bản của kiểm thử phần mềmNguyên tắc cơ bản của kiểm thử phần mềm
Nguyên tắc cơ bản của kiểm thử phần mềm
 
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀMTÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
 
Cnpmnc ch3 kiem thu ql cau hinh
Cnpmnc ch3 kiem thu ql cau hinhCnpmnc ch3 kiem thu ql cau hinh
Cnpmnc ch3 kiem thu ql cau hinh
 
Auto
AutoAuto
Auto
 
Kĩ thuật bảo trì phần mềm
Kĩ thuật bảo trì phần mềmKĩ thuật bảo trì phần mềm
Kĩ thuật bảo trì phần mềm
 
Kiem thu
Kiem thuKiem thu
Kiem thu
 
Unit Test with test JUNIT
Unit Test with test JUNIT Unit Test with test JUNIT
Unit Test with test JUNIT
 
Cac kythuatktpm
Cac kythuatktpmCac kythuatktpm
Cac kythuatktpm
 

More from Nhật Nguyễn Khắc

Livestream - Nhật ký học lập trình
Livestream - Nhật ký học lập trìnhLivestream - Nhật ký học lập trình
Livestream - Nhật ký học lập trìnhNhật Nguyễn Khắc
 
Livestream - Học lập trình là học gì?
Livestream - Học lập trình là học gì?Livestream - Học lập trình là học gì?
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
Hội thảo nghề nghiệp tại CodeGym 6/6/2020Hội thảo nghề nghiệp tại CodeGym 6/6/2020
Hội thảo nghề nghiệp tại CodeGym 6/6/2020Nhật Nguyễn Khắc
 
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
 
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
 
Agile Education - Classroms need Agility - Agile Vietnam Conference 2018
Agile Education - Classroms need Agility - Agile Vietnam Conference 2018Agile Education - Classroms need Agility - Agile Vietnam Conference 2018
Agile Education - Classroms need Agility - Agile Vietnam Conference 2018Nhật Nguyễn Khắc
 

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

Reflective Learning
Reflective LearningReflective Learning
Reflective Learning
 
Livestream - Nhật ký học lập trình
Livestream - Nhật ký học lập trìnhLivestream - Nhật ký học lập trình
Livestream - Nhật ký học lập trình
 
Livestream - Học lập trình là học gì?
Livestream - Học lập trình là học gì?Livestream - Học lập trình là học gì?
Livestream - Học lập trình là học gì?
 
Hội thảo nghề nghiệp tại CodeGym 6/6/2020
Hội thảo nghề nghiệp tại CodeGym 6/6/2020Hội thảo nghề nghiệp tại CodeGym 6/6/2020
Hội thảo nghề nghiệp tại CodeGym 6/6/2020
 
WHY DO WE REPORT?
WHY DO WE REPORT?WHY DO WE REPORT?
WHY DO WE REPORT?
 
Live stream: Học lập trình
Live stream: Học lập trìnhLive stream: Học lập trình
Live stream: Học lập trình
 
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
 
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
 
Agile Education - Classroms need Agility - Agile Vietnam Conference 2018
Agile Education - Classroms need Agility - Agile Vietnam Conference 2018Agile Education - Classroms need Agility - Agile Vietnam Conference 2018
Agile Education - Classroms need Agility - Agile Vietnam Conference 2018
 
Clean code coding like a professional
Clean code   coding like a professionalClean code   coding like a professional
Clean code coding like a professional
 

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
  • 5.
  • 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
  • 7.
  • 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
  • 36.
  • 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