Kiểm thử chức năng đăng nhập···························································

Một phần của tài liệu Kiểm thử tích hợp với độ phức tạp tương đương kiểm thử thành phần (Trang 26 - 41)

20 4.1 Giới thiệu phần mềm TestSystem ······························································

4.2.3. Kiểm thử chức năng đăng nhập···························································

Để kiểm thử tính đúng đắn của chức năng đăng nhập, cần lần lượt kiểm thử các thuộc tính và các phương thức của giao diện đơn vị - môi trường.

Kiểm thử các thuộc tính trong đơn vị mà môi trường cần dùng

Sử dụng kiểm thử luồng dữ liệu theo phương pháp định nghĩa – sử dụng để kiểm thử các thuộc tính nTypeUser, nIDStudent, nIDTeacher, countTeacher, countAdmin, countStudent, countAnonymous trong lớp Login.

Mã lớp Login được đánh số dòng như sau:

1 prvate void Login_bt_Click(object sender, System.EventArgs e)

2 {

3 Error_lb.Visible = false;

4 string nUser, nPassword;

5 int nTypeUser;

6

7 nUser = User_tb.Text;

8 nPassword = Password_tb.Text;

9 DBStudent = CStudent.GetStudent(nUser, nPassword);

10 if (DBStudent.Rows.Count > 0)

11 {

12 nTypeUser = 3;

13 PrLogin( DBStudent, nTypeUser);

14 }

15 else

17 DBTeacher = CTeacher.GetDataTeacher(nUser, nPassword); 18 if (DBTeacher.Rows.Count > 0) 19 { 20 nTypeUser = Convert.ToInt16(DBTeacher.Rows[0]["TypeUser"]); 21 PrLogin(DBTeacher, nTypeUser); 22 } 23 else 24 { 25 Error_lb.Visible = true;

26 Error_lb.Text = "Khong ton tai User nay";

27 }// if DBTeacher

28 }// if DBStudent 29 }

//---

30 private void PrLogin( DataTable DB, int nTypeUser)

31 {

32 bool nLocked = Convert.ToBoolean(DB.Rows[0]

["Locked"]);

33 if (nLocked)

34 {

35 Error_lb.Visible = true;

36 Error_lb.Text = "User da bi khoa";

37 }

38 else

39 {

40 bool nPresence = Convert.ToBoolean(DB.Rows[0]

["Presence"]);

41 if (nPresence)

42 {

43Error_lb.Visible = true;

44Error_lb.Text = "User hien dang truy cap he thong";

45 }

46 else

47 {

48Application["CountAnonymous"]=

50{ 51 Application["CountStudent"]= Convert.ToInt16(Application["CountStudent"])+1; 52 int nIDStudent = Convert.ToInt16(DB.Rows[0]["IDStudent"]); 53 CStudent.SetPresenceStudent(nIDStudent, true); 54 Session["IDStudent"] = nIDStudent; 55} 56else 57{ 58 if (nTypeUser == 1) 59 Application["CountAdmin"]= Convert.ToInt16(Application["CountAdmin"])+1; 60 else 61 Application["CountTeacher"]= Convert.ToInt16(Application["CountTeacher"])+1; 62 int nIDTeacher= Convert.ToInt16(DB.Rows[0]["IDTeacher"]); 63 CTeacher.SetPresenceTeacher(nIDTeacher, true); 64 Session["IDTeacher"] = nIDTeacher; 65} 66Session["UserName"] = User_tb.Text; 67Session["TypeUser"] = nTypeUser; 68Error_lb.Text = ""; 69Response.Redirect("Default.aspx"); 70 }// if Presence 71 } //if locked 72 }

Tiến hành kiểm thử với độ phủ cấp 3, nghĩa là kiểm thử sao cho mỗi điều kiện luận lý con của từng điểm quyết định đều được thực hiện ít nhất 1 lần cho trường hợp đúng lẫn sai. Kết quả, đồ thị luồng điều khiển của lớp Login được biểu diễn như hình 4.1. Các nút tròn thể hiện các câu lệnh trong chương trình. Số trong nút tròn là số thứ tự của các dòng lệnh được đánh dấu trong chương trình. Các mũi tên thể hiện luồng điều khiển của chương trình. Các nút hình bầu dục màu đen là các điểm kết thúc chương trình.

Căn cứ vào mã chương trình, đồ thị luồng điều khiển của chương trình trong hình 4.1, xác định được các nút định nghĩa, sử dụng của các biến cần kiểm

31

thử. Kết quả được liệt kê trong bảng 4.1. Biến nTypeUser có hai nút định nghĩa

ở dòng lệnh 12 và 20. Tương ứng với nút định nghĩa ở dòng lệnh 12, nTypeUser có các nút sử dụng ở dòng lệnh 49, 67. Tương ứng với nút định nghĩa ở dòng lệnh 20, nTypeUser có các nút sử dụng ở dòng lệnh 58 và 67. Với biến nIDStudent, biến được định nghĩa ở dòng 52 và được sử dụng ở dòng lệnh 53 và

54.Tương tự với các biến còn lại được liệt kê trong bảng, biến nIDTeacher được

định nghĩa ở dòng lệnh 62 và được sử dụng ở dòng lệnh 63 và 64. Biến

CountTeacher được định nghĩa ở dòng lệnh 61 và được sử dụng ở dòng lệnh 61. Biến CountStudent được định nghĩa ở dòng lệnh 51 và được sử dụng ở dòng lệnh 51. Biến CountAdmin được định nghĩa ở dòng lệnh 59 và được sử dụng ở dòng lệnh 59. Biến CountAnonymous được định nghĩa ở dòng lệnh 48 và được sử dụng ở dòng lệnh 48.

Bảng 4.1. Các nút định nghĩa, sử dụng của các biến

Tên biến nTypeUser nIDStudent nIDTeacher CountTeacher CountStudent CountAdmin CountAnonymous Biến nTypeUser

Dựa vào đồ thị luồng điều khiển trong hình 4.1, kết hợp với các nút định nghĩa, nút sử dụng của biến nTypeUser được liệt kê trong bảng 4.1, xác định được các đường định nghĩa – sử dụng của biến nTypeUser như sau:

P1 = <12, 13, 32, 33, 40, 41, 48, 49> P2 = <P1, 51, 52, 53, 54, 66, 67> P3 = <20, 21, 32, 33, 40, 41, 48, 58> P4 = <P3, 61, 62, 63, 64, 66, 67> P5 = <P3, 59, 62, 63, 64, 66, 67>

Các đường định nghĩa sử dụng của biến nTypeUser ở trên đều là các đường định nghĩa rõ ràng. Dễ nhận thấy, đường P2 chứa đường P1. Các đường P4, P5 chứa đường P3. Vậy để kiểm tra các đường trên chỉ cần sinh các ca kiểm thử

tương ứng với các đường P2, P4, P5. Cụ thể, các ca kiểm thử cho biến nTypeUser được trình bày trong bảng 4.2. Tương ứng với đường định nghĩa – sử dụng P2 sinh ra ca kiểm thử cho người dùng đăng nhập với tên là thu, mật khẩu là thu, đây là thông tin của một sinh viên đã được lưu trong cơ sở dữ liệu. Khi người dùng đăng nhập với tên và mật khẩu này, hệ thống cần trả về kết quả nTypeUser băng 3, nghĩa là người dùng vừa đăng nhập là một sinh viên. Tương tự với đường định nghĩa – sử dụng P4, có thể sinh ra ca kiểm thử cho người dùng đăng nhập với tên là teacher, mật khẩu là teacher, đây là thông tin của một giáo viên đã được lưu trong cơ sở dữ liệu. Khi người dùng đăng nhập với tên và mật khẩu này, hệ thống cần trả về kết quả nTypeUser bằng 2, nghĩa là người dùng vừa đăng nhập là một giáo viên. Với đường định nghĩa – sử dụng P5, có thể sinh ra ca kiểm thử cho người dùng đăng nhập với tên là admin, mật khẩu là admin, đây là thông tin của một người quản trị đã được lưu trong cơ sở dữ liệu. Khi người dùng đăng nhập với tên và mật khẩu này, hệ thống cần trả về kết quả nTypeUser bằng 1, nghĩa là người dùng vừa đăng nhập là một người quản trị.

Bảng 4.2. Các ca kiểm thử của biến nTypeUser

Đường nUser

P2 thu

P4 teacher

P5 admin

Biến nIDStudent

Tương tự, với biến nIDStudent, các đường định nghĩa sử dụng được xác định như sau:

P6 = <52, 53> P7 = <P6, 54>

Đường P7 chứa đường P6, vì vậy chỉ cần sinh ca kiểm thử tương ứng với đường P7, được trình bày trong bảng 4.3. Với đường định nghĩa – sử dụng P7, có thể sinh ra ca kiểm thử cho người dùng đăng nhập với tên là thu, mật khẩu là thu, đây là thông tin của một sinh viên đã được lưu trong cơ sở dữ liệu, sinh viên này được lưu với ID bằng 37. Khi người dùng đăng nhập với tên và mật khẩu này, hệ thống cần trả về kết quả Session[“IDStudent”] bằng 37 giống như trong cơ sở dữ liệu.

33

Hình 4.1: Đồ thị luồng điều khiển lớp Login. Bảng 4.3. Các ca kiểm thử của biến nIDStudent

Đường

P7

Biến nIDTeacher

Với biến nIDTeacher, các đường định nghĩa sử dụng được xác định như sau: P8 = <62, 63>

P9 = <P8, 64>

Đường P9 chứa đường P8, vì vậy chỉ cần sinh ca kiểm thử tương ứng với đường P9, được trình bày trong bảng 4.4. Với đường định nghĩa – sử dụng P9, có thể sinh ra ca kiểm thử cho người dùng đăng nhập với tên là teacher, mật khẩu là

teacher, đây là thông tin của một giáo viên đã được lưu trong cơ sở dữ liệu, giáo viên này được lưu với ID bằng 5. Khi người dùng đăng nhập với tên và mật khẩu này, hệ thống cần trả về kết quả Session[“IDTeacher”] bằng 5 giống như trong cơ sở dữ liệu.

Bảng 4.4. Các ca kiểm thử của biến nIDTeacher

Đường

P9

Biến countTeacher

Với biến countTeacher, đường định nghĩa sử dụng được xác định như sau: P10 = <61, 61>

Khi khởi động hệ thống, số giáo viên truy cập bằng 0. Truy cập với tên, mật khẩu của giáo viên, tổng số giáo viên sẽ tăng lên 1. Sự thay đổi được hiển thị ở bảng trạng thái bên trái trang web của hệ thống TestSystem. Tương ứng với đường P10, ca kiểm thử được trình bày trong bảng 4.5. Người dùng đăng nhập với tên là teacher, mật khẩu là teacher, đây là thông tin của một giáo viên đã được lưu trong cơ sở dữ liệu, sau khi người dùng đăng nhập với tên và mật khẩu này, hệ thống cần tăng số lượng giáo viên hiện truy cập hệ thống thêm 1, được lưu qua biến countTeacher.

Bảng 4.5. Các ca kiểm thử của biến countTeacher

Đường

P10

Biến countStudent

Với biến countStudent, đường định nghĩa sử dụng được xác định như sau: P11 = <51, 51>

Khi khởi động hệ thống, số sinh viên truy cập bằng 0. Truy cập với tên, mật khẩu của sinh viên, tổng số sinh viên sẽ tăng lên 1. Sự thay đổi được hiển thị ở

35

bảng trạng thái bên trái trang web. Tương ứng với đường P11, ca kiểm thử được trình bày trong bảng 4.6. Người dùng đăng nhập với tên là thu, mật khẩu là thu, đây là thông tin của một sinh viên đã được lưu trong cơ sở dữ liệu, sau khi người dùng đăng nhập với tên và mật khẩu này, hệ thống cần tăng số lượng sinh viên hiện đang truy cập hệ thống thêm 1, được lưu qua biến countStudent.

Bảng 4.6. Các ca kiểm thử của biến countStudent

Đường

P11

Biến countAdmin

Với biến countAdmin, đường định nghĩa sử dụng được xác định như sau: P12 = <59, 59>

Khi khởi động hệ thống, số người quản trị truy cập bằng 0. Truy cập với tên, mật khẩu của người quản trị, tổng số người quản trị sẽ tăng lên 1. Sự thay đổi được hiển thị ở bảng trạng thái bên trái trang web. Tương ứng với đường P12, ca kiểm thử được trình bày trong bảng 4.7. Người dùng đăng nhập với tên là admin,

mật khẩu là admin, đây là thông tin của một người quản trị đã được lưu trong cơ sở dữ liệu, sau khi người dùng đăng nhập với tên và mật khẩu này, hệ thống cần tăng số lượng người quản trị hiện đang truy cập hệ thống thêm 1, được lưu qua biến countAdmin.

Bảng 4.7. Các ca kiểm thử của biến countAdmin

Đường

P12

Biến countAnonymous

Với biến countAnonymous, đường định nghĩa sử dụng được xác định như sau:

P13 = <48, 48>

Khi khởi động hệ thống, số khách sẽ được cập nhật bằng 1. Khi truy cập bởi tên và mật khẩu của sinh viên, hoặc giáo viên, hoặc người quản trị, số khách sẽ bị giảm đi 1. Sự thay đổi được hiển thị ở bảng trạng thái bên trái trang web. Tương ứng với đường P13, ca kiểm thử được trình bày trong bảng 4.8. Người dùng đăng nhập với tên là thu, mật khẩu là thu, đây là thông tin của một sinh

viên đã được lưu trong cơ sở dữ liệu, sau khi người dùng đăng nhập với tên và mật khẩu này, hệ thống cần giảm số lượng khách hiện đang truy cập hệ thống đi 1, được lưu qua biến countAnonymous.

Bảng 4.8. Các ca kiểm thử của biến countAnonymous

Đường

P13

Kiểm thử các 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ử các phương thức mà đơn vị gọi đến. Với mỗ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ử sao cho mỗi điều kiện luận lý con của từng điểm quyết định đều được thực hiện ít nhất một lần cho trường hợp đúng 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 được chia thành các phần nhỏ như trong hình 4.2. Câu lệnh gọi phương thức Connect() để kết nối với cơ sở dữ liệu được gọi là hành động 1. Kiểm tra điều kiện UserName và Passwd xem dữ liệu đầu vào có thỏa mãn không được nhóm thành hành động 4. Chọn tất cả các hàng của bảng Students trong cơ sở dữ liệu thỏa mãn điều kiện 4 được gọi là hành động 3. Lưu kết quả thu được trong câu lệnh Select vào bộ chuyển đổi cơ sở dữ liệu dAdapt được gọi là hành động 2. Hành động cuối cùng là hành động 5, bao gồm các câu lệnh lưu kết quả thu được ở hành động 2 vào bảng GetStudent của myDS và trả kết quả về cho phương thức.

Với việc chia mã chương trình thành từng phần như hình 4.2, đồ thị luồng điều khiển của phương thức sẽ có dạng như hình 4.3. Đồ thị đi từ điểm bắt đầu đến điểm kết thúc. Điểm bắt đầu và kết thúc được biểu diễn bằng hình tròn màu đen. Các nút tròn với số bên trong tương ứng với các hành động được chia trong hình 4.2. Mũi tên thể hiện luồng điều khiển của chương trình.

Bước 2: Tính độ phức tạp Cyclomatic của đồ thị (=C).

Đồ thị luồng điều khiển phương thức GetStudent chứa 1 nút quyết định luận lý (nút 4) nên độ phức tạp C = 1+1 = 2. Vậy cần xác định 2 đường thi hành tuyến tính cơ bản

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. 1 4 3 2 5

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ơ bản cần kiểm thử.

Dựa vào đồ thị luồng điều khiển, xác định được 2 đường thi hành tuyến tính cơ bản cần kiểm thử như sau:

1: 1->4->2->5

Bước 4: Tạo từngca kiểm thửcho từng đường thi hành tuyến tính cơ bản. Tương ứng với 2 đường thi hành tuyến tính tìm được ở bước 3, các ca kiểm thử được xác định như trong bảng 4.9. Đường thi hành tuyến tính thứ nhất tương ứng với ca kiểm thử khi người dùng đăng nhập với tên là dangthu, mật khẩu là

thu, trong cơ sở dữ liệu không tồn tại sinh viên nào có tên là dangthu, vậy nên hệ thống cần thông báo không tồn tại sinh viên này. Đường thi hành tuyến tính thứ hai tương ứng với ca kiểm thử khi người dùng đăng nhập với tên là thu, mật khẩu là thu, trong cơ sở dữ liệu tồn tại sinh viên tên là thu, có mật khẩu là thu, vậy hệ thống cần thông báo tồn tại sinh viên với tên và mật khẩu này.

Bảng 4.9. Các ca kiểm thử của phương thức GetStudent

Đường số nUser

1 dangthu

2 Thu

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 đã được kiểm thử ở trên, phương thức GetDataTeacher cũng được chia thành các phần giống như vậy (xem hình 4.4). Câu lệnh gọi phương thức Connect() để kết nối với cơ sở dữ liệu được gọi là hành động 1. Kiểm tra điều kiện UserName và Passwd xem dữ liệu đầu vào có thỏa mãn không được nhóm thành hành động 4. Chọn tất cả các hàng của bảng Teachers trong cơ sở dữ liệu thỏa mãn điều kiện 4 được gọi là hành động 3. Lưu kết quả thu được trong câu lệnh Select vào bộ chuyển đổi cơ sở dữ liệu dAdapt được gọi là hành động 2. Hành động cuối cùng là hành động 5, bao gồm các câu lệnh lưu kết quả thu được ở hành động 2 vào bảng GetDataTeacher của myDS và trả kết quả về cho phương thức.

Lần lượt xây dựng đồ thị luồng điều khiển, xác định các đường thi hành tuyến tính giống như với phương thức GetStudent, các ca kiểm thử của phương thức GetDataTeacher được xác định như trong bảng 4.10. Đường thi hành tuyến tính thứ nhất tương ứng với ca kiểm thử khi người dùng đăng nhập với tên là thu,

mật khẩu là dangthu, trong cơ sở dữ liệu không tồn tại giáo viên nào có tên là

thu, vậy nên hệ thống cần thông báo không tồn tại giáo viên này. Đường thi hành tuyến tính thứ hai tương ứng với ca kiểm thử khi người dùng đăng nhập với tên là

dangthu, mật khẩu là dangthu, trong cơ sở dữ liệu tồn tại giáo viên tên là

dangthu, có mật khẩu là dangthu, vậy hệ thống cần thông báo tồn tại giáo viên với tên và mật khẩu này.

Một phần của tài liệu Kiểm thử tích hợp với độ phức tạp tương đương kiểm thử thành phần (Trang 26 - 41)

Tải bản đầy đủ (DOCX)

(49 trang)
w