Professional Documents
Culture Documents
Trong quá trình thực hiện làm đề tài còn có rất nhiều sai sót, nhóm em mong nhận
được sự giúp đỡ nhiệt tình của thầy cô cũng như các bạn để hoàn thiện một cách tốt nhất.
1
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
2
NHẬN XÉT CỦA NHÓM VỀ CÁC THÀNH VIÊN
Trưởng nhóm
3
LỜI NÓI ĐẦU
Nhờ có sự phát triển vượt bậc của công nghệ thông tin cũng như công nghệ phần
mềm đã dẫn đến việc phát triển phần mềm ngày càng được hỗ trợ bởi rất nhiều công cụ
tiên tiến, giúp hạn chế những khó khăn và nâng cao hiệu quả trong việc xây dựng phần
mềm. Tuy vậy, vì độ phức tập của phần mềm và những giới hạn về trời gian, chi phí cho
nên cũng không chắc chắn đảm bảo được rằng các sản phẩm phần mềm đang được ứng
dụng là không có lỗi cho dù các hoạt động đảm bảo chất lượng phần mềm nói chung và
kiểm thử nói riêng ngày càng chặt chẽ và khoa học. Lỗi phần mềm luôn tồn tại tiềm ẩn
bên trong mọi sản phẩm phần mềm và có thể gây ra những thiệt hại không lường trước
được bất cứ lúc nào.
Một sản phẩm phần mềm không đơn giản là các giai đoạn mã chương tình, mà nó
còn bao gồm nhiều thành phần với nhiều các vai trò khác nhau. Do đó, việc xảy ra các lỗi
phần mềm không chỉ ở công đoạn lập trình, mà còn xảy ra ở tất cả các công đoạn khác
nhau của quy trình phát triển phần mềm, với xác suất cao thấp khác nhau. Kiểm thử là
một công đoạn đóng vai trò tối qaun trọng, quyết định đến việc đánh giá chất lượng của
một sản phẩm phần mềm. Mục đích của kiểm thử là đảm bảo rằng tất cả các thành phần
của phần mềm ăn khớp, vận hành như mong đợi và phù hợp các tiêu chẩn thiết kế.
Kiểm thử phần mềm là một trong những hoạt động quan trọng trong tiến trình phát
triển phần mềm. Nó góp một phần rất lớn trong việc đánh giá chất lượng của một phần
mềm và quy trình bắt buộc trong các dự án phát triển phần mềm trên thế giới cũng như
trong nước.
Để củng cố kiến thức đã học và ứng dụng trong một số công việc cụ thể nên nhóm
chúng em đã được giao tìm hiểu về công cụ kiểm thử NUnit và ứng dụng để tiến hành
kiểm thử chương trình kiểm tra tam giác. Nhóm chúng em xin chân thành cảm ơn thầy Lê
Chí Luận đã tận tình chỉ dạy và hướng dẫn chúng em hoàn thiện đồ án này.
Nhóm thực hiện
4
MỤC LỤC
LỜI CẢM ƠN...........................................................................................................1
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN.....................................................2
NHẬN XÉT CỦA NHÓM VỀ CÁC THÀNH VIÊN.............................................3
LỜI NÓI ĐẦU..........................................................................................................4
MỤC LỤC.................................................................................................................6
CHƯƠNG 1: TỔNG QUAN VỀ KIỂM THỬ PHẦN MỀM..............................10
1.1. Định nghĩa....................................................................................................10
1.2. Kỹ thuật kiểm thử phần mềm.......................................................................10
1.2.1. Kỹ thuật kiểm thử chức năng..................................................................10
1.2.2. Kỹ thuật kiểm thử cấu trúc.....................................................................10
1.3. Chiến lược kiểm thử.....................................................................................11
1.4. Các giai đoạn kiểm thử................................................................................11
1.4.1. Kiểm thử đơn vị (Unit Testing)...............................................................11
1.4.2. Kiểm thử tích hợp (Integration Testing).................................................12
1.4.3. Kiểm thử hợp thức hóa (Validation Testing)..........................................12
1.4.4. Kiểm thử chấp nhận (Acceptance Testing).............................................13
1.4.5. Kiểm thử hồi quy (Regression Testing)...................................................13
1.5. Một số vấn đề khác của kiểm thử phần mềm..............................................13
1.5.1. Các hạn chế của kiểm thử......................................................................13
1.5.2. Các nguyên tắc kiểm thử........................................................................14
1.5.3. Phân loại một số công cụ kiểm thử tự động............................................15
CHƯƠNG 2: CÔNG CỤ KIỂM THỬ NUNIT....................................................17
2.1. Giới thiệu......................................................................................................17
2.1.1. NUnit-console.........................................................................................17
2.1.2. NUnit-Gui.exe........................................................................................18
2.2. Lớp Assert.....................................................................................................18
2.3. Các thuộc tính trong Nunit..........................................................................19
CHƯƠNG 3: HƯỚNG DẪN SỬ DỤNG CÔNG CỤ NUNIT.............................21
3.1. Download và cài đặt công cụ........................................................................21
3.1.1. Download công cụ..................................................................................21
3.1.2. Cài đặt công cụ.......................................................................................22
3.2. Bắt đầu sử dụng chương trình.....................................................................27
CHƯƠNG 4: GIỚI THIỆU VỀ CHƯƠNG TRÌNH ỨNG DỤNG.....................39
4.1. Mô tả bài toán...............................................................................................39
4.1.1. Mục đích.................................................................................................39
5
4.1.2. Phạm vi...................................................................................................39
4.2. Mô tả chương trình......................................................................................39
4.2.1. Tổng quan về chương trình.....................................................................39
4.2.2. Yêu cầu hệ thống....................................................................................39
4.2.3. Yêu cầu chức năng..................................................................................39
CHƯƠNG 5: TIẾN HÀNH KIỂM THỬ..............................................................41
5.1. Xây dựng các test cases cho chương trình kiểm tra tam giác.....................41
5.2. Xây dựng các trường hợp kiểm thử.............................................................43
KẾT LUẬN..............................................................................................................54
6
Tìm hiểu về công cụ kiểm thử Nunit Chương 1: Tổng quan về kiểm thử phần mềm
Kỹ thuật kiểm thử cấu trúc cho phép chúng ra kiểm thử cấu trúc bên trong của phần
mềm, với mục đích kiểm tra rất cả các câu lệnh và điểu kiện tồn tại trong phần mềm đó.
Trong kỹ thuật này, kiểm thử viên lấy dữ liệu thử xuất phát từ việc kiểm tra logic của
chương trình (không quan tâm đến đặc tả).
1.3. Chiến lược kiểm thử
Một chiến lược kiểm thử (test strategy) là một kế hoạch định nghĩa mục tiêu các giai
đoạn kiểm thử cũng như các kỹ thuật kiểm thử sử dụng. Chiến lược kiểm thử thường
được quyết định dựa vào tiêu chuẩn về độ tin cậy của phần mềm và chi phí cho việc phát
triển phần mềm. Ngoài ra, một chiến lược kiểm thử sẽ phụ thuộc kích thước của đối tượng
được kiểm thử cũng như quan điểm về đối tượng được kiểm thử.
Nếu chúng ta muốn kiểm thử một cách độc lập các thành phần/đơn vị cấu tạo nên
phần mềm, chúng ta gọi là kiểm thử đơn vị. Nếu chúng ta muốn kiểm thử sự kết hợp các
thành phần cấu tạo nên phần mềm, chúng ta gọi là kiểm thử tích hợp. Nếu chúng ta muốn
bảo đảm rằng một phần mềm đang được phát triển một cách đúng đắn và các thành phần
cấu tạo nên phần mềm cũng được phát triển một cách đúng đắn, chúng ta gọi là xác minh
(verification). Tuy nhiên, một phần mềm không chỉ đơn thuần là đáp ứng yêu cầu của nhà
sản xuất, mà nó chỉ trở nên hữu ích nếu đáp ứng được nhu cầu của người sử dụng cuối
cùng. Việc bảo đảm một phần mềm đáp ứng nhu cầu của người sử dụng được gọi là hợp
thức hoá (validation).
1.4. Các loại kiểm thử
1.4.1. Kiểm thử đơn vị (Unit Testing)
Phần lớn các phương pháp thiết kế phần mềm đều dẫn đến chia phần mềm thành
những mô- đun hay chương trình nhỏ có các dữ liệu vào và kết quả riêng. Chúng ta gọi
các mô-đun hay chương trình đó là các đơn vị (unit) phần mềm. Trên các đơn vị này
chúng ta sẽ tiến hành kiểm thử đơn vị.
Một khi đơn vị phần mềm đã được mã hoá, nghĩa là lập trình và hồ sơ kiểm thử đơn
vị tương ứng đã được hoàn thành thì kiểm thử đơn vị có thể được tiến hành.
Kiểm thử đơn vị chủ yếu là thực hiện các trường hợp kiểm thử (test case) đã được
mô tả trong hồ sơ kiểm thử đơn vị và điền các thông tin cần thiết vào các phiếu báo cáo
kiểm thử. Nếu một lỗi hay sự không tương thích được phát hiện, cần phải chỉnh sửa lại
Tìm hiểu về công cụ kiểm thử Nunit Chương 1: Tổng quan về kiểm thử phần mềm
đơn vị phần mềm. Sau đó, kiểm thử đơn vị được thực hiện lại. Kiểm thử đơn vị sẽ kết
thúc khi mà tất cả các trường hợp kiểm thử được mô tả trong hồ sơ kiểm thử đơn vị đã
được thực hiện thành công và kết quả được lưu lại trong hồ sơ.
1.4.2. Kiểm thử tích hợp (Integration Testing)
Kiểm thử tích hợp được tiến hành một khi kiểm thử đơn vị các thành phần cần thiết
cho kiểm thử tích hợp kết thúc và hồ sơ kiểm thử tích hợp đã được chuẩn bị sẵn sàng.
Trong giai đoạn kiểm thử tích hợp, ý tưởng là các thành phần đã được kiểm thử đơn vị sẽ
được tích hợp lại dần dần cho đến khi có được toàn bộ phần mềm. Phần mềm càng phức
tạp thì đòi hỏi giai đoạn kiểm thử tích hợp phải trải qua các giai đoạn trung gian, là các
giai đoạn mà các nhóm các thành phần sẽ được kiểm thử.
Mục tiêu của giai đoạn kiểm thử tích hợp là kiểm tra sự giao tiếp và trao đổi dữ liệu
giữa các thành phần phần mềm. Trong giai đoạn tích hợp, có thể có khả năng phải sử
dụng các thành phần không được phát triển trong dự án phần mềm, mà là những thành
phần được cung cấp sẵn bởi các thư viện hay thậm chí là các thành phần được cung cấp
bởi hệ điều hành.
Khi tích hợp các thành phần tạo thành tập hợp, chúng ta có thể tiến hành theo các
chiến lược:
- Tích hợp từ trên xuống (top-down) bằng cách kiểm thử tích hợp các thành phần
chính trước, sau đó thêm vào các thành phần được gọi trực tiếp bởi các thành phần
vừa kiểm thử.
- Tích hợp từ dưới lên (bottom-up) bằng cách kiểm thử các thành phần không gọi
các thành phần khác, sau đó thêm vào các thành phần gọi các thành phần vừa kiểm
thử.
1.4.3. Kiểm thử hợp thức hóa (Validation Testing)
Kiểm thử hợp thức hoá có thể bắt đầu ngay sau khi kiểm thử tích hợp kết thúc và hồ
sơ kiểm thử hợp thức hoá đã sẵn sàng. Mục tiêu của kiểm thử hợp thức hoá là cần chỉ ra
rằng phần mềm thực hiện đúng những gì mà người sử dụng mong đợi. Vì thế, ở giai đoạn
này, kiểm thử được thực hiện dưới góc nhìn của người sử dụng, chứ không phải dưới góc
nhìn của người phát triển như các giai đoạn kiểm thử đơn vị hay kiểm thử tích hợp.
Tìm hiểu về công cụ kiểm thử Nunit Chương 1: Tổng quan về kiểm thử phần mềm
Vì kiểm thử được thực hiện dưới góc nhìn của người sử dụng nên giai đoạn này chỉ
sử dụng các kỹ thuật kiểm thử chức năng, tức là các kỹ thuật kiểm thử hộp đen. Các bộ dữ
liệu thử sẽ được tạo ra dựa trên các tài liệu đặc tả. Thông thường các tài liệu đặc tả sẽ
được phân tích để xác định các yêu cầu chứa đựng các hành vi mong đợi của phần mềm.
1.4.4. Kiểm thử chấp nhận (Acceptance Testing)
Được thực hiện khi tất cả các giai đoạn kiểm thử được hoàn tất nhằm để chứng minh
phần mềm đã đủ sẵn sàng xuất xưởng. Các thủ tục kiểm thử hoặc chạy thử phải được
người đặt hàng chấp nhận trước khi thực hiện để nghiệm thu.
1.4.5. Kiểm thử hồi quy (Regression Testing)
Phần mềm là một trong những loại sản phẩm thay đổi rất nhanh. Người sử dụng
luôn có yêu cầu cải tiến phần mềm và các chức năng mới. Vì vậy, sự chỉnh sửa phần mềm
sau khi đưa vào sử dụng là cần thiết. Mặt khác, bất kỳ sự sửa đổi nào cùng có thể dẫn đến
các lỗi mới. Phần mềm nhất thiết phải được kiểm thử lại sau khi sửa đổi, giai đoạn kiểm
thử này gọi là kiểm thử hồi quy.
Giai đoạn kiểm thử hồi quy thường tái sử dụng các bộ dữ liệu thử đã sử dụng trong
các giai đoạn trước nhằm kiểm tra rằng không có các lỗi mới được đưa vào. Vấn đề đặt ra
ở đây là trong giai đoạn này, các bộ dữ liệu thử nào được tái sử dụng: kiểm thử đơn vị,
kiểm thử tích hợp hay kiểm thử hệ thống?
1.5. Một số vấn đề khác của kiểm thử phần mềm
1.5.1. Các hạn chế của kiểm thử
Do kiểm thử là chạy thử chương trình với tập dữ liệu giả nên không thể khẳng định
tính đúng của chương trình do bản chất quy nạp không hoàn toàn của nó.
Trong nhiều trường hợp, việc kiểm thử thường được thực hiện từ những giai đoạn
đầu của quá trình cài đặt sản phẩm.
Một chương trình được cho tuyệt đối đúng phải được thực hiện thông qua: tính đúng
đắn của thuật toán và tính tương đương của chương trình với thuật toán (được thể hiện ở
chứng minh thông qua văn bản chương trình).
Việc kiểm thử chương trình chỉ là nhìn sự kiện đưa ra kết luận do vậy không thể
khẳng định một chương trình tuyệt đối đúng bằng kiểm thử. Tuy vậy, bộ dữ liệu kiểm thử
phải phủ kín mọi trường hợp cần đánh giá.
Tìm hiểu về công cụ kiểm thử Nunit Chương 1: Tổng quan về kiểm thử phần mềm
Thêm vào đó, trong quá trình kiểm thử, ta thường mắc phải các đặc trưng của
nguyên lý chủ quan như sau:
- Bộ dữ liệu kiểm thử không thay đổi trong quá trình xây dựng phần mềm.
- Chỉ kiểm thử các trường hợp chính thống, hợp lệ, không quan tâm đến các cận và
các sự cố.
- Cài đặt chức năng nào thì chỉ kiểm thử riêng chức năng đó, không kiểm thử tổng
hợp chức năng vừa cài đặt với các chức năng đã cài đặt trước đó.
- Người kiểm thử đồng thời là người xây dựng phần mềm tức vừa đá bóng, vừa
thổi còi.
1.5.2. Các nguyên tắc kiểm thử
Các nguyên tắc luôn đóng vai trò quan trọng trong lĩnh vực công nghệ phần mềm.
Các nguyên tắc trong công nghệ phần mềm là các luật hay quy tắc hướng dẫn làm thế nào
để xây dựng (thiết kế, phát triển, kiểm thử và bảo trì) phần mềm. Kiểm thử là một trong
những lĩnh vực của công nghệ phần mềm, kiểm thử cũng có các nguyên tắc riêng dành
cho các kiểm thử viên. Chúng ta sẽ xem xét một số nguyên tắc cơ bản liên quan đến kiểm
thử động:
- Kiểm thử là tiến trình thực thi phần mềm và sử dụng các trường hợp kiểm thử để
phát hiện lỗi.
- Với mục đích của kiểm thử nhằm phát hiện lỗi, một ca kiểm thử tốt là ca kiểm thử
có khả năng cao phát hiện những lỗi chưa được tìm thấy.
- Một ca kiểm thử phải định nghĩa kết quả mong muốn.
- Kiểm thử nên được thực hiện bởi một nhóm độc lập với nhóm phát triển.
- Kết quả kiểm thử nên được kiểm tra một cách cẩn thận.
- Các ca kiểm thử nên được thiết kế cho cả những dữ liệu vào hợp lệ và không hợp
lệ.
- Các ca kiểm thử phải được tái sử dụng.
- Xác suất tồn tại của các lỗi hơn nữa trong một đơn vị phần mềm tỷ lệ với số các lỗi
đã được phát hiện trong đơn vị phần mềm đó.
- Kiểm thử nên phải được lập kế hoạch.
- Các hoạt động kiểm thử nên phải được tích hợp vào tiến trình phát triển phần mềm.
Tìm hiểu về công cụ kiểm thử Nunit Chương 1: Tổng quan về kiểm thử phần mềm
- Kiểm thử là một công việc đầy sáng tạo và thách thức.
1.5.3. Phân loại một số công cụ kiểm thử tự động
Vì kiểm thử phần mềm thường chiếm tới 40% tất cả các nỗ lực dành cho một dự án
xây dựng phần mềm, nên công cụ có thể làm giảm thời gian kiểm thử sẽ rất có giá trị.
Thừa nhận lợi ích tiềm năng này, các nhà nghiên cứu và người thực hành đã phát triển
một số thế hệ các công cụ kiểm thử tự động:
Bộ phân tích tĩnh: Các hệ thống phân tích chương trình này hỗ trợ cho việc chứng
minh các lý lẽ tĩnh - những mệnh đề yếu kém về cấu trúc và định dạng của chương trình.
Bộ thanh tra mã nguồn: Những bộ lọc chuyên dụng này được dùng để kiểm tra chất
lượng của phần mềm để đảm bảo rằng nó đáp ứng các chuẩn mã hoá tối thiểu.
Bộ xử lý khẳng định: Những hệ thống tiền xử lý/hậu xử lý này được sử dụng để cho
biết liệu những phát biểu do người lập trình nêu, được gọi là các khẳng định, về hành vi
của chương trình có thực sự được đáp ứng trong việc thực hiện chương trình thực hay
không.
Bộ sinh trường hợp kiểm thử: Những bộ xử lý này sinh ra, và điền các giá trị đã xác
định vào các trường hợp kiểm thử cho chương trình đang được kiểm thử.
Bộ sinh dữ liệu kiểm thử: Những hệ thống phân tích tự động này hỗ trợ cho người
dùng trong việc chọn dữ liệu kiểm thử làm cho chương trình hành xử theo một cách đặc
biệt.
Bộ kiểm chứng kiểm thử: Những công cụ này đo mức bao quát kiểm thử bên trong,
thường được diễn tả dưới dạng có liên quan tới cấu trúc điều khiển của sự vật kiểm thử,
và báo cáo về giá trị bao quát cho chuyên gia đảm bảo chất lượng.
Dụng cụ kiểm thử: Lớp các công cụ này hỗ trợ cho việc xử lý các phép kiểm thử.
Bộ so sánh kết quả đầu ra: Công cụ này làm cho người ta có thể so sánh một tập kết
quả đầu ra từ một chương trình này với một tập kết quả khác (đã được lưu giữ trước) để
xác định sự khác biệt giữa chúng.
Hệ thống thực hiện ký hiệu (symbolic execution system): Công cụ này thực hiện
việc kiểm thử chương trình bằng cách dùng “dữ liệu vào” đại số, thay vì giá trị dữ liệu số.
Phần mềm được kiểm thử xuất hiện để kiểm thử các lớp dữ liệu, thay vì chỉ là một trường
Tìm hiểu về công cụ kiểm thử Nunit Chương 1: Tổng quan về kiểm thử phần mềm
hợp kiểm thử đặc biệt. “Dữ liệu ra” là đại số và có thể được so sánh với kết quả trông đợi
cũng được xác định dưới dạng đại số.
Bộ mô phỏng môi trường: Công cụ này là một hệ thống dựa trên máy tính giúp
người kiểm thử mô hình hoá môi trường bên ngoài của phần mềm thời gian thực và rồi
mô phỏng các điều kiện vận hành thực tại một cách động.
Bộ phân tích luồng dữ liệu: Công cụ này theo dõi dấu vết luồng dữ liệu đi qua hệ
thống và cố gắng tìm ra những tham khảo dữ liệu không xác định, đặt chỉ số sai và các lỗi
khác có liên quan tới dữ liệu.
Tìm hiểu về công cụ kiểm thử Nunit Chương 2: Công cụ kiểm thử NUnit
2.1.2. NUnit-Gui.exe
Là một chương trình đồ họa nunit.exe runner. Điều đó cho các bài kiểm tra trong
một thám hiểm-như cửa sổ trình duyệt và cung cấp một hình ảnh chỉ biểu của thành công
hay thất bại của các bài kiểm tra. Nó cho phép bạn lựa chọn để chạy một bài kiểm tra
hoặc một lớp nào đó và tự động reload khi bạn chỉnh sửa và biên soạn lại mã của bạn.
Sau đây là một ảnh chụp màn hình của NUnit chạy test một đoạn lệnh.
o NUnit.Framework.Assert.Contains
o NUnit.Framework.Assert.True
o NUnit.Framework.Assert.Fail
o NUnit.Framework.Assert.Greater
o NUnit.Framework.Assert.Less
o NUnit.Framework.Assert.NotNull
o NUnit.Framework.Assert.Null
o NUnit.Framework.Assert.ReferenceEquals
- Phương thức động
o GetHashCode (inherited from Object): Phục vụ như một hash chức năng cho
một loại, thích hợp cho sử dụng trong các thuật toán hashing và dữ liệu cấu trúc
giống như một bảng hash.
o GetType (inherited from Object): Lấy kiểu của đối tượng hiện hành.
o ToString (inherited from Object): Trả về một kiểu chuỗi của đối tượng hiện
hành.
o Finalize (inherited from Object): Cho phép một đối tượng cố gắng thử với mã
nguồn mở và thực hiện các hoạt động trước khi đối tượng phản đối lại do tập
hợp các dữ liệu vô nghĩa hoặc không tương thích.
o MemberwiseClone (inherited from Object): Tạo ra một bản sao của đối tượng
hiện hành.
o Assert Constructor: Khởi tạo một instance mới của lớp Assert.
2.3. Các thuộc tính trong Nunit
Người ta thường tạo một project dạng class library dành cho các test class. Project
này theo đúng tên gọi của nó chỉ có ý nghĩa để test và không có vai trò gì trong sản phầm
phần mềm cuối cùng. Thực ra NUnit có thể test bất kí test class nào bên trong một
assembly bất kì nên project test có thể là Console application, window application, v.v
nhưng thông thường người ta sẽ chọn project loại class library. Có một lưu ý là test class
của bạn phải được khai báo public, test method cũng thế. Khi sử dụng NUnit.Framework,
Tìm hiểu về công cụ kiểm thử Nunit Chương 2: Công cụ kiểm thử NUnit
các bạn sẽ phải làm quen với những Attribute như [TestFixture], [Test], [Setup],
[TearDown],…
- [TestFixture]: dùng để đánh đấu 1 class là test class, những class khác không có
Attribute này sẽ mặc định bị ignore khi NUnit test assembly của bạn.
- [Test]: dùng để đánh dấu 1 method là test method, ý nghĩa của nó tương tự như
TestFixture nhưng scope ở cấp method.
- [Setup]: dùng để đánh dấu một method sẽ được gọi trước khi môt test case được
goi. Nếu trong một test class có mười method test, thì mỗi lần một method test được chạy
thì Nunit sẽ chạy method được đánh dấu với Setup trước tiên.
- [TearDown]: ngược với Setup, chạy sau mỗi test method.
- [TestFixtureSetup]: tương tự như Setup nhưng ở cấp của class, khi một test class
được test thì methid nào được đánh dấu với attribute này sẽ được chạy trước tiên.
- [TestFixtureTearDown]: ngược với TestFixtureSetup.
Vậy để apply NUnit Test thì công việc vô cùng đơn giản: tạo một project class
library, thêm reference đến .dll nunit.framework, thêm 1 class mới, khai báo nó thành
public, thêm using nunit.framework, thêm attribute [TestFixture] vào đầu của class, viết
một method test và khai báo với attribute [Test]. Cơ bản như vậy là đủ để test, bạn có thể
kết hợp nhiều attribute khác cũng như nguyên tắc Inheritance của lập trình hướng đối
tượng để có một project test uyển chuyển. Người ta thường sử dụng [Setup] để mở một
transaction scope, sau đó dùng [TearDown] để roll back transaction khi test các Dao,
như vậy sẽ không có dữ liệu bị thêm xóa vào database và bảo đảm dữ liệu test sẽ như
nhau trước khi test các method.
Tìm hiểu về công cụ kiểm thử Nunit Chương 4: Hướng dẫn sử dụng công cụ NUnit
Trong cửa sổ NuGet – Solution chọn tab Browse và gõ cụm từ ‘nunit‘ trong ô tìm kiếm và
chọn NUnit đầu tiên:
Hình 3.3. Tiến trình cài đặt chương trình (tiếp theo)
Bên khung cửa sổ NUnit bên phải chọn Project (bao gồm hai dự án) và nhấn Install:
Tìm hiểu về công cụ kiểm thử Nunit Chương 4: Hướng dẫn sử dụng công cụ NUnit
Hình 3.4. Tiến trình cài đặt chương trình (tiếp theo)
Nếu hộp thoại Preview Changes xuất hiện thì nhấn OK. Nếu cài đặt thành công thì kết
quả từ hộp thoại Output sẽ như sau:
Hình 3.5. Tiến trình cài đặt chương trình (tiếp theo)
Tìm hiểu về công cụ kiểm thử Nunit Chương 4: Hướng dẫn sử dụng công cụ NUnit
Đóng cửa sổ NuGet – Solution và Output. Trở lại cửa sổ Solution Explorer tìm đến mục
Reference của hai sự án sẽ xuất hiện nunit.framwork:
Hình 3.6. Tiến trình cài đặt chương trình (tiếp theo)
Tìm hiểu về công cụ kiểm thử Nunit Chương 4: Hướng dẫn sử dụng công cụ NUnit
}
}
Kế tiếp, thêm một lớp thư viện đến Solution bằng cách nhấn chuột phải vào Solution
trong cửa sổ Solution Explorer chọn Add > New Project
Thuộc tính Test được đặt trong dấu ngoặc vuông để đánh dấu các phương thức là đơn
vị kiểm thử. Trước khi viết vài đoạn mã cho hai phương thức Add_Test và Sub_Test,
chúng ta sẽ tìm hiểu lớp Assert từ namespace NUnit.Framework.
Lớp Assert như là chiếc cầu nối giữa mã chương trình cần kiểm thử và NUnit. Một
đơn vị kiểm thử sẽ dùng lớp này với mục đích khai báo một giả định nào đó là tồn tại và
nếu các đối số được chuyển vào lớp Assert được thực hiện với kết quả khác với giả định
thì đơn vị kiểm thử này thất bại.
Thay đối nội dung hai phương thức Add_Test và Sub_Test như sau:
1[TestFixture]
2
3public class MyTesting
4
5{
6
7 [Test]
8
9 public void Add_Test() {
10
11 Calculator cal = new Calculator();
Tìm hiểu về công cụ kiểm thử Nunit Chương 4: Hướng dẫn sử dụng công cụ NUnit
12
13 int add_Result = cal.Add(3, 5);
14
15 Assert.That(add_Result, Is.EqualTo(8));
16
17 }
18
19 [Test]
20
21 public void Sub_Test() {
22
23 Calculator cal = new Calculator();
24
25 int sub_Result = cal.Sub(3, 5);
26
27 Assert.That(sub_Result, Is.EqualTo(8));
28
29 }
30
31}
Chúng ta sử dụng phương thức That của lớp Assert để xác nhận một kết quả là đúng
với giả định hay không. Trong hai phương thức Add_Test và Sub_Test, chúng ta gọi các
phương thức Add và Sub từ lớp Calculator với các đối số là 3 và 5. Kết quả từ các
phương thức này sẽ được so sánh với kết quả giả định là 8.
Chúng ta thực hiện kiểm thử bằng cách dùng công cụ Test Explorer từ mục Test trong
Visual Studio 2017:
Tìm hiểu về công cụ kiểm thử Nunit Chương 4: Hướng dẫn sử dụng công cụ NUnit
Chúng ta có thể chọn Run All để chạy cả hai phương thức kiểm thử hay chúng ta có thể
chọn một trong hai phương thức và nhấn chuột phải chọn Run Selected Tests, ví dụ chọn
Add_Test:
Tìm hiểu về công cụ kiểm thử Nunit Chương 4: Hướng dẫn sử dụng công cụ NUnit
Kết quả:
Như vậy đơn vị kiểm thử Add_Test đã thành công vì tổng 3 và 5 là 8 khớp với kết quả giả
định. Tương tự, chúng ta thực thi Sub_Test:
Tìm hiểu về công cụ kiểm thử Nunit Chương 4: Hướng dẫn sử dụng công cụ NUnit
Sub_Test đã thất bại vì kết quả hiệu 3 và 5 là -2 khác với kết quả giả định là 8.
Tìm hiểu về công cụ kiểm thử Nunit Chương 4: Hướng dẫn sử dụng công cụ NUnit
Nếu thỏa mãn điều kiện đó thì ta xét đến tính chất của tam giác đó.
Tìm hiểu về công cụ kiểm thử Nunit Chương 4: Hướng dẫn sử dụng công cụ NUnit
- Là tam giác cân nếu thỏa mãn điều kiện trong tam giác có một cặp cạnh bằng nhau.
Cụ thể: a = b Or c = b Or a = c
- Là tam giác đều nếu 3 cạnh của chúng đều bằng nhau: a = b = c
Cạnh 2 = 5
đều ĐÚNG “True”
Cạnh 3 = 5
Bảng 5.1. Bảng trường hợp kiểm thử chương trình kiểm tra tam giác
Tìm hiểu về công cụ kiểm thử Nunit Chương 5: Tiến hành kiểm thử
- Xét trường hợp 01: khi ta nhập thông 00tin 3 đúng của một tam giác và ta cho kết
quả là “True”
<Test()> _
Public Sub test_tamgiac()
i = tamgiac.tamgiac(3, 4, 5)
Assert.AreEqual(i, True)
End Sub
Ta thấy kết quả kiểm thử trả về trùng với kết quả trả về ở trên nên kết quả test là
đúng.
- Xét trường hợp kiểm thử 02: ta nhập mẫu đầu vào là đúng và gán giá trị trả về là
sai.
<Test()> _
Public Sub test_tamgiac()
i = tamgiac.tamgiac(5, 6, 7)
Assert.AreEqual(i, False)
End Sub
Ta thấy chương trình chấp nhận mẫu đầu vào nhưng chương trình báo lỗi (dữ liệu
đầu vào là đúng tam giác thường nhưng kết quả đầu ra lại cho là “False”) nên kết quả test
là đúng.
- Xét trường hợp kiểm thử 03: nhập dữ liệu đầu vào sai, kết quả đầu ra đúng.
<Test()> _
Public Sub test_tamgiac()
i = tamgiac.tamgiac(3.5, 4, 5)
Assert.AreEqual(i, True)
End Sub
Mặc dù độ dài của một cạnh trong tam giác là dạng thập phân nhưng chương trình
test vẫn chấp nhận dữ liệu này trong khi chương trình ứng dụng thì không. Vậy kết quả
test trường hợp này là sai.
- Xét trường hợp kiểm thử 04: ta nhập dữ liệu đầu vào và kết quả đầu ra là đúng đối
với tam giác cân.
<Test()> _
Public Sub test_tamgiaccan()
i = tamgiac.tamgiaccan(2, 2, 3)
Assert.AreEqual(i, True)
End Sub
Kết quả test cho thấy là dữ liệu đầu vào và kết quả đầu ra là cùng đưa ra một kết quả
đúng đối với tam giác cân nên kết quả test trường hợp này đúng.
- Xét trường hợp kiểm thử 05: tam giác cân này ta cho dữ liệu đầu vào sai và kết quả
đầu ra là đúng.
<Test()> _
Public Sub test_tamgiaccan()
i = tamgiac.tamgiaccan(5, 4, 3)
Assert.AreEqual(i, True)
End Sub
Khi ta cho dữ liệu đầu vào ở trên để khẳng định nó là tam giác cân thì sai hoàn toàn
và chương trình test của chúng ta cũng báo lỗi này. Vậy kết quả test trường hợp này là
đúng.
- Xét trường hợp kiểm thử 06: xét tam giác vuông ta nhập dữ liệu đầu vào và đầu ra
đều đúng
<Test()> _
Public Sub test_tamgiacvuong()
i = tamgiac.tamgiacvuong(3, 4, 5)
Assert.AreEqual(i, True)
End Sub
Đối với nguồn dữ liệu đầu vào và kết quả đầu ra như trên thì chương trình test của
chúng ta cũng báo là đúng. Vậy kết quả test ở đây là đúng.
- Xét trường hợp kiểm thử 07: tam giác vuông: dữ liệu đầu đúng và kết quả đầu ra là
sai.
<Test()> _
Public Sub test_tamgiacvuong()
i = tamgiac.tamgiacvuong(3, 4, 5)
Assert.AreEqual(i, False)
End Sub
Với nguồn đầu vào thỏa mãn một tam giác vuông nhưng kết quả đầu ra báo sai thì
chương trình test báo lỗi. Vậy kết quả test ở đây là đúng.
- Xét trường hợp kiểm thử 08: tam giác đều – ta nhập dữ liệu đầu vào đúng nhưng
cho kết quả đầu ra là sai
<Test()> _
Public Sub test_tamgiacdeu()
i = tamgiac.tamgiacdeu(3, 3, 3)
Assert.AreEqual(i, False)
End Sub
Đối với xét tam giác đều và với nguồn dữ liệu như trên là thỏa mãn nhưng ta cho kết
quả đầu ra là sai và chương trình test của chúng ta báo lỗi. Vậy kết quả test ở đây là đúng.
- Xét trường hợp kiểm thử 09: dữ liệu đầu vào và kết quả đầu ra đều đúng
<Test()> _
Public Sub test_tamgiacdeu()
i = tamgiac.tamgiacdeu(5, 5, 5)
Assert.AreEqual(i, True)
End Sub
Trong việc xét tam giác đều, với dữ liệu đầu vào và kết quả đầu ra như trên thì đây
sẽ là trường hợp đúng. Và chương trình test của chúng ta báo đúng nên kết quả test trường
hợp này là đúng.
KẾT LUẬN