Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 47 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
47
Dung lượng
832,95 KB
Nội dung
4 MỤC LỤC CHƯƠNG – GIỚI THIỆU ················································································ 1.1 Mục tiêu nghiên cứu ·················································································· 1.2 Ý tưởng giải toán········································································ 1.3 Cấu trúc luận văn······················································································· CHƯƠNG – KIẾN THỨC NỀN TẢNG···························································· 2.1 Kiểm thử đơn vị························································································· 2.2 Phân tích tĩnh····························································································· 2.3 Kiểm thử luồng điều khiển ········································································ 2.4 Kiểm thử luồng liệu·············································································· 2.4.1 Kiểm thử định nghĩa – sử dụng (Define/Use Testing) ························· 10 2.4.2 Kiểm thử dựa lát cắt (Slice-based testing)···································· 11 CHƯƠNG – KỸ THUẬT KIỂM THỬ SINH MÔI TRƯỜNG ························· 14 3.1 Chọn chức cần kiểm thử xác định đơn vị······································ 14 3.2 Xác định giao diện đơn vị - môi trường ····················································· 14 3.3 Kiểm thử···································································································· 19 CHƯƠNG - ỨNG DỤNG ················································································· 20 4.1 Giới thiệu phần mềm TestSystem ······························································ 20 4.2 Kiểm thử chức đăng nhập phần mềm TestSystem······················· 21 4.2.1 Xác định đơn vị ·················································································· 21 4.2.2 Xác định giao diện đơn vị - môi trường ·············································· 21 4.2.3 Kiểm thử chức đăng nhập··························································· 22 4.2.4 Báo cáo kết kiểm thử···································································· 36 CHƯƠNG – KẾT LUẬN ·················································································· 38 TÀI LIỆU THAM KHẢO ···················································································· 40 PHỤ LỤC ············································································································ 41 Phụ lục – Mã lớp TestLogin ·········································································· 41 DANH SÁCH CÁC HÌNH VẼ Hình 1.1 Tạo mơi trường cho đơn vị ·································································· Hình 2.1 Các thành phần đồ thị luồng điều khiển ····························· Hình 2.2 Các cấu trúc điều khiển phổ dụng ························································ Hình 3.1 Minh họa thuật tốn giao diện đơn vị···················································· 16 Hình 3.2 Minh họa thuật tốn xác định giao diện mơi trường ······························ 18 Hình 4.1 Đồ thị luồng điều khiển lớp Login ························································ 27 Hình 4.2 Mã phương thức GetStudent································································· 31 Hình 4.3 Đồ thị luồng điều khiển phương thức GetStudent ································· 31 Hình 4.4 Mã phương thức GetDataTeacher ························································· 33 Hình 4.5 Mã phương thức SetPresenceStudent···················································· 34 Hình 4.6 Đồ thị luồng điều khiển phương thức SetPresenceStudent ···················· 34 Hình 4.7 Kiểm thử chức đăng nhập TestSystem ··································· 37 Hình 4.8 Giao diện trang chủ phần mềm TestSystem ···································· 37 DANH SÁCH CÁC BẢNG Bảng 4.1 Các nút định nghĩa, sử dụng biến············································· 25 Bảng 4.2 Các trường hợp kiểm thử biến nTypeUser ····································· 26 Bảng 4.3 Các trường hợp kiểm thử biến nIDStudent····································· 27 Bảng 4.4 Các trường hợp kiểm thử biến nIDTeacher ···································· 28 Bảng 4.5 Các trường hợp kiểm thử biến countTeacher·································· 28 Bảng 4.6 Các trường hợp kiểm thử biến countStudent ·································· 29 Bảng 4.7 Các trường hợp kiểm thử biến countAdmin ··································· 29 Bảng 4.8 Các trường hợp kiểm thử biến countAnonymous ··························· 30 Bảng 4.9 Các trường hợp kiểm thử phương thức GetStudent ························ 32 Bảng 4.10 Các trường hợp kiểm thử phương thức GetDataTeacher ·············· 33 Bảng 4.11 Các trường hợp kiểm thử phương thức SetPresenceStudent ········· 35 Bảng 4.12 Các trường hợp kiểm thử phương thức SetPresenceTeacher ········ 35 CHƯƠNG - GIỚI THIỆU 1.1 Mục tiêu nghiên cứu Với chương trình có kích thước nhỏ chức đơn giản, ta dễ dàng tiến hành kiểm thử kỹ thuật kiểm thử đơn vị Kiểm thử đơn vị lập trình viên thực hiện, có độ phức tạp nhỏ tốn chi phí Với phát triển ứng dụng công nghệ thông tin, nay, phần mềm thường lớn chứa nhiều lớp Các lớp thực thi độc lập, sau tích hợp lại thành hệ thống mong muốn Để kiểm thử chức hệ thống, người ta thường sử dụng kỹ thuật kiểm thử tích hợp Việc kiểm thử tích hợp chức tồn hệ thống thường có độ phức tạp cao, địi hỏi kiểm thử không gian kiểm thử lớn Để làm giảm khơng gian cần kiểm thử, tiếp cận theo hướng mơ-đun hóa cách chia phần mềm thành hai phần: đơn vị (unit) môi trường Đơn vị bao gồm tập hợp số lớp liên quan đến chức cần kiểm thử, môi trường tập hợp lớp mà đơn vị tương tác với Các tương tác xẩy giao diện đơn vị – mơi trường Đơn vị tác động số hành vi lên môi trường ngược lại, môi trường tác động số hành vi lên đơn vị Sự tương tác đơn vị môi trường hành vi điều khiển, gọi đến thuộc tính hay phương thức; hành vi liệu, thay đổi giá trị thuộc tính Tất thuộc tính phương thức thể hành vi đơn vị môi trường tạo nên giao diện đơn vị – môi trường Với đơn vị cần kiểm thử, việc tạo môi trường công việc quan trọng Môi trường chia thành hai phần driver stub Driver bao gồm lớp gọi đến thuộc tính hay phương thức đơn vị, stub lớp mà đơn vị gọi đến Như vậy, driver thể hành vi mà mơi trường tác động lên đơn vị, cịn stub thể hành vi mà đơn vị tác động đến môi trường Với việc định nghĩa khái niệm trên, tổng qt hóa q trình tạo mơi trường cho đơn vị hình 1.1 Toàn phần mềm thể bên trái mũi tên Phần mềm gồm nhiều lớp Mỗi lớp minh họa hình chữ nhật có dịng kẻ ngang bên Đơn vị cần kiểm thử bao quanh đường viền chấm Các đường mũi tên nối lớp, thể quan hệ lớp với Những đường mũi tên nối trực tiếp với đường bao quanh đơn vị thể tương tác đơn vị môi trường Từ thông tin trên, ta cần xác định driver stub cho đơn vị Phần bên phải mũi tên thể mối quan hệ đơn vị, driver stub Tạo môi trường Driver Mã chương trình Stub Hình 1.1 Tạo mơi trường cho đơn vị [1] Sau tạo môi trường cho đơn vị, để đảm bảo đơn vị kiểm thử toàn hệ thống, cần đặt đơn vị vào mối quan hệ với môi trường kiểm thử đơn vị tổng thể mối quan hệ đơn vị – mơi trường Với phạm vi khơng lớn, để tiến hành kiểm thử tính chất đơn vị, hồn tồn sử dụng kỹ thuật kiểm thử đơn vị kiểm thử luồng điều khiển, kiểm thử luồng liệu Kết quả, cần sử dụng kỹ thuật kiểm thử đơn vị, kiểm thử chức toàn hệ thống mà khơng cần sử dụng kỹ thuật kiểm thử tích hợp Nghiên cứu có ý nghĩa lớn việc kiểm thử hệ thống phức tạp, làm đơn giản tăng hiệu kiểm thử Trong luận văn, kiểm thử thành phần hay kiểm thử đơn vị tiến hành lớp, kiểm thử tích hợp kiểm thử tích hợp đơn vị mơi trường 1.2 Ý tưởng giải toán Để làm công việc nêu mục 1.1, với chức cần kiểm thử phần mềm, làm bước sau: Bước thứ - Xác định đơn vị: Sử dụng kỹ thuật phân tích tĩnh, tài liệu đặc tả, thiết kế, mã chương trình, xác định lớp định trực tiếp đến chức cần kiểm thử Tập hợp lớp gọi đơn vị Bước thứ hai - Xác định giao diện đơn vị – môi trường: giao diện đơn vị – môi trường bao gồm hai phần: giao diện đơn vị giao diện môi trường Giao diện đơn vị bao gồm thuộc tính, phương thức đơn vị mà môi trường tham chiếu đến Giao diện đơn vị thể hành vi môi trường tác động lên đơn vị Ngược lại, giao diện môi trường bao gồm thuộc tính, phương thức lớp mơi trường mà đơn vị tham chiếu đến Giao diện môi trường thể hành vi đơn vị tác động lên môi trường Bước cuối – Kiểm thử: sau xác định giao diện đơn vị - môi trường, tất phương thức thuộc tính liên quan trực tiếp đến hành vi mà đơn vị môi trường tác động qua lại lên rõ Sử dụng kỹ thuật kiểm thử đơn vị kiểm thử luồng điều khiển, kiểm thử luồng liệu, tiến hành kiểm thử thuộc tính phương thức Kết xác thuộc tính phương thức đảm bảo chức ban đầu cần kiểm thử hoạt động toàn hệ thống Như vậy, với việc sử dụng kỹ thuật kiểm thử đơn vị, ta kiểm thử chức cần kiểm thử toàn hệ thống mà không cần sử dụng kỹ thuật kiểm thử tích hợp Trong luận văn này, ta gọi kỹ thuật kiểm thử trình bày kỹ thuật kiểm thử sinh môi trường 1.3 Cấu trúc luận văn Để trình bầy cụ thể kiến thức, giúp người đọc tiếp cận phương pháp kiểm thử sinh môi trường nêu trên, nội dung luận văn tập trung vào ba chương Những kiến thức tảng kiểm thử trình bày chương Kiến thức tảng Đó kiến thức kiểm thử đơn vị, phân tích tĩnh, kỹ thuật kiểm thử đơn vị bao gồm kiểm thử luồng điều khiển kiểm thử luồng liệu Những kiến thức hỗ trợ người đọc việc tiếp cận hiểu vấn đề mà luận văn nghiên cứu Lý thuyết luận văn đề cập chương – Kiểm thử sinh mơi trường Chương trình bày sở lý thuyết thuật toán sử dụng kỹ thuật kiểm thử sinh môi trường Kỹ thuật bao gồm bước: xác định đơn vị, xác định giao diện đơn vị - môi trường, áp dụng kỹ thuật kiểm thử đơn vị để kiểm thử chức cần kiểm thử 10 Việc áp dụng kỹ thuật kiểm thử sinh mơi trường với ví dụ cụ thể trình bầy chương - Ứng dụng Chương giới thiệu khái quát phần mềm kiểm tra trực tuyến - TestSystem Sau trình bày bước áp dụng kỹ thuật kiểm thử sinh môi trường để kiểm thử chức đăng nhập (login) hệ thống TestSystem 11 CHƯƠNG - KIẾN THỨC NỀN TẢNG 2.1 Kiểm thử đơn vị Kiểm thử đơn vị kỹ thuật kiểm thử đơn vị chương trình Đơn vị kiểm thử lập với tồn chương trình Người ta thường hiểu với nghĩa rằng, đơn vị hàm, thủ tục, phương thức hay lớp [1] Với định nghĩa trên, ta thấy đơn vị có kích thước nhỏ, lập trình viên tạo đơn vị để đảm bảo chức nhỏ cho hệ thống Vì việc kiểm thử đơn vị thường dễ dàng tiến hành Với phạm vi cần kiểm thử không lớn, phát lỗi trình kiểm thử dễ dàng tìm nguyên nhân khắc phục lỗi Việc tiến hành kiểm thử đơn vị đòi hỏi người kiểm thử phải hiểu cặn kẽ mã chương trình nên trình kiểm thử đơn vị thường thực lập trình viên viết chương trình Kiểm thử đơn vị mức kiểm thử thấp có ý nghĩa quan trọng Việc đảm bảo đơn vị chạy xác làm giảm thời gian chi phí nhiều cho mức kiểm thử cao sau Quá trình kiểm thử đơn vị nên tiến hành sớm giai đoạn viết mã cần thực thường xuyên xuyên suốt chu kỳ phát triển phần mềm Mục đích kiểm thử đơn vị đảm bảo với liệu đầu vào, đơn vị phải cho kết xác Việc kiểm thử địi hỏi phải kiểm tra tất đường thi hành đơn vị để phát đường phát sinh lỗi Để tiến hành kiểm thử, địi hỏi phải có ca kiểm thử kịch kiểm thử rõ liệu đầu vào đầu mong muốn Trong trình kiểm thử, với liệu đầu vào, ta so sánh liệu đầu thực, so sánh với đầu mong muốn để viết báo cáo kiểm thử [6] Kiểm thử đơn vị bao gồm hai hướng: Kiểm thử tĩnh kiểm thử động Trong đó, kiểm thử tĩnh kiểm thử dựa phân tích tất hành vi xẩy chạy chương trình mà khơng chạy chương trình thực Còn kiểm thử động kiểm thử dựa việc chạy chương trình phân tích kết đầu 2.2 Phân tích tĩnh Phân tích tĩnh kỹ thuật đòi hỏi duyệt lại tài liệu yêu cầu, đặc tả, thiết kế mã chương trình để kiểm tra tính logic chương trình, mà khơng chạy chương trình [1] 12 Người ta thường ứng dụng phân tích tĩnh việc tối ưu mã kiểm thử chương trình Ví dụ ứng dụng để loại bỏ đoạn mã dư thừa, sử dụng tài nguyên tối ưu, phát lỗi tiềm năng,… Phân tích tĩnh ứng dụng kiểm thử, đảm bảo thơng tin thu thập cần phải với tất đường thi hành chương trình với đầu vào [3] Trong kiểm thử, phân tích tĩnh thường dùng kỹ thuật bổ xung cho kỹ thuật kiểm thử truyền thống kiểm tra mơ hình Do khơng xác phân tích, phân tích tĩnh xác hơn, nói chung có khả mở rộng tốt kiểm tra mơ hình Có số phương pháp tiếp cận phân tích tĩnh, có Phân tích lưu lượng liệu Diễn giải tóm tắt Những phương pháp tiếp cận địi hỏi người thiết kế phân tích phải định trạng thái cân chi phí độ xác: phân tích xác, chi phí tốn [4] 2.3 Kiểm thử luồng điều khiển Kiểm thử luồng điều khiển kỹ thuật kiểm thử đơn vị Tom McCabe đề xuất Để tiếp cận với kiểm thử luồng điều khiển, ta cần làm quen với khái niệm trích dẫn tài liệu [2] đề cập sau Định nghĩa Đường thi hành (execution path) định nghĩa danh sách có thứ tự lệnh chương trình thực thi lần chạy, điểm nhập đến điểm kết thúc đơn vị Định nghĩa Đồ thị luồng điều khiển cơng cụ hữu ích để hiển thị luồng điều khiển chương trình Trong nút hình trịn biểu thị đoạn câu lệnh chương trình, cung biểu thị luồng điều khiển Các thành phần đồ thị luồng điều khiển biểu diễn hình 2.1 Các nút trịn màu trắng biểu thị đoạn câu lệnh, nút hình bầu dục màu đen biểu thị điểm bắt đầu điểm kết thúc chương trình Các mũi tên đến khỏi nút biểu thị luồng điều khiển chương trình nút Điểm xuất phát khơng có luồng đến có luồng Điểm kết thúc khơng có luồng Khối xử lý bình thường có luồng đến luồng Tại điểm định có nhiều nhánh rẽ từ Ngược lại, điểm nối có nhiều luồng đến luồng 13 điểm xuất phát khối xử lý điểm định điểm nối điểm kết thúc Hình 2.1 Các thành phần đồ thị luồng điều khiển [2] Các cấu trúc điều khiển phổ dụng đồ thị luồng điều khiển minh họa hình 2.2 Với cấu trúc tuần tự, điểm đồ thị có luồng đến luồng Khác với cấu trúc if, điểm định có hai luồng ra, điểm định cấu trúc switch có ba hay nhiều ba luồng Trong cấu trúc lặp, điểm định biểu diễn điểm có hai luồng rẽ nhánh từ Với cấu trúc lặp while…do, điểm định đặt trước thân vòng lặp, điều kiện khơng thỏa mãn, khỏi vịng lặp Ngược lại, cấu trúc do…while, điểm định đặt sau thân vòng lặp, thực thân vòng lặp, sau kiểm tra điều kiện, điều kiện quay lại thực thân vòng lặp Lặp lại điều kiện sai khỏi vịng lặp switch while c while c Hình 2.2 Các cấu trúc điều khiển phổ dụng [2] Định nghĩa Độ phức tạp Cyclomatic C định nghĩa thước đo phần mềm, đo độ phức tạp chương trình Trong ngữ cảnh kiểm thử luồng điều khiển, độ phức tạp cyclomatic cho biết số đường thi hành tuyến tính độc lập chương trình cần kiểm thử Độ phức tạp Cyclomatic C = V(G) đồ thị dịng điều khiển tính công thức sau : o V(G) = E - N + 2, E số cung, N số nút đồ thị o V(G) = P + 1, đồ thị chứa nút định luận lý (chỉ có cung xuất đúng/sai) P số nút định Để xác định C đường tuyến tính độc lập, Tom McCabe đưa qui trình gồm bước sau: 36 viên lưu sở liệu, sau người dùng đăng nhập với tên mật này, hệ thống cần giảm số lượng khách truy cập hệ thống 1, lưu qua biến countAnonymous Bảng 4.8 Các ca kiểm thử biến countAnonymous Đường nUser P13 thu nPassword Kết kỳ vọng (countAnonymous) thu Giảm Kiểm thử phương thức mà đơn vị gọi đến Sử dụng kiểm thử luồng điều khiển để kiểm thử phương thức mà đơn vị gọi đến Với phương thức, kiểm thử luồng điều khiển với độ phủ cấp 3, tiến hành kiểm thử cho điều kiện luận lý điểm định thực lần cho trường hợp lẫn sai Kiểm thử phương thức GetStudent thuộc lớp Student Bước 1: Xây dựng đồ thị luồng điều khiển Mã phương thức chia thành phần nhỏ hình 4.2 Câu lệnh gọi phương thức Connect() để kết nối với sở liệu gọi hành động Kiểm tra điều kiện UserName Passwd xem liệu đầu vào có thỏa mãn khơng nhóm thành hành động Chọn tất hàng bảng Students sở liệu thỏa mãn điều kiện gọi hành động Lưu kết thu câu lệnh Select vào chuyển đổi sở liệu dAdapt gọi hành động Hành động cuối hành động 5, bao gồm câu lệnh lưu kết thu hành động vào bảng GetStudent myDS trả kết cho phương thức Với việc chia mã chương trình thành phần hình 4.2, đồ thị luồng điều khiển phương thức có dạng hình 4.3 Đồ thị từ điểm bắt đầu đến điểm kết thúc Điểm bắt đầu kết thúc biểu diễn hình trịn màu đen Các nút tròn với số bên tương ứng với hành động chia hình 4.2 Mũi tên thể luồng điều khiển chương trình Bước 2: Tính độ phức tạp Cyclomatic đồ thị (=C) Đồ thị luồng điều khiển phương thức GetStudent chứa nút định luận lý (nút 4) nên độ phức tạp C = 1+1 = Vậy cần xác định đường thi hành tuyến tính 37 public DataTable GetStudent(string nUser, string nPassword) { Connect(); OleDbDataAdapter dAdapt = new OleDbDataAdapter("Select * from Students where UserName = '" + nUser + "' and Passwd = '" + nPassword + "'" , cnDB); DataSet myDS = new DataSet(); dAdapt.Fill(myDS,"GetStudent"); cnDB.Close(); return myDS.Tables["GetStudent"]; } Hình 4.2 Mã phương thức GetStudent Hình 4.3 Đồ thị luồng điều khiển phương thức GetStudent Bước 3: Xác định C đường thi hành tuyến tính cần kiểm thử Dựa vào đồ thị luồng điều khiển, xác định đường thi hành tuyến tính cần kiểm thử sau: 1: 1->4->2->5 2: 1->4->3->2->5 38 Bước 4: Tạo ca kiểm thử cho đường thi hành tuyến tính Tương ứng với đường thi hành tuyến tính tìm bước 3, ca kiểm thử xác định bảng 4.9 Đường thi hành tuyến tính thứ tương ứng với ca kiểm thử người dùng đăng nhập với tên dangthu, mật thu, sở liệu khơng tồn sinh viên có tên dangthu, nên hệ thống cần thông báo không tồn sinh viên Đường thi hành tuyến tính thứ hai tương ứng với ca kiểm thử người dùng đăng nhập với tên thu, mật thu, sở liệu tồn sinh viên tên thu, có mật thu, hệ thống cần thông báo tồn sinh viên với tên mật Bảng 4.9 Các ca kiểm thử phương thức GetStudent Đường số nUser dangthu Thu nPassword Kết kỳ vọng thu Không tồn sinh viên thu Tồn sinh viên với tên mật Kiểm thử phương thức GetDataTeacher thuộc lớp Teacher Tương tự phương thức GetStudent thuộc lớp Student kiểm thử trên, phương thức GetDataTeacher chia thành phần giống (xem hình 4.4) Câu lệnh gọi phương thức Connect() để kết nối với sở liệu gọi hành động Kiểm tra điều kiện UserName Passwd xem liệu đầu vào có thỏa mãn khơng nhóm thành hành động Chọn tất hàng bảng Teachers sở liệu thỏa mãn điều kiện gọi hành động Lưu kết thu câu lệnh Select vào chuyển đổi sở liệu dAdapt gọi hành động Hành động cuối hành động 5, bao gồm câu lệnh lưu kết thu hành động vào bảng GetDataTeacher myDS trả kết cho phương thức Lần lượt xây dựng đồ thị luồng điều khiển, xác định đường thi hành tuyến tính giống với phương thức GetStudent, ca kiểm thử phương thức GetDataTeacher xác định bảng 4.10 Đường thi hành tuyến tính thứ tương ứng với ca kiểm thử người dùng đăng nhập với tên thu, mật dangthu, sở liệu không tồn giáo viên có tên thu, nên hệ thống cần thông báo không tồn giáo viên Đường thi hành tuyến tính thứ hai tương ứng với ca kiểm thử người dùng đăng nhập với tên dangthu, mật dangthu, sở liệu tồn giáo viên tên dangthu, có mật dangthu, hệ thống cần thông báo tồn giáo viên với tên mật 39 public DataTable GetDataTeacher(string nUser, string nPassword) { Connect(); OleDbDataAdapter dAdapt = new OleDbDataAdapter("Select * from Teachers where UserName = '" + nUser + "' and Passwd = '" + nPassword + "'" , cnDB); DataSet myDS = new DataSet(); dAdapt.Fill(myDS,"GetDataTeacher"); cnDB.Close(); return myDS.Tables["GetDataTeacher"]; } Hình 4.4 Mã phương thức GetDataTeacher Bảng 4.10 Các ca kiểm thử phương thức GetDataTeacher Đường số nUser nPassword Kết kỳ vọng thu Dangthu Không tồn giáo viên dangthu Dangthu Tồn giáo viên với tên mật Kiểm thử phương thức SetPresenceStudent thuộc lớp Student Mã phương thức SetPresenceStudent phân thành phần hình 4.5 Câu lệnh gọi phương thức Connect() để kết nối với sở liệu gọi hành động Kiểm tra điều kiện IDStudent xem liệu đầu vào có thỏa mãn khơng nhóm thành hành động Cập nhật thuộc tính Presence tất hàng bảng Students thỏa mãn điều kiện gọi hành động Lưu kết thu câu lệnh Update vào biến cmd gọi hành động Hành động cuối hành động 5, bao gồm câu lệnh thi hành việc cập nhật với sở liệu Với việc chia mã phương thức thành phần hình 4.5, đồ thị luồng điều khiển phương thức có dạng hình 4.6 Điểm bắt đầu kết thúc đồ thị biểu diễn hình trịn màu đen Các nút tròn với số bên tương ứng với hành động chia hình 4.5 Mũi tên thể luồng điều khiển chương trình Đồ thị hình 4.6 chứa nút định luận lý nên đồ thị có hai đường thi hành tuyến tính độc lập Hai đường là: 1: 1->4->2->5 2: 1->4->3->2->5 40 public void SetPresenceStudent(int nIDStudent, bool nPresence) { Connect(); OleDbCommand cmd; cmd = new OleDbCommand("UPDATE Students SET Presence = @Presence" + " WHERE IDStudent = @IDStudent ", cnDB); cmd.Parameters.Add("@Presence", nPresence); cmd.Parameters.Add("@IDStudent", nIDStudent); cmd.ExecuteNonQuery(); cnDB.Close(); } Hình 4.5 Mã phương thức SetPresenceStudent 5 Hình 4.6 Đồ thị luồng điều khiển phương thức SetPresenceStudent Tương ứng với hai đường thi hành tuyến tính độc lập trên, ca kiểm thử xác định bảng 4.11 Đường thi hành tuyến tính thứ tương ứng với ca kiểm thử người dùng nhập giá trị cho biến nIDStudent 35, sở liệu, không tồn sinh viên có ID 35, nên hệ thống cần thông báo không tồn sinh viên Đường thi hành tuyến tính thứ hai tương ứng với ca kiểm thử người dùng nhập giá trị cho biến nIDStudent 41 37, sở liệu, tồn sinh viên có ID 37, hệ thống thiết lập giá trị true cho thuộc tính presence sinh viên để hiểu sinh viên có ID 37 đăng nhập hệ thống, người dùng khác lấy tên mật sinh viên có ID 37 để đăng nhập hệ thống trước thuộc tính presence sinh viên thiết lập lại giá trị false Bảng 4.11 Các ca kiểm thử phương thức SetPresenceStudent Đường số nIDStudent Kết kỳ vọng 35 Không tồn sinh viên 37 Thuộc tính presence sinh viên có ID 37 thiết lập giá trị true Kiểm thử phương thức SetPresenceTeacher thuộc lớp Teacher Tương tự phương thức SetPresenceStudent thuộc lớp Student, ca kiểm thử cho phương thức SetPresenceTeacher xác định bảng 4.12 Đường thi hành tuyến tính thứ tương ứng với ca kiểm thử người dùng nhập giá trị cho biến nIDTeacher 100, sở liệu, không tồn giáo viên có ID 100, nên hệ thống cần thông báo không tồn giáo viên Đường thi hành tuyến tính thứ hai tương ứng với ca kiểm thử người dùng nhập giá trị cho biến nIDTeacher 102, sở liệu, tồn giáo viên có ID 102, hệ thống thiết lập giá trị true cho thuộc tính presence giáo viên để hiểu giáo viên có ID 102 đăng nhập hệ thống, người dùng khác lấy tên mật giáo viên có ID 102 để đăng nhập hệ thống trước thuộc tính presence giáo viên thiết lập lại giá trị false Bảng 4.12 Các ca kiểm thử phương thức SetPresenceTeacher Đường số nIDTeacher Kết kỳ vọng 100 Không tồn giáo viên 102 Thuộc tính presence giáo viên có ID 102 thiết lập giá trị true Như vậy, với việc áp dụng kiểm thử định nghĩa – sử dụng kiểm thử luồng điều khiển, ca kiểm thử cho biến lớp Login mà môi trường cần đến ca kiểm thử cho phương thức môi trường mà lớp Login sử dụng xác định 42 4.2.4 Báo cáo kết kiểm thử Để chạy ca kiểm thử trình bày mục 4.2.3, cần tạo mã driver cho phương thức cần kiểm thử Tác giả viết luận văn xây dựng mã lưu trữ lớp TestLogin hệ thống TestSystem Chi tiết mã lớp TestLogin trình bày phụ lục – Mã lớp TestLogin Quá trình chạy ca kiểm thử hệ thống TestSystem minh họa hình 4.7 Giao diện bao gồm nút Class Login, GetStudent, GetTeacher, SetPresenceStudent, SetPresenceTeacher, ô để nhập thông tin tên người dùng (user), mật (password), số người dùng (ID), có truy cập hệ thống hay không (presence) Nhấn vào nút ClassLogin, hệ thống chuyển đến trang chủ, người dùng thực việc đăng nhập vào hệ thống Giao diện trang chủ minh họa hình 4.8 Tại trang chủ, người dùng nhập tên mật bên trái trang web Sau nhấn nút Login, hệ thống thực thi phương thức lớp Login, sau hiển thị trang TestLogin hiển thị kết TypeUser, IDStudent, IDTeacher hình 4.7 Để theo dõi kết biến countStudent, countTeacher, countAdmin, countAnonymous, người dùng xem trực tiếp bảng trạng thái, hiển thị phía bên trái trang chủ Để kiểm thử phương thức GetStudent GetDataTeacher, nhập liệu tên mật người dùng vào ô User, Password minh họa hình 4.7, nhấn vào nút GetStudent GetTeacher để kiểm tra xem tên mật có tồn hay khơng Với phương thức SetPresenceStudent SetPresenceTeacher, để kiểm thử, người dùng nhập số ID sinh viên giáo viên, đồng thời nhập thuộc tính (true) sai (false) vào Presence ấn nút SetPresenceStudent SetPresenceTeacher hình 4.7 theo dõi kết thơng báo phía Như vậy, thơng qua ví dụ kiểm thử chức đăng nhập hệ thống TestSystem, luận văn mang đến cho người đọc nhìn trực quan kỹ thuật kiểm thử sinh mơi trường 43 Hình 4.7 Kiểm thử chức đăng nhập TestSystem Hình 4.8 Giao diện trang chủ hệ thống TestSystem 44 CHƯƠNG - KẾT LUẬN Trong kiểm thử phần mềm, sử dụng kỹ thuật kiểm thử sinh môi trường trình bầy luận văn để làm giảm khơng gian cần kiểm thử Thay tốn nhiều cơng sức cho kiểm thử tích hợp, người kiểm thử thực kiểm thử với độ phức tạp tương đương kiểm thử đơn vị Sau nghiên cứu luận văn, người đọc giới thiệu kiến thức kiểm thử, kiến thức sử dụng việc nghiên cứu lý thuyết luận văn Đó kiến thức kiểm thử đơn vị, phân tích tĩnh, kiểm thử luồng điều khiển hai dạng kiểm thử luồng liệu kiểm thử định nghĩa – sử dụng kiểm thử dựa lát cắt Phần lý thuyết luận văn trình bày chương - Kỹ thuật kiểm thử sinh môi trường Với ý tưởng chia phần mềm thành hai phần đơn vị môi trường mà đơn vị tương tác với, kỹ thuật kiểm thử sinh môi trường làm giảm không gian cần kiểm thử Kỹ thuật bao gồm bước: thứ xác định chức cần kiểm thử; thứ hai xác định đơn vị, đơn vị bao gồm lớp định trực tiếp đến chức cần kiểm thử; thứ ba xác định giao diện đơn vị giao diện môi trường, nghĩa xác định thuộc tính, phương thức đơn vị mà mơi trường gọi đến thuộc tính, phương thức mơi trường mà đơn vị gọi đến; bước cuối cùng, tiến hành kiểm thử thuộc tính phương thức tìm bước thứ kỹ thuật kiểm thử đơn vị Chương luận văn trình bày chi tiết bước kỹ thuật kiểm thử sinh mơi trường với ví dụ cụ thể Áp dụng kỹ thuật kiểm thử sinh môi trường để kiểm thử chức đăng nhập phần mềm kiểm tra trực tuyến TestSystem Với chức đăng nhập cần kiểm thử, luận văn chi tiết đơn vị, giao diện đơn vị - môi trường, áp dụng kỹ thuật kiểm thử đơn vị để sinh ca kiểm thử; xây dựng mã driver phương thức cần kiểm thử, từ chạy chương trình TestSystem, so sánh kết với kết kỳ vọng lập báo cáo kiểm thử Với phạm vi nghiên cứu luận văn thạc sĩ, kỹ thuật kiểm thử sinh môi trường trình bày luận văn cịn nhiều hạn chế Kỹ thuật phát triển theo hướng nghiên cứu sau: Một là, đánh giá tính hiệu kỹ thuật kiểm thử sinh môi trường Kỹ thuật kiểm thử sinh môi trường hiệu với phần mềm Nghiên cứu đưa đặc điểm phần mềm mà ứng dụng kỹ thuật kiểm thử sinh môi trường mang lại hiệu cao Thực nghiệm, thống kê so sánh tính hiệu kỹ thuật kiểm thử sinh môi trường với kiểm thử tích hợp 45 Hai là, xây dựng bước xác định đơn vị cách tự động Trong luận văn, bước xác định đơn vị làm tay người dùng Cơng việc làm cách tự động Với chương trình cần kiểm thử, xây dựng đồ thị phụ thuộc lớp cách sử dụng kỹ thuật phân tích tĩnh Với chức cần kiểm thử, sử dụng đồ thị phụ thuộc tìm lớp phân cấp theo mức độ ảnh hưởng tới chức đó, từ xác định đơn vị chức cần kiểm thử 46 TÀI LIỆU THAM KHẢO Tiếng Anh Kshirasagar Naik, Priyadarshi Tripathy (2008), Software Testing and Quality assurance – Theory and Practice, The John Wiley and sons, INC Publication – Lee Copeland (2003), A Practitioner's Guide to Software Test Design, Artech House Publishers - F Nielson, H R Nielson, and C Hankin (1999), Principles of Program Analysis, Springer-Verlag New York, Inc (1 Oksana Tkachuk (2003), Doctor of Philosophy: Domain – specific environment generation for modular software model checking, M.S, Kansas State University - 5 Paul C Jorgensen, Ph.D (2002), Software Testing, Craftsman’s Approach, CRC Press - 6 H Zhu, P A V Hall, and J H R May (1997), Software unit test coverage and adequacy, ACM Comput Surv - 47 PHỤ LỤC Phụ lục – Mã lớp TestLogin using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using TestSystem.Class; namespace TestSystem { public class driver : System.Web.UI.Page { protected System.Web.UI.WebControls.Button Button2; private Student CStudent = new Student(); protected System.Web.UI.WebControls.Button TypeUser_bt; protected System.Web.UI.WebControls.TextBox User_tb; protected System.Web.UI.WebControls.Label Label1; protected System.Web.UI.WebControls.Label Pass; protected System.Web.UI.WebControls.TextBox Pass_tb; protected System.Web.UI.WebControls.Label report_lb; private Teacher CTeacher = new Teacher(); protected System.Web.UI.WebControls.Button GetStudent_bt; protected System.Web.UI.WebControls.Label Label3; protected System.Web.UI.WebControls.TextBox ID_tb; protected System.Web.UI.WebControls.TextBox Presence_tb; protected System.Web.UI.WebControls.Label Label2; protected System.Web.UI.WebControls.Button Button1; protected System.Web.UI.WebControls.Button SetPreTea_bt; private DataTable DB; private void Page_Load(object sender, System.EventArgs e) { report_lb.Text = "TypeUser la: " + Session["TypeUser"].ToString() + " IDTeacher la: " + Session["IDTeacher"].ToString()+ " IDStudent la: " + Session["IDStudent"].ToString(); } 48 #region Web Form Designer generated code override protected void OnInit(EventArgs e) { InitializeComponent(); base.OnInit(e); } private void InitializeComponent() { this.GetStudent_bt.Click += new System.EventHandler(this.GetStudent_Click); this.Button2.Click += new System.EventHandler(this.GetTeacher_Click); this.Button1.Click += new System.EventHandler(this.SetPreStu_Click); this.TypeUser_bt.Click += new System.EventHandler(this.TypeUser_bt_Click); this.SetPreTea_bt.Click += new System.EventHandler(this.SetPreTea_Click); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void GetStudent_Click(object sender, System.EventArgs e) { DB = CStudent.GetStudent(User_tb.Text, Pass_tb.Text); if (DB.Rows.Count == 0) report_lb.Text = "Khong ton tai sinh vien nay"; else report_lb.Text = "Ton tai sinh vien voi Ten va Mat khau nay"; } private void TypeUser_bt_Click(object sender, System.EventArgs e) { Response.Redirect("Default.aspx"); } private void GetTeacher_Click(object sender, System.EventArgs e) { DB = CTeacher.GetDataTeacher(User_tb.Text, Pass_tb.Text); if (DB.Rows.Count == 0) report_lb.Text = "Khong ton tai giao vien nay"; else report_lb.Text = "Ton tai giao vien voi Ten va Mat khau nay"; } 49 private void SetPreTea_Click(object sender, System.EventArgs e) { CTeacher.SetPresenceTeacher(Convert.ToInt16(ID_tb.Text), Convert.ToBoolean(Presence_tb.Text)); report_lb.Text = "Thuoc tinh da duoc thiet lap neu tim thay ID cua giao vien nay"; } private void SetPreStu_Click(object sender, System.EventArgs e) { CStudent.SetPresenceStudent(Convert.ToInt16(ID_tb.Text), Convert.ToBoolean(Presence_tb.Text)); report_lb.Text = "Thuoc tinh da duoc thiet lap neu tim thay ID cua sinh vien nay"; } } } Thank you for evaluating AnyBizSoft PDF Splitter A watermark is added at the end of each output PDF file To remove the watermark, you need to purchase the software from http://www.anypdftools.com/buy/buy-pdf-splitter.html