Đảm bảo và kiểm soát chất lượng - Chương 4: Các kỹ thuật kiểm tra tĩnh
Các phương pháp Testing  Kiểm thử tĩnh  Kiểm thử động Các kiểu rà soát (Review) Phân tích tĩnh
Bạn đang xem trước 20 trang tài liệu Đảm bảo và kiểm soát chất lượng - Chương 4: Các kỹ thuật kiểm tra tĩnh, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ĐẢM BẢO VÀ KIỂM SOÁT 
CHẤT LƯỢNG 
HCM – 10/2012 
Chương 4: 
Các kỹ thuật kiểm tra 
tĩnh 
1 4/23/2014 
Nội dung 
Các phương pháp Testing 
 Kiểm thử tĩnh 
 Kiểm thử động 
Các kiểu rà soát (Review) 
Phân tích tĩnh 
4/23/2014 Trang 2 
Các phương pháp Testing 
4/23/2014 Trang 3 
Static Dynamic 
Structural 
Behavioural 
Functional Non-functional 
Reviews 
Walkthroughs 
Desk-checking 
Data 
Flow 
Symbolic 
Execution 
Definition 
-Use 
Statement 
Branch/Decision 
Branch Condition 
Branch Condition 
Combination 
LCSAJ 
Arcs 
Equivalence 
Partitioning 
Boundary 
Value Analysis 
Cause-Effect Graphing 
Random 
Usability 
Performance 
Static Analysis Inspection 
Control 
Flow 
etc. 
etc. 
etc. 
etc. 
etc. 
State Transition 
Kiểm thử tĩnh 
Phân tích tĩnh thực hiện mà không cần 
thực thi hệ thống thực sự. Điều này 
ngược với kiểm thử động 
Thường thì nó không kiểm thử chi tiết 
mà chủ yếu kiểm tra tính đúng đắn của 
code (mã lệnh), thuật toán hay tài liệu 
Đây chính là verification trong mô 
hình V&V 
Những thực hiện: lập trình viên và QC 
4/23/2014 Trang 4 
Lợi ích 
 Bổ sung cho kiểm tra động trong giai đoạn kiểm chứng 
chương trình 
 Có thể phát hiện sớm 30%-70% lỗi 
 Chi phí chỉnh sửa một khiếm khuyết tăng lên nhanh 
chóng sau mỗi giai đoạn. trong thiết kế tốn phí 1.0, 
trước kiểm thử: 6.5, trong kiểm thử:15 và sau phân 
phối sẽ từ 60 đến 100 
 Nhận diện tổng quát, các lỗi sớm được phát hiện. 
 Chi phí thấp hơn nhưng lại đạt được khả năng sửa lỗi 
phù hợp hơn, tốt hơn 
 Chỉ ra một “lô” các lỗi “liên quan” 
 Sửa toàn thể (một loạt) lỗi sau đó 
 Phát hiện sự phụ thuộc, thiếu nhất quán 
 Nâng cao khả năng bảo trì mã/chương trình 
 „Ngăn ngừa khiếm khuyết 
4/23/2014 Trang 5 
Chi phí sửa lỗi trong quá trình 
phát triển 
4/23/2014 Trang 6 
Kiểm thử động 
Kiểm thử động cần thực thi hệ thống 
thực sự bao gồm nhập các giá trị đầu 
vào và kiểm tra xem liệu đầu ra có như 
mong muốn hay không 
Đây chính là validation trong mô hình 
V&V 
Các phương pháp kiểm thử động gồm 
có kiểm thử Unit – Unit Tests, Kiểm thử 
tích hợp – Intergration Tests, Kiểm thử 
hệ thống – System Tests, và Kiểm thử 
chấp nhận sản phẩm – Acceptance 
Tests 
4/23/2014 Trang 7 
Kiểm thử Tĩnh vs. Kiểm thử Động 
4/23/2014 Trang 8 
Nội dung 
Các phương pháp Testing 
 Kiểm thử tĩnh 
 Kiểm thử động 
Các kiểu rà soát (Review) 
Phân tích tĩnh 
4/23/2014 Trang 9 
Thế nào là rà soát (Review) 
Review là quá trình kiểm tra có hệ thống 
được thực hiện bởi 1 hay nhiều người với 
mục tiêu chính là tìm kiếm và loại bỏ 
những khiếm khuyết 
Mục tiêu của rà soát: 
 Tìm kiếm khiếm khuyết 
 Thu sự hiểu biết 
 Tạo sự thảo luận 
Review giúp xác định lỗi trước khi chúng 
trở thành 1 phần của code thực thi 
 Làm những lỗi rẻ hơn và dễ sửa hơn 
4/23/2014 Trang 10 
Các loại lỗi 
Ba loại lỗi có ở mỗi bước của quá trình 
phát triển phần mềm: 
 Lỗi mới được sinh ra 
 Lỗi còn lại của các bước trước 
 Lỗi được phóng đại lên do các nhân tố lỗi 
của các bước trước 
Nếu không rà soát lỗi tồn lại gia tăng 
nhanh, và chi phí cho việc loại trừ các 
lỗi ngày càng lớn; Nguyên tắc xử lý lỗi: 
“chi phí bây giờ hay để lại sau phải với 
chi phí nhiều hơn?” 
4/23/2014 Trang 11 
Review: Chi phí và lợi ích 
Chi phí 
 Thời gian 
 Sự nỗ lực thu thập và phân tích các yếu tố 
(metrics) 
Lợi ích 
 Lịch biểu ngắn hơn 
 Chu kỳ kiểm tra ngắn hơn, chi phí kiểm thử 
thấp hơn 
 Gia tăng năng suất 
 Cải tiến chất lượng sản phẩm 
4/23/2014 Trang 12 
Tiến trình chung của hoạt động 
rà soát 
4/23/2014 Trang 13 
Vai trò và Trách nhiệm 
 Điều phối/Chủ trì (Moderator): 
 Chủ trì các cuộc họp 
 Thư ký: 
 Tập hợp thông tin về tìm kiếm lỗi 
 Tác giả: 
 Mô tả, giải thích và trả lời các câu hỏi 
 Người rà soát (Reviewer/inspector): 
 Tìm kiếm lỗi 
 Người quản lý: 
 Lập kế hoạch, sắp xếp tài nguyên và việc huấn luyện, 
hỗ trợ, phân tích các yếu tố quy trình 
 Đôi khi, một người có thể đóng nhiều vai trò 
 Tác giả đôi khi đóng vai trò như Trung gian 
 Một trong những người rà soát làm thư ký 
4/23/2014 Trang 14 
Cuộc họp rà soát 
Mọi cuộc họp rà soát phải: 
 Gồm từ 3 đến 5 người liên quan. 
 Phải chuẩn bị trước (1 người không quá2 
giờ). 
 Cuộc họp chỉ nên từ 2-3 giờ. Mỗi cuộc họp rà 
soát chỉ hạn chế trong một phần nhỏ, cụ thể. 
Kết luận đưa ra 1 trong 3 quyết định sau: 
 Chấp nhận sản phẩm không cần chỉnh sửa 
 Khước từ sản phẩm vì những lỗi nghiêm trọng 
 Chấp nhận cho chỉnh sửa sản phẩm, sau khi 
chỉnh sửa phải rà soát lại 
4/23/2014 Trang 15 
Sản phẩm rà soát 
Sản phẩm của cuộc họp rà soát: 
 Báo cáo các vấn đề nảy sinh do các cá 
nhân rà soát nêu ra 
 Một danh sách các vấn đề cần giải quyết 
 Một văn bản tổng kết cuộc họp rà soát đó. 
Văn bản tổng kết họp rà soát phải chỉ 
rõ: 
 Đã rà soát cái gì 
 Ai rà soát 
 Tìm thấy cái gì và Kết luận ra sao 
4/23/2014 Trang 16 
Những gì có thể được rà soát? 
Bất kỳ thứ gì được viết ra: 
 Hợp đồng, chính sách, kế hoạch kinh 
doanh 
 Yêu cầu, đánh giá mức độ khả thi, kế 
hoạch kiểm tra chấp nhận (Acceptance 
Test) 
 Kế hoạch Test, Test case, kết quả test 
 Bản thiết kế, CSDL 
 Source code 
 User guide, training 
  
4/23/2014 Trang 17 
Nhân tố Rà soát thành công 
 Huấn luyện kỹ càng 
 Rà soát cả chức năng – 
phi chức năng 
 Lập và theo danh sách 
kiểm tra (checklist) 
 Giới hạn tranh cãi 
 Tập trung tìm kiếm“vấn 
đề”, không đi vào giải 
quyết 
 Nắm rõ các ghi chú đã 
viết 
 Giới hạn, cẩn thận chọn 
lựa người tham gia 
4/23/2014 Trang 18 
 Phải có sự chuẩn bị 
 Rà soát sản phẩm, 
không rà soát người 
làm ra nó 
Các kiểu Review 
4/23/2014 Trang 19 
Kiểm lại (Desk checking) 
Tác giả sẽ gởi tài liệu, 
source code cho 
người cần rà soát 
4/23/2014 Trang 20 
Start 
Tự review 
Dựa trên kế hoạch review, 
thông báo cho reviewers 
Sửa lỗi 
End 
Author 
Reviewer 
Kiểm tra lại 
Review và phát hiện lỗi 
Author 
Reviewer 
Author 
Kiểm lại (Desk checking) 
Desk checking kém hiệu quả hơn quá trình 
lần bước (walktrough) và rà soát 
(inspector) vì không có sự phối hợp làm 
việc theo nhóm. 
 Quá trình làm việc theo nhóm thúc đẩy sự 
cạnh tranh lành mạnh 
 Con người thích phô trương các lỗi mà họ tìm 
thấy. 
Trong quá trình desk-checking có thể sẽ 
không tìm thấy lỗi nào. 
Tóm lại Desk-checking cũng có giá trị còn 
hơn là không làm gì cả. Tuy nhiên nó kém 
hiệu quả hơn walkthrough và inspection. 
4/23/2014 Trang 21 
Lần bước (Walkthrough) 
Walkthrough: 
 Tác giả (Author) là 
nhân vật trung tâm và 
là người điều phối buổi 
họp 
 Những người tham gia 
đặt câu hỏi, và ghi chú 
những lỗi có thể có 
4/23/2014 Trang 22 
Start 
Planning 
Walk Through 
Rework 
End 
Author 
Author/Reviewer 
Follow up 
Author 
Author/Reviewer 
Lần bước (Walkthrough) 
Mục tiêu: 
 Giải thích và đánh giá những 
nội dung trong tài liệu hay 
source code 
 Phát hiện sớm những lỗi 
4/23/2014 Trang 23 
 Thiết lập sự hiểu biết chung mọi người trong 
team 
 Xem xét và thảo luận những giải pháp được 
đề nghị cũng như tính khả thi của những giải 
pháp này 
 Thiết lập sự nhất trí trong team 
Rà soát cặp (Peer Review) 
Không có quy trình 
thực sự, không tài liệu 
ghi chú, không xác 
định rõ trách nhiệm 
4/23/2014 Trang 24 
Review có thể tiến hành qua „trao đổi 
ngoài lề, lập trình theo cặp 
Mục tiêu chính là để kiếm ra lỗi 
Chưa hữu ích, rẻ, phổ biến 
Thanh tra (Inspection) 
4/23/2014 Trang 25 
Start 
Lên kế hoạch 
Họp tổng quan 
Chuẩn bị 
Buổi họp rà soát 
Defect Log 
Buổi họp phân tích 
nguyên nhân 
Những để nghị để cải thiện 
quy trình 
Làm lại 
Tiếp tục 
Tất cả lỗi được 
sửa 
End 
Chủ trì 
Nhóm 
Chủ trì/Tác giả 
Nhóm 
Chủ trì/Tác giả 
Reviewer/Chủ trì/Tác giả 
No 
Thanh tra (Inspection) 
Buổi họp được lên kế hoạch và có cấu 
trúc rõ ràng 
Có giai đoạn chuẩn bị kỹ càng 
Vai trò của mọi người trong buổi họp 
được phân rõ ràng 
Được điều khiển bởi người điều tiết 
4/23/2014 Trang 26 
Thanh tra (Inspection) 
4/23/2014 Trang 27 
Kích cỡ 
 Min: 3 (4 nếu tác giả là 
người trình bày) 
 Max: 7 (ít hơn nếu chủ 
trì có ít kinh nghiệm) 
Thời lượng 
 Không nhiều hơn 2 giờ 
Kết quả 
 Tất cả reviewers phải 
đồng ý trên kết quả 
 Tất cả các phát hiện 
phải được lưu trữ lại 
 Scope 
 Chỉ nên tập trung vào từng 
phần cụ thể 
 130-150 SLOC per hour 
 Thời điểm 
 Không quá sớm 
 Không quá muộn 
 Mục tiêu 
 Không để những lỗi tương tự 
xuất hiện trong tương lai 
 Nguyên tắc (Rules) 
 Không cố gắng giải quyết vấn 
để liền 
 Tất cả mọi người tham dự 
phải chuẩn bị tài liệu kỹ càng 
Lỗi thường gặp trong phân tích 
yêu cầu-thiết kế 
 Mập mờ: nghĩa chính xác là gì ? 
 VD: Hệ thống nên truy cập đển hệ thống khác 
• Hệ thống khác là những hệ thống nào? Phương thức truy 
cập? Cấu trúc của dữ liệu truyền nhận? 
 Không đầy đủ: Rồi, Còn gì nữa? 
 VD: trên 3 lần nhập mật khẩu không đúng, hệ thống 
sẽ khóa tài khoản của NSD 
• Trong bao lâu? Muốn mở khóa thì sao? Ai có quyền mở 
khóa? 
 Không kiểm tra được: Tôi có thể kiểm tra phần này 
ra sao? 
 VD: Hệ thống có khả năng sẵn sàng 100% 
• Không biết kỹ thuật kiểm tra để biết hoàn toàn sẵn sàng 
 Quá phức tạp hay khó hiểu 
 Các sơ đồ ‘tồi” và gây khó hiểu 
4/23/2014 Trang 28 
Danh mục rà soát kế hoạch 
kiểm thử 
Các chức năng chủ yếu có được trình 
diễn sớm không? 
Kế hoạch kiểm thử có phù hợp với kế 
hoạch dự án tổng thể hay không? 
Lịch trình kiểm thử có được xác định rõ 
ràng hay không? 
Nguồn lực và công cụ kiểm thử đã được 
xác định và đã sẵn sàng hay chưa? 
Đã thiết lập cơ chế lưu trữ báo cáo 
chưa? 
4/23/2014 Trang 29 
Danh mục rà soát kế hoạch 
kiểm thử 
Các thiết bị và các tình huống kiểm thử 
đã được minh định chưa? 
Công việc phát triển kiểm thử đã được 
lập lịch chưa? 
Thử nghiệm áp bức cho phần mềm đã 
được đặc tả chưa? 
Cả hai loại kiểm thử hộp trắng và hộp 
đen đã được đặc tả chưa? 
4/23/2014 Trang 30 
Danh mục rà soát cho việc tạo 
test case 
Có phải tất cả các đường logic độc lập đều 
được kiểm thử? 
Có phải tất cả các ca kiểm thử đều đã được 
xác định và lập danh sách với đủ các kết 
qủa mong đợi? 
Việc xử lý sai có được kiểm thử? 
Các giá trị biên có được kiểm thử? 
Các yêu cầu thời gian có được kiểm thử? 
Các biến thể chấp nhận được của kết quả 
kiểm thử mong đợi đã được đặc tả chưa? 
4/23/2014 Trang 31 
Danh mục rà soát cho việc 
kiểm thử giao diện 
 Màu nền chung của toàn bộ màn hình 
 Màu chữ, font, font size 
 Canh lề 
 Thông báo trên màn hình có được viết đúng chính tả 
 Kiểm tra maxlength 
 Phân biệt chữ hoa / chữ thường 
 Phân biệt 全角/半角 (toàn giác/bán giác: chỉ áp dụng với Tiếng 
Nhật, toàn giác thì chữ mập, tròn hơn 2-3bytes; bán giác: chữ 
ốm 1byte) 
 Phân biệt ký tự unicode 
 Cho phép null hay không 
 Cho phép nhập ký tự đặc biệt hay không? Kiểm tra format 
theo kiểu nào? 
 Kiểm tra đối với trường hợp năm nhuần có được tính đúng 
không? 
 Kiểm tra giá trị 00 và 13 đối với tháng 
 Kiểm tra giá trị 00 và 32 đối với ngày 
 Kiểm tra giá trị 28 , 29, 30 -Feb có được tính đúng không? 
 4/23/2014 Trang 32 
Lỗi tiêu biểu phát hiện 
Tham chiếu tới biến chưa gán trị 
Giao tiếp không nhất quán giữa chương 
trình và module 
Biến chưa bao giờ sử dụng 
Mã “chết” 
Vi phạm chuẩn lập trình 
Yếu điểm bảo mật 
Vi phạm cú pháp mã và mô hình 
v..v 
4/23/2014 Trang 33 
Nội dung 
Các phương pháp Testing 
 Kiểm thử tĩnh 
 Kiểm thử động 
Các kiểu rà soát (Review) 
Phân tích tĩnh 
4/23/2014 Trang 34 
Phân tích tĩnh 
Phân tích source code để tìm ra những lỗi 
mà không cần thực hiện chúng 
Phân tích tĩnh thường đi kèm với những 
công cụ hỗ trợ 
Có khá nhiều công cụ hỗ trợ tĩnh, nhưng 
phần lớn chúng tập chung vào: 
 Những tiêu chuẩn code (coding standards) 
 Cấu trúc luồng điều khiển (control flow 
structure) 
 Cấu trúc luồng dữ liệu (data flow structure ) 
 Cấu trúc dữ liệu (data structure) 
4/23/2014 Trang 35 
Những tiêu chuẩn code (coding 
standards) 
Người lập trình viên không chỉ có nhiệm 
vụ viết code chính xác mà còn phải viết 
code có chất lượng cao 
 Dễ đọc, dễ hiểu, có thể sử dụng lại, có thể 
bảo trì 
Những tiêu chuẩn code: sẽ lập ra những 
nguyên tắc (rule) về lập trình để đảm 
bảo code đạt được những mục đích trên 
và tránh được những lỗi tiềm ẩn 
4/23/2014 Trang 36 
Coding standards 
 A set of programming rules 
 e.g. 'Always check boundaries 
on an array when copying to that 
array' 
 Naming conventions 
4/23/2014 Trang 37 
 Variables, global variables, constants, methods, classes, 
attributes,... 
 Comments 
 brief, explain WHY instead of HOW, placement of 
comments,... 
 Layout specifications 
 indentation, spacing, blank lines, curly braces,... 
 ... 
 Should use support tools 
Cấu trúc luồng điều khiển 
Thể hiện source code dưới dạng đồ thị, 
giúp xác định: 
 Những vòng lặp vô hạn 
 Những dòng code chết 
 Những điều kiện đi vào vòng lặp 
 Độ phức tạp của chương trình 
• complexity = number of decisions + 1 
4/23/2014 Trang 38 
Cấu trúc luồng điều khiển 
4/23/2014 Trang 39 
1 
2 3 5 
Hình nào có độ phức tạp cao hơn? 
Cấu trúc luồng điều khiển 
4/23/2014 Trang 40 
Cấu trúc luồng dữ liệu 
Tập trung vào sự xuất 
hiện của những biến dữ 
liệu từ lúc nó được khai 
báo đến khi nó bị hủy, 
để xác định: 
4/23/2014 Trang 41 
 Biến không bao giờ được sử dụng 
 Tham khảo đến 1 biến chưa được khai báo 
 Phép gán không chính xác 
Lợi ích của phân tích tĩnh 
Phát hiện lỗi sớm 
Có những cảnh báo về những lỗi tiềm 
ẩn 
Xác định những lỗi không dễ dàng phát 
hiện trong kiểm tra động 
Tăng tính bảo trì (maintainability) của 
source code 
Ngăn ngừa lỗi 
4/23/2014 Trang 42 
ĐẢM BẢO VÀ KIỂM SOÁT 
CHẤT LƯỢNG 
43 4/23/2014 
            
         
        
    





 
                    