Bài giảng Kiểm thử phần mềm - Chương 7: Thanh tra, chạy thử & xem xét mã nguồn cung cấp cho người học các kiến thức: Phương pháp thanh kiểm tra mã nguồn, checklist được dùng để thanh tra mã nguồn,... Mời các bạn cùng tham khảo.
Chương Thanh tra, chạy thử & xem xét mã nguồn 7.1 Giới thiệu Trong chương 3, 4, 5, ₫ã giới thiệu nhiều kỹ thuật kiểm thử hộp ₫en lẫn hộp trắng Điểm chung kỹ thuật phải chạy thật phần mềm máy tính với mơi trường phù hợp ₫ể tìm lỗi phần mềm Nhưng hệ ₫ầu tiên máy tính, máy tính cịn yếu ₫ắt, người lập trình chưa có hội làm việc trực tiếp máy tính, họ viết chương trình giấy ₫em chồng giấy miêu tả chương trình liệu cần xử lý ₫ến trung tâm máy tính ₫ể ₫ăng ký chạy Khi nhận ₫ược kết quả, thấy khơng vừa ý, họ phải tự ₫ọc xem xét mã nguồn giấy ₫ể tìm lỗi sửa lỗi Hiện nay, người kiểm thử ₫ọc mã nguồn, ý tưởng nghiên cứu mã nguồn ₫ược chấp nhận rộng rãi nỗ lực kiểm thử hữu hiệu lý sau : kích thước ₫ộ phức tạp thuật giải chương trình kích thước ₫ội phát triển phần mềm thời gian qui ₫ịnh cho việc phát triển phần mềm tảng văn hóa ₫ội ngũ lập trình Qui trình kiểm thử thủ công (chỉ dùng sức người, không dùng máy tính) ₫ược gọi kiểm thử tĩnh, qui trình có số tính chất : Rất hữu hiệu việc tìm lỗi nên project phần mềm nên dùng hay nhiều kỹ thuật việc kiểm thử phần mềm CuuDuongThanCong.com https://fb.com/tailieudientucntt Dùng kỹ thuật kiểm thử tĩnh khoảng thời gian từ lúc phần mềm ₫ược viết ₫ến phần mềm ₫ược kiểm thử máy tính Khơng có nhiều kết toán học ₫ánh giá kỹ thuật kiểm thử tĩnh chúng liên quan ₫ến người Kiểm thử thủ cơng TPPM ₫ã ₫óng góp phần cho tính tin cậy, cơng nghiệp hoạt ₫ộng kiểm thử thành công TPPM : Các lỗi ₫ược phát sớm giúp giảm chi phí sữa lỗi giúp nâng cao xác xuất sữa lỗi ₫úng ₫ắn Lập trình viên dễ dàng chuẩn bị tinh thần kỹ thuật kiểm thử máy tính bắt ₫ầu Có nhiều phương pháp kiểm thử thủ cơng TPPM, ₫ó phương pháp quan trọng kiểm tra mã nguồn (Code Inspections) chạy thủ công mã nguồn (Walkthroughs) Hai phương pháp có nhiều ₫iểm giống : Cần nhóm người ₫ọc hay kiểm tra trực quan TPPM Các thành viên phải có chuẩn bị trước, khơng khí họp phải "họp ý kiến thẳng thắn, chân thành" Mục tiêu họp tìm lỗi khơng phải tìm biện pháp giải lỗi Chúng cải tiến, tăng cường phương pháp kiểm thử cũ phương pháp "desk-checking" mà giới thiệu sau Hai phương pháp kiểm tra mả nguồn chạy thủ cơng mã nguốn phát ₫ược từ 30 tới 70% lỗi viết mã nguồn lỗi thiết kế luận lý TPPM bình thường Tuy nhiên phương pháp không hiệu việc phát lỗi thiết kế cấp cao lỗi hoạt ₫ộng phân tích yêu cầu TPPM : CuuDuongThanCong.com https://fb.com/tailieudientucntt Các hoạt ₫ộng người thường tìm ₫ược lỗi dễ Do ₫ó phương pháp kiểm thử tĩnh bổ trợ thêm cho kỹ thuật kiểm thử qui máy tính 7.2 Phương pháp kiểm tra mã nguồn Bao gồm thủ tục kỹ thuật phát lỗi nhờ nhóm người ₫ọc mã nguồn Các vấn ₫ề bàn cải liên quan ₫ến phương pháp kiểm tra thủ tục vận hành, form kết cần tạo Một nhóm kiểm tra mã nguồn thường gồm người : người ₫iều hành (chủ tịch hội ₫ồng), thường kỹ sư QC lập trình viên TPPM cần kiểm thử Kỹ sư thiết kế TPPM (nếu khơng phải lập trình viên TPPM này) Chuyên gia kiểm thử Người ₫iều hành : nên người lập trình kinh nghiệm, uy tín không nên tác giả TPPM cần kiểm thử không cần biết chi tiết TPPM cần kiểm thử Các nhiệm vụ : Phân phối tài liệu cho thành viên khác trước họp diễn Lập lịch cho buổi họp kiểm tra Điều khiển họp kiểm tra Ghi nhận lỗi phát ₫ược thành viên Công việc chuẩn bị : Thời gian ₫ịa ₫iểm buổi họp : tránh ₫ược ngắt quảng từ Thời lượng tối ưu cho buổi họp từ 90 tới 120 phút CuuDuongThanCong.com https://fb.com/tailieudientucntt Mỗi thành viên cần chuẩn bị thái ₫ộ khách quan, nhẹ nhàng buổi họp Các tài liệu cần có cho thành viên (₫ã phân phát trước họp diễn ra) : Mã gnuồn TPPM cần kiểm thử Danh sách lỗi khứ thường gặp (checklist) Trong suốt họp, hoạt ₫ộng xảy : Hoạt ₫ộng : Người lập trình giới thiệu hàng lệnh luận lý TPPM cho thành viên khác nghe Trong thảo luận, viên khác ₫ưa câu hỏi theo dõi phần trả lời ₫ể xác ₫ịnh có lỗi hàng lệnh khơng ? (Tốt người lập trình, thành viên khác) phát ₫ược nhiều lỗi phần giới thiệu mã nguồn này) Hoạt ₫ộng : Các thành viên phân tích TPPM dựa danh sách lỗi lập trình thường gặp khứ Sau họp kiểm tra mã nguồn : Người ₫iều hành giao cho người lập trình TPPM danh sách chứa lỗi mà nhóm ₫ã tìm ₫ược Nếu số lỗi nhiều hay lỗi phát ₫òi hỏi hiệu chỉnh lớn, người ₫iều hành xếp buổi kiểm tra khác sau TPPM ₫ã ₫ược sửa lỗi Chú ý : Các lỗi phát ₫ược ₫ược phân tích, phân loại ₫ược dùng ₫ể tinh chỉnh lại danh sách lỗi khứ ₫ể cải tiến ₫ộ hiệu cho lần kiểm tra sau Các hiệu ứng lề tích cực cho thành viên : CuuDuongThanCong.com https://fb.com/tailieudientucntt Người lập trình thường nhận ₫ược style lập trình tốt mà chưa biết, cách thức chọn lựa giải thuật tốt ₫ể giải tốn, kỹ thuật lập trình tốt, Các thành viên khác Quá trình kiểm tra mã nguồn cách nhận dạng sớm vùng code chứa nhiều lỗi, giúp ta tập trung ý vào vùng code suốt trình kiểm thử dựa mày tính sau 7.3 Checklist ₫ược dùng ₫ể tra mã nguồn Checklist liệt kê lỗi mà người lập trình thường phạm phải Đây kết lịch sử tra mã nguồn nhiều người, ta bỏ bớt/thêm lỗi thấy cần thiết Các lỗi mà người lập trình thường phạm phải ₫ược phân loại thành nhóm : Các lỗi truy xuất liệu (Data Reference Errors) Các lỗi ₫ịnh nghĩa/khai báo liệu (Data-Declaration Errors) Các lỗi tính tốn (Computation Errors) Các lỗi so sánh (Comparison Errors) Các lỗi luồng ₫iều khiển (Control-Flow Errors) Các lỗi giao tiếp (Interface Errors) Các lỗi nhập/xuất (Input/Output Errors) Các lỗi khác (Other Checks) Các lỗi truy xuất liệu (Data Reference Errors) Dùng biến chưa có giá trị xác ₫ịnh ? int i, count; for (i = 0; i < count; i++) { } Dùng số biến array nằm phạm vi ? CuuDuongThanCong.com https://fb.com/tailieudientucntt int list[10]; if (list[10] == 0) { } Dùng số không thuộc kiểu nguyên biến array ? int list[10]; double idx=3.1416; if (list[idx] == 0) { } Tham khảo ₫ến liệu không tồn (dangling references)? int *pi; if (*pi == 10) { } //pi ₫ang tham khảo ₫ến ₫ịa không hợp lệ - Null int *pi = new int; delete (pi); if (*pi = 10) { } //pi ₫ang tham khảo ₫ến ₫ịa //mà khơng cịn dùng ₫ề chứa số ngun Truy xuất liệu thơng qua alias có ₫ảm bảo thuộc tính liệu ₫úng ? int pi[10]; pi[1] = 25; char* pc = pi; if (pc[1] == 25) { } //pc[1] khác với pi[1]; Thuộc tính field liệu record có ₫úng với nội dung gốc khơng ? struct {int i; double d;} T_Rec; T_Rec rec; read(fdin,&rec, sizeof(T_Rec); if (rec.i ==10) { } //lỗi field d nằm trước i //trong record gốc file Cấu trúc kiểu record có tương thích client/server khơng ? Private Type OSVERSIONINFO dwOSVersionInfoSize As Long CuuDuongThanCong.com https://fb.com/tailieudientucntt dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformId As Long szCSDVersion As String * 128 ' Maintenance string End Type Private Declare Function GetVersionEx Lib "kernel32" _ Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long Dùng số bị lệch ? int i, pi[10]; for (i = 1; i z)) Các lỗi luồng ₫iều khiển (Control-Flow Errors) Thiếu thực số nhánh lệnh ₫ịnh theo ₫iều kiện số học ? switch (i) { case 1: //cần hay không cần lệnh break; case 2: case 3: } Mỗi vòng lặp thực lần hay kết thúc ? for (i=x ; i z từ ₫ầu ? for (i = 1; i