LOGO
www.themegallery.com
SOFTWAVE TESTING
SOFTWAVE TESTING
NHẬP MÔN CÔNG NGHỆ PHẦN MỀM
NGUYỄN HUY THẮNG
09520660
BÙI CHÍ THIỆN
09520662
LOGO
www.themegallery.com
ĐỊNH NGHĨA VÀ KHÁI NiỆM
1
SỰ HÌNH THÀNH VÀ PHÁT TRIỂN
2
KiỂM THỬ PHẦN MỀM VÀ QUI TRÌNH TEST
3
SOFTWAVE TESTING
LOGO
www.themegallery.com
www.themegallery.com
SỰ HÌNH THÀNH VÀ PHÁT TRIỂN
1957-1978:” Demonstration" (minh họa), bên cạnh việc sửa lỗi (debugging), người ta còn thêm
vào một lớp kiểm tra khác nhằm chứng minh phần mềm có hoạt động theo đúng thiết kế hay không.
1979-1982: "Destruction" (Phá hoại): đặt ra và phát hiện những tình huống trái ngược với quy luật
chạy của phần mềm, có thể khiến phần mềm chết hoặc chạy sai để sửa và ngăn ngừa các tình
huống nguy hiểm này cho hệ thống về sau.
"Debugging" là phần mềm chỉ được sửa lỗi để đảm bảo rằng nó có thể chạy được mà không
quan tâm phần mềm có đúng yêu cầu hay không, có thoả mãn khách hàng hay không.
LOGO
www.themegallery.com
www.themegallery.com
1983-1987: “Evaluation" (Đánh giá) testing bắt đầu được thực hiện ở cuối tất cả các khâu
Kiểm thử đơn vị
Kiểm thử tích hợp
Kiểm thử hệ thống
Kiểm thử tích hợp hệ thống
1988 đến nay “Prevention” đi sâu hơn, tập trung test các progress (tiến trình) ở từng khâu và focus vào
những nơi lỗi có thể xảy ra nhiều nhất.
SỰ HÌNH THÀNH VÀ PHÁT TRIỂN
LOGO
www.themegallery.com
ĐỊNH NGHĨA VÀ KHÁI NiỆM
Phần mềm:là những chương trình, ứng dụng, website được viết, cài đặt và thực thi trên môi trường điện toán (computing)
như: máy tính (computer), điện thoại di động (mobile phone)…Khái niệm software trong kiểm thử phần mềm còn mở rộng
các tài liệu (documentation), dữ liệu (data) phù hợp và liên quan đến hoạt động của hệ thống điện toán.
PHẦN MỀM:
Những phần mềm này được gọi chung là “Phần mềm được kiểm thử” (software under test).
Ví dụ: Khi kiểm thử (test) một phần mềm kế toán thì Kiểm thử viên (tester) phải kiểm tra các chức năng có hoạt
động đúng với thiết kế không, dữ liệu có đúng và đảm bảo không…
LOGO
www.themegallery.com
KiỂM THỬ PHẦN MỀM: (SOFTWAVE TESTING)
Kiểm thử phần mềm (software testing) là hoạt động nhằm tìm kiếm, phát hiện các lỗi của phần mềm được được kiểm
thử về thiết kế, mã nguồn, chức năng, dữ liệu, bảo mật, thân thiện với người dùng, tài liệu kèm theo, môt trường hoạt
động, tốc độ hoạt động, khả năng tải của hệ thống, …
Kiểm thử thường được chia thành các nhóm là Nhóm thuộc về chức năng (Functionality), Nhóm không thuộc chức
năng (Non-Functionality), Nhóm thuộc về cấu trúc (Structural) và Nhóm liên quan đến các thay đổi (Change Related)
Kiểm thử phần mềm nâng cao khả năng kiểm soát và hạn chế các lỗi xảy ra khi phát triển phần mềm ngay từ ban đầu.
ĐỊNH NGHĨA VÀ KHÁI NiỆM
LOGO
www.themegallery.com
Acceptance, User Acceptance Testing
System Testing
Unit tessting
Kiểm thử chấp nhận
Kiểm thử Hệ thống
Kiểm thửThành phần
Kiểm thử Đơn vị
Component, module tessting
CÁC MỨC ĐỘ KiỂM THỬ (TEST LEVEL);
ĐỊNH NGHĨA VÀ KHÁI NiỆM
LOGO
www.themegallery.com
Unit Testing là việc kiểm thử ở mức độ thấp nhất (các phương thức – method, hàm – function, lớp – class trong mã
nguồn). Việc kiểm tra ở mức độ này thường do chính các Lập trình viên (Developer) thực hiện trong quá trình mã hóa
(coding, implement).
Kiểm thử Chấp nhận
Một mô hình thường được ứng dụng với Unit Testing là Phát triển theo định hướng kiểm thử (Test-
Driven Development)
Kiểm thử thành phần
Là việc kiểm thử các gói chức năng (module, component) riêng lẻ Không phụ thuộc đến các chức năng, thành phần khác
trong hệ thống.
Là việc kiểm thử nhằm xem xét các vấn đề có thể xảy ra khi hai hoặc nhiều Thành phần (component, module) của hệ thống
tương tác với nhau.
ĐỊNH NGHĨA VÀ KHÁI NiỆM
LOGO
www.themegallery.com
Kiểm thủ hệ thống
Là mức độ kiểm thử toàn bộ các chức năng của hệ thống phần mềm. Bao gồm tất cả các thành phần tương tác với nhau, và
hoạt động trong môi trường giống như môi trường thực tế .
Kiểm thử Hệ thống cũng chú ý đến vấn đề bảo mật, thân thiện, khả năng đáp ứng, tốc độ thực hiện của hệ thống phần mềm.
Kiểm thủ chấp nhận
Mức độ này được thực hiện bởi phía người dùng với một nhóm độc lập với nhóm phát triển. Mục đích của giai đoạn này là kiểm
tra, đánh giá phần mềm có đáp ứng được các yêu cầu của người dùng đã đề ra hay không? Có thể triển khai cho công việc thự
tế của người dùng hay không.
ĐỊNH NGHĨA VÀ KHÁI NiỆM
LOGO
www.themegallery.com
CÁC KỸ THUẬT KiỂM THỬ (TESTING TYPE)
SMOKE TESTING
INTERFACE/ GUI TESTING
BOUNDARY TESTING
REGRESSION TESTING
PERFORMANCE TESTING
STRESS TESTING
VERIFICATION TESTING
ĐỊNH NGHĨA VÀ KHÁI NiỆM
LOGO
www.themegallery.com
SMOKE TESTING
Là phương pháp kiểm thử nhằm kiểm tra các chức năng chính của một thành phần, hoặc hệ thống hoạt động tốt.
Smoke Testing hướng đến việc kiểm tra tất cả các chức năng chính của hệ thống, phạm vi rộng, không đi sâu kiểm tra
chi tiết các chức năng cụ thể.
Smoke Testing thường được thực hiện sau khi có bản build mới trước khi thực hiện các phương pháp kiểm thử khác
chi tiết hơn.
INTERFACE/GUI TESTING (KiỂM THỬ GIAO DiỆN NGƯỜI DÙNG)
Là kỹ thuật kiểm thử để kiểm tra giao diện thật sự của phần mềm có đúng với yêu cầu thiết kế hay không (về các đối
tượng trên giao diện, vị trí, màu sắc, lỗi chính tả, trạng thái của các đối tượng, …)
ĐỊNH NGHĨA VÀ KHÁI NiỆM
LOGO
www.themegallery.com
BOUNDARY TESTING
Là kỹ thuật kiểm thử dựa trên giá trị biên (boundary value) của vùng dữ liệu hợp lệ.
Việc kiểm thử này nhằm mục đích đảm bảo hệ thống sẽ không chấp nhận các dữ liệu nằm bên ngoài vùng dữ
liệu hợp lệ và chỉ chấp nhận các dữ liệu ở trong biên (bao gồm cả biên).
Ví dụ: Một trường dữ liệu (data field) có định dạng dữ liệu Integer (3). Tức là chỉ chấp nhận các giá trị nguyên,
lớn hơn hoặc bằng 0, và nhỏ hơn hoặc bằng 999 (0<= x <=999). Các giá trị biên là 0 và 999. Boundary Testing
nhằm đảm bảo hệ thống chỉ chấp nhận các giá trị x như trên, không chấp nhận các giá trị nhỏ hơn 0 hoặc lớn
hơn 999.
ĐỊNH NGHĨA VÀ KHÁI NiỆM
LOGO
www.themegallery.com
REGRESSION TESTING (KiỂM THỬ HỒI QUY)
Là kỹ thuật kiểm thử nhằm đảm bảo các chức năng sẵn có của thành phần/hệ thống vẫn hoạt động tốt sau khi có sự thay
đổi với chương trình.
Việc Regression Testing thường chú trọng đến các chức năng chính của thành phần/hệ thống.
Việc Regression Testing được thực hiện trong các trường hợp: sau khi sửa lỗi, viết thêm chức năng, thay đổi chức năng
sẵn có, thay đổi môi trường, nâng cấp, tối ưu mã nguồn.
STRESS TESTING (KiỂM THỬ KHẢ NĂNG CHỊU TẢI)
Là kỹ thuật kiểm thử nhằm xác định các “giới hạn” của hệ thống. Tức là làm cho hệ thống hoạt
động ở mức tối đa để biết được khi nào hệ thống hoạt động tốt, hoạt động chậm hoặc quá tải.
ĐỊNH NGHĨA VÀ KHÁI NiỆM
LOGO
www.themegallery.com
PERFORMENCE TESTING (KiỂM THỬ HOẠT ĐỘNG)
Performance Testing là kỹ thuật kiểm thử nhằm xác định khả năng hoạt động của hệ thống phù hợp với yêu cầu hay
không. Có thể hiểu “performance” ở đây là tốc độ hoạt động của hệ thống nhanh hay chậm, có đảm bảo hiệu suất hay
không.
VERIFICATION TESTING (KiỂM THỬ XÁC NHẬN)
Phương pháp này được thực hiện để xác nhận một lỗi đã được sửa chữa thật sự hay chưa.
ĐỊNH NGHĨA VÀ KHÁI NiỆM
LOGO
www.themegallery.com
MỘT SỐ KỸ THUẬT KiỂM THỬ KHÁC
Kiểm thử hộp đen (Black-box Testing): Là hình thức kiểm thử mà kiểm thử viên không cần biết đến cách thức hoạt động, mã
nguồn, xử lý dữ liệu bên trong một thành phần/hệ thống. Công việc cần làm là nhập dữ liệu đầu vào (input) và kiểm tra kết
quả trả về có đúng như mong muốn hay không.
Kiểm thử hộp trắng (White-box Testing): Là hình thức kiểm thử mà kiểm thử viên biết được các cấu trúc bên trong của
chương trình (mã nguồn, xử lý dữ liệu, …). Việc kiểm thử được dựa trên các phân tích về cấu trúc bên trong của thành
phần/hệ thống.
Kiểm thử hộp xám (Gray-box Testing): Là hình thức “lai” giữa Kiểm thử hộp đen và Kiểm thử hộp trắng.
Kiểm thử bằng tay (Manual Testing): Là thuật ngữ để chỉ kỹ thuật kiểm thử mà các công đoạn được làm hoàn toàn bằng sức
người.
Kiểm thử tự động (Automation Testing): Là thuật ngữ để chỉ kỹ thuật kiểm thử với các công đoạn được tự động hóa bởi máy
tính thông qua các “đoạn mã kiểm thử” (test script).
ĐỊNH NGHĨA VÀ KHÁI NiỆM
LOGO
www.themegallery.com
K
i
ể
m
t
r
a
C
á
c
b
ộ
p
h
ậ
n
đ
ơ
n
l
ẻ
Đ
Ơ
N
V
Ị
L
Ậ
P
T
R
Ì
N
H
K
i
ể
m
t
r
a
T
í
c
h
h
ợ
p
c
á
c
đ
ơ
n
v
ị
T
O
À
N
B
Ộ
H
Ệ
T
H
Ố
N
G
C
Á
C
B
Ộ
P
H
Ậ
N
N
H
Ó
M
K
i
ể
m
t
r
a
h
ệ
t
h
ố
n
g
S
a
u
k
h
i
t
í
c
h
h
ợ
p
K
i
ể
m
t
r
a
C
h
ấ
p
n
h
ậ
n
s
ả
n
p
h
ẩ
m
T
O
À
N
B
Ộ
H
Ệ
T
H
Ố
N
G
N
H
Ì
N
T
Ừ
K
H
Á
C
H
H
A
N
G
KiỂM THỬ PHẦN MỀM VÀ QUI TRÌNH TEST
LOGO
www.themegallery.com
UNIT TEST (KiỂM TRA MỨC ĐƠN VỊ)
Một Unit là một thành phần PM nhỏ nhất mà ta có thể kiểm tra được. Các hàm (Function), thủ tục (Procedure), lớp (Class),
hoặc các phương thức (Method) đều có thể được xem là Unit.
Vì Unit được chọn để kiểm tra thường có kích thước nhỏ và chức năng hoạt động đơn giản, chúng ta không khó khăn
gì trong việc tổ chức, kiểm tra, ghi nhận và phân tích kết quả kiểm tra. Nếu phát hiện lỗi, việc xác định nguyên nhân và
khắc phục cũng tương đối dễ dàng vì chỉ khoanh vùng trong một đơn thể Unit đang kiểm tra
Unit Test thường do lập trình viên thực hiện Mục đích của Unit Test là bảo đảm thông tin được xử lý và xuất (khỏi
Unit) là chính xác, trong mối tương quan với dữ liệu nhập và chức năng của Unit.
KiỂM THỬ PHẦN MỀM VÀ QUI TRÌNH TEST
LOGO
www.themegallery.com
INTERGRATION TEST (KiỂM TRA TICH HỢP)
Integration Test có 2 mục tiêu chính:
- Phát hiện lỗi giao tiếp xảy ra giữa các Unit.
- Tích hợp các Unit đơn lẻ thành các hệ thống nhỏ (subsystem) và cuối cùng là nguyên hệ thống hoàn chỉnh (system) chuẩn bị cho
kiểm tra ở mức hệ thống (System Test).
Có 4 loại kiểm tra trong Integration Test:
- Kiểm tra cấu trúc (structure): kiểm tra nhằm bảo đảm các thành phần bên trong của một chương trình chạy đúng, chú trọng đến hoạt
động của các thành phần cấu trúc nội tại của chương trình chẳng hạn các lệnh và nhánh bên trong.
- Kiểm tra chức năng (functional): kiểm tra chỉ chú trọng đến chức năng của chương trình, không quan tâm đến cấu trúc bên trong, chỉ
khảo sát chức năng của chương trình theo yêu cầu kỹ thuật.
- Kiểm tra hiệu năng (performance): Kiểm tra việc vận hành của hệ thống.
- Kiểm tra khả năng chịu tải (stress): Kiểm tra các giới hạn của hệ thống.
KiỂM THỬ PHẦN MỀM VÀ QUI TRÌNH TEST
LOGO
www.themegallery.com
SYSTEM TEST (KiỂM TRA MỨC HỆ THỐNG)
Kiểm tra chức năng (Functional Test): bảo đảm các hành vi của hệ thống thỏa mãn đúng yêu cầu thiết kế.
Kiểm tra khả năng vận hành (Performance Test): bảo đảm tối ưu việc phân bổ tài nguyên hệ thống (ví dụ bộ nhớ) nhằm đạt các chỉ
tiêu như thời gian xử lý hay đáp ứng câu truy vấn…
Kiểm tra khả năng chịu tải (Stress Test hay Load Test): bảo đảm hệ thống vận hành đúng dưới áp lực cao (ví dụ nhiều người truy
xuất cùng lúc). Stress Test tập trung vào các trạng thái tới hạn, các “điểm chết”, các tình huống bất thường…
Kiểm tra cấu hình (Configuration Test)
Kiểm tra khả năng bảo mật (Security Test): bảo đảm tính toàn vẹn, bảo mật của dữ liệu và của hệ thống.
Kiểm tra khả năng phục hồi (Recovery Test): bảo đảm hệ thống có khả năng khôi phục trạng thái ổn định trước đó trong tình
huống mất tài nguyên hoặc dữ liệu; đặc biệt quan trọng đối với các hệ thống giao dịch như ngân hàng trực tuyến.
KiỂM THỬ PHẦN MỀM VÀ QUI TRÌNH TEST
LOGO
www.themegallery.com
Lập kế hoạch cho
Lập kế hoạch cho
Lập kế hoạch cho
Lập kế hoạch cho
Lập kế hoạch cho
Lập kế hoạch cho
Lập kế hoạch cho
Lập kế hoạch cho
Phát triển phần mềm
Kiểm tra phần mềm
Yêu cầu khách hàng
(Requirements)
Thiết kế cấp cao
(High level design)
Thiết kế chi tiết
(Detailed design)
Lập trình
(Coding)
Đơn vị lâp trình
(Unit)
Tích hợp hệ thống
(Intergration)
Toàn bộ hệ thống
(System)
Chấp nhận sản phẩm
(acceptance)
KiỂM THỬ PHẦN MỀM VÀ QUI TRÌNH TEST
LOGO
www.themegallery.com
ACCEPTANCE TEST (KiỂM TRA CHẤP NHẬN SẢN PHẨM)
Các tài liệu yêu cầu của khách hàng
Các tài liệu yêu cầu của khách hàng
Hệ thống đã được tích hợp hoàn
chỉnh
Hệ thống đã được tích hợp hoàn
chỉnh
Dữ liệu
Dữ liệu
Tài liệu sử
dụng
Tài liệu sử
dụng
Kiểm tra chức năng
Kiểm tra khả năng chịu
đựng
Kiểm tra khả năng bảo
mật
Kiểm tra cấu hình
Kiểm tra khả năng vận
hành
Kiểm tra khả năng
phục hồi
Hệ thống đã sẵn sàn để khách hàng chấp nhận
Hệ thống đã sẵn sàn để khách hàng chấp nhận
Kiểm tra đã hoàn thành
Hệ thống đã sẵn sàn để khách
hàng chấp nhận
KiỂM THỬ PHẦN MỀM VÀ QUI TRÌNH TEST
LOGO
www.themegallery.com
REGRESSION TEST (KiỂM TRA HỒI QUY)
Trước tiên cần khẳng định Regression Test không phải là một mức kiểm tra, như các mức khác đã nói ở trên. Nó đơn thuần kiểm tra
lại PM sau khi có một sự thay đổi xảy ra, để bảo đảm phiên bản PM mới thực hiện tốt các chức năng như phiên bản cũ và sự thay đổi
không gây ra lỗi mới trên những chức năng vốn đã làm việc tốt. Regression test có thể thực hiện tại mọi mức kiểm tra.
Mặc dù không là một mức kiểm tra, thực tế lại cho thấy Regression Test là một trong những loại kiểm tra tốn nhiều
thời gian và công sức nhất. Tuy thế, việc bỏ qua Regression Test là “không được phép” vì có thể dẫn đến tình trạng
phát sinh hoặc tái xuất hiện những lỗi nghiêm trọng, mặc dù ta “tưởng rằng” những lỗi đó hoặc không có hoặc đã
được kiểm tra và sửa chữa rồi!
KiỂM THỬ PHẦN MỀM VÀ QUI TRÌNH TEST
LOGO
www.themegallery.com
Thank You !