Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 81 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
81
Dung lượng
1,71 MB
Nội dung
Nghiên cứu Unit Testing trong C# với NUnit và Demo MỤC LỤC MỤC LỤC 1 ĐÁNH GIÁ CỦA GIÁO VIÊN HƯỚNG DẪN 2 PHẦN I: PHẦN MỞ ĐẦU 3 PHẦN II: PHẦN NỘI DUNG 5 CHƯƠNG I: KHÁI QUÁT KIỂM THỬ PHẦN MỀM 5 Các khái niệm cơ bản trong kiểm thử phần mềm 5 Nguyên tắc trong kiểm thử phần mềm 17 CHƯƠNG II: UNIT TESTING 18 Tổng quan về Unit test 18 Sử dụng Unit test với mô hình đối tượng ảo (Mock Object) 21 CHƯƠNG III: THIẾT KẾ TEST CASE 25 Định nghĩa 25 Vai trò của việc thiết kế test case 25 Quy trình thiết kế test case 25 CHƯƠNG IV: TÌM HIỂU VỀ NUNIT 49 Các công cụ kiểm thử của từng ngôn ngữ kiểm thử 49 Nuint trong C# 52 CHƯƠNG V: CHƯƠNG TRÌNH DEMO 69 Phát biểu bài toán 69 Đặt vấn đề 69 Phân tích và thiết kế bài toán 69 Thiết kế các test case 70 Ứng dụng chương trình 75 Tổng kết chương trình demo 78 1 Nghiên cứu Unit Testing trong C# với NUnit và Demo PHẦN III:PHẦN KẾT LUẬN 79 TÀI LIỆU THAM KHẢO 80 ĐÁNH GIÁ CỦA GIÁO VIÊN HƯỚNG DẪN …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… 2 Nghiên cứu Unit Testing trong C# với NUnit và Demo …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… ……………………………………………………………………………………………. Hưng Yên, ngày … tháng … năm 2010 Giáo viên hướng dẫn PHẦN I: PHẦN MỞ ĐẦU Kiểm thử phần mềm là khâu sống còn của việc phát triển phần mềm. Hai chữ "kiểm thử" nghe có vẻ đơn giản, nhàn rỗi nhưng khâu này lại giúp cho sản phẩm được hoàn thiện nhằm đáp ứng yêu cầu đặt ra của khách hàng. Sản phẩm hoàn thiện, chất lượng cao sẽ tạo thêm niềm tin và uy tín của công ty với đối tác trong và ngoài nước. Nếu không có khâu kiểm thử phần mềm, tình trạng khách hàng trả lại sản phẩm về cho người phát triển phần mềm đó sẽ xảy ra thường xuyên. Chính vì vậy, tester là vị trí không thể thiếu và công việc này quyết định khá nhiều vào sự thành công chung của dự án phát triển phầm mềm. Việt Nam hiện nay đang được đánh giá sẽ trở thành con hổ trong ngành kiểm thử phần mềm châu Á với lượng nhân công trẻ và nhiều doanh nghiệp đang phát triển theo con đường này. Tại Việt Nam, những ai theo học ngành Công nghệ thông tin đều đa phần là nghĩ ngay đến nghề lập trình vì thế khiến đầu ra của nghề kiểm thử phần mềm có số lượng thấp hơn hẳn so với chuyên môn lập trình viên khiến các nhà tuyển dụng rất vất 3 Nghiên cứu Unit Testing trong C# với NUnit và Demo vả trong việc tìm kiếm nguồn nhân lực cho ngành kiểm thử phần mềm. Nhưng cũng nhờ đó mà những ai định hướng theo nghề tester ngay từ đầu có thể yên tâm có trong tay tấm vé xin việc làm ngay khi vừa tốt nghiệp. Với xu hướng phát triển ngành kiểm thử phần mềm của Việt Nam nói riêng cũng như của Châu Á nói chung thì việc nhóm sinh viên em chọn để tài làm về kiểm thử phần mềm: “Nghiên cứu về Unit Testing trong C# với Nunit và viết chương trình demo” là đúng đắn và hơn hết là hợp thời đại bây giờ. Đề tài nghiên cứu về kiểm thử phần mềm này thì nhóm sinh viên chúng em có thể hiểu được khái quát về kiểm thử phần mềm, hiểu được về một số công cụ dùng để kiểm thử như Nunit cho dotNet, Junit cho ngôn ngữ Java,…và hiểu được việc thiết kết test – case trong kiểm thử mức đơn vị (Unit test). Hơn hết, em có thể biết thêm một số công cụ kiểm thử tự động như: QuickTestProfessional, LoadRunner, hay Test Complete… Trong quá trình thực hiện nghiên cứu đề tài, chúng em nhận được sự hướng dẫn tận tình của cô giáo Lê Thị Thu Hương – giáo viên trực tiếp hướng dẫn, chúng em còn nhận được sự hướng dẫn của các thầy cô giáo trong bộ môn Công nghệ phần mềm và tất cả các bạn trong bộ môn. Chúng em hy vọng sẽ nhận được sự góp ý của các thầy cô và các bạn để chúng em có thể hoàn thành tốt đề tài này. Những đóng góp của mọi người sẽ là những kinh nghiệm quý báu giúp em và các bạn trong nhóm có những dự định sau này trong khi làm đồ án tốt nghiệp và sau khi tốt nghiệp. Một lần nữa em xin chân thành cảm ơn cô giáo Lê Thị Thu Hương đã hướng dẫn em và các bạn hoàn thành đề tài nghiên cứu. Em xin chân thành cảm ơn! Nhóm sinh viên: Đỗ Thùy Dung Nguyễn Thị Huệ Nguyễn Thị Hương 4 Nghiên cứu Unit Testing trong C# với NUnit và Demo PHẦN II: PHẦN NỘI DUNG CHƯƠNG I: KHÁI QUÁT KIỂM THỬ PHẦN MỀM Các khái niệm cơ bản trong kiểm thử phần mềm. 1.1.1. Khái niệm về kiểm thử phần mềm. - Kiểm thử phần mềm là quá trình khảo sát một hệ thống hay thành phần dưới những điều kiện xác định, quan sát và ghi lại các kết quả, và đánh giá một khía cạnh nào đó của hệ thống hay thành phần đó. (Theo Bảng chú giải thuật ngữ chuẩn IEEE của Thuật ngữ kỹ nghệ phần mềm- IEEE Standard Glossary of Software Engineering Terminology). - Kiểm thử phần mềm là quá trình thực thi một chương trình với mục đích tìm ra nhiều lỗi. (Theo “The Art of Software Testing” – Nghệ thuật kiểm thử phần mềm). - Kiểm thử phần mềm là hoạt động khảo sát thực tiễn sản phẩm hay dịch vụ phần mềm trong đúng môi trường chúng dự định sẽ được triển khai nhằm cung cấp cho người 5 Nghiên cứu Unit Testing trong C# với NUnit và Demo có lợi ích liên quan những thông tin về chất lượng của sản phẩm hay dịch vụ phần mềm ấy. Mục đích của kiểm thử phần mềm là tìm ra các lỗi hay khiếm khuyết phần mềm nhằm đảm bảo hiệu quả hoạt động tối ưu của phần mềm trong nhiều ngành khác nhau. (Theo Bách khoa toàn thư mở Wikipedia). - Có thể định nghĩa một cách dễ hiểu như sau: Kiểm thử phần mềm là một tiến trình hay một tập hợp các tiến trình được thiết kế để đảm bảo mã hóa máy tính thực hiện theo cái mà chúng đã được thiết kế để làm, và không thực hiện bất cứ thứ gì không mong muốn. Đây là một pha quan trọng trong quá trình phát triển hệ thống, giúp cho người xây dựng hệ thống và khách hàng thấy được hệ thống mới đã đáp ứng yêu cầu đặt ra hay chưa. 1.1.2. Mục đích của kiểm thử phần mềm. - Tìm ra nhiều lỗi bằng việc đưa ra các dòng thời gian. - Chứng minh được sản phẩm hoàn thành có những chức năng hay ứng dụng giống với bản đặc tả yêu cầu. - Tạo ra các test case có chất lượng cao, thực thi hiệu quả… - Một số lỗi cơ bản trong kiểm thử phần mềm như: lỗi ngay từ khi phân tích yêu cầu, lỗi từ bản đặc tả hệ thống, lỗi trong code, lỗi hệ thống và nguồn tài nguyên hệ thống, lỗi trong vấn đề phần mềm, phần cứng… 1.1.3. Các phương pháp kiểm thử. - Kiểm thử tĩnh( Static testing): Là phương pháp thử phần mềm đòi hỏi phải duyệt lại các yêu cầu và các đặc tả bằng tay, thông qua việc sử dụng giấy, bút để kiểm tra logic, lần từng chi tiết mà không cần chạy chương trình. Kiểu kiểm thử này thường được sử dụng bởi chuyên viên thiết kế người mà viết mã lệnh một mình. Kiểm thử tĩnh cũng có thể được tự động hóa. Nó sẽ thực hiện kiểm tra toàn bộ bao gồm các chương trình được phân tích bởi một trình thông dịch hoặc biên dịch mà xác nhận tính hợp lệ về cú pháp của chương trình. - Kiểm thử động(Dynamic testing): Là phương pháp kiểm thử thông qua việc dùng máy chạy chương trình để điều tra trạng thái tác động của chương trình. Đó là kiểm thử dựa trê các ca kiểm thử xác định bằng sự thực hiện của đối tượng kiểm thử hay 6 Nghiên cứu Unit Testing trong C# với NUnit và Demo chạy các chương trình. Kiểm thử động là kiểm tra cách thức hoạt động của mã lệnh, tức là kiểm tra sự phản ứng vật lý từ hệ thống tới các biến luôn thay đổi theo thời gian. Trong kiểm thử động, phần mềm phải thực sự được biên dịch và chạy. Kiểm thử động thực sự bao gồm làm việc với phần mề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. Các phương pháp kiểm thử động gồm có kiểm thử mức đơn vị – 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. 1.1.4. Các chiến lược kiểm thử. Trong chiến lược kiểm thử, chúng ta có ba chiến lược kiểm thử hay dùng nhất là: kiểm thử hộp đen, kiểm thử hộp trắng, và kiểm thử hộp xám. 1.1.4.1. Kiểm thử hộp đen – Black box. Một trong những chiến lược kiểm thử quan trọng là kiểm thử hộp đen, hướng dữ liệu, hay hướng vào ra. Kiểm thử hộp đen xem chương trình như là một “hộp đen”. Mục đích của bạn là hoàn toàn không quan tâm về cách cư xử và cấu trúc bên trong của chương trình. Thay vào đó, tập trung vào tìm cac trường hợp mà chương trình không thực hiện theo các đặc tả của nó. Theo hướng tiếp cận này, dữ liệu kiểm tra được lấy từ các đặc tả. Các phương pháp kiểm thử hộp đen • Phân lớp tương đương – Equivalence partitioning. • Phân tích giá trị biên – Boundary values analysis. • Kiểm thử mọi cặp – All pairs testing. • Kiểm thử dựa trên mô hinh – Model based testing. • Kiểm thử thăm dò – Exploratory testing • Kiểm thử dựa trên đặc tả - Specification base testing. Kiểm thử dựa trên đặc tả tập trung vào kiểm tra tính thiết thực của phần mềm theo những yêu cầu thích hợp. Do đó, kiểm thử viên nhập dữ liệu vào, và chỉ thấy dữ liệu ra 7 Nghiên cứu Unit Testing trong C# với NUnit và Demo từ đối tượng kiểm thử. Mức kiểm thử này thường xuyên yêu cầu các ca kiểm thử triệt để được cung cấp cho kiểm thử viên mà khi đó có thể xác minh là đối với dữ liệu đầu vào đã cho giá trị đầu ra(hay cách thức hoạt động) có giống với giá trị mong muốn đã được xác định trong ca kiểm thử đó hay không. Kiểm thử dựa trên đặc tả là cần thiết, nhưng không đủ để ngăn chặn những rủi ro chắc chắn. Ưu, nhược điểm Kiểm thử hộp đen không có mối liên quan nào tới mã lệnh và kiểm thử viên chỉ rất đơn giản tam niệm là: một mã lệnh phải có lỗi. Sử dụng nguyên tắc “Hãy đòi hỏi và bạn sẽ được nhận”, những kiểm thử viên hộp đen tìm ra lõi mà những lập trình viên không tìm ra. Nhưng, người ta nói kiểm thử hộp đen “giống như là đi trong bóng tối mà không có đèn vậy”, bởi vì kiểm thử viên không biết các phần mềm được kiểm tra thực sự được xây dựng như thế nào. Đó là lý do mà có nhiều trường hợp mà một kiểm thử viên hộp đen viết rất nhiều ca kiểm thử để kiểm tra một thứ gì đó mà đáng lẽ có thể chỉ cần kiểm tra bằng 1 ca kiểm thử duy nhất, và hoặc một số phần của chương trình không được kiểm tra chút nào. Do vậy, kiểm thử hộp đen có ưu điểm của “một sự đánh giá khách quan”, mặt khác nó lại có nhược điểm của “thăm dò mù”. 1.1.4.2. Kiểm thử hộp trắng – White box. Là một chiến lược kiểm thử khác, trái ngược hoàn toàn với kiểm thử hộp đen, kiểm thử hộp trắng hay kiểm thử hướng logic cho phép bạn khảo sát cấu trúc bên trong của chương trình. Chiến lược này xuất phát từ dữ liệu kiểm thử bằng sự kiểm thử tính logic của chương trình. Kiểm thử viên sẽ truy cập vào cấu trúc dữ liệu và giải thuật bên trong chương trình (và cả mã lệnh thực hiện chúng). Các phương pháp kiểm thử hộp trắng. • Kiểm thử giao diện lậ trình ứng dụng – API testing(application programming interface): là phương pháp kiểm thử của ứng dụng sử dụng các API công khai và riêng tư. 8 Nghiên cứu Unit Testing trong C# với NUnit và Demo • Bao phủ mã lệnh – Code coverage: tạo các kiểm tra để đáp ứng một số tiểu chuẩn về bao phủ mã lệnh. • Các phương pháp gán lỗi – Fault injection. • Các phương pháp kiểm thử hoán chuyển – Mutation testing methods. • Kiểm thử tĩnh - Static testing: kiểm thử hợp trắng bao gồm mọi kiểm thử tĩnh. Phương pháp kiểm thử hộp trắng cũng có thể được sử dụng để đánh giá sự hoàn thành của một bộ kiểm thử mà được tạo cùng với các phương pháp kiểm thử hộp đen. Điều này cho phép các nhóm phần mềm khảo sát các phần của 1 hệ thống ít khi được kiểm tra và đảm bảo rằng những điểm chức năng quan trọng nhất đã được kiểm tra. 1.1.4.3. Kiểm thử hộp xám – Gray box testing Kiểm thử hộp xám đòi hỏi phải có sự truy cập tới cấu trúc dữ liệu và giải thuật bên trong cho những mục đích thiết kế các ca kiểm thử, nhưng là kiểm thử ở mức người sử dụng hay mức hộp đen. Việc thao tác tới dữ liệu đầu vào và định dạng dữ liệu đầu ra là không rõ ràng, giống như một chiếc “hộp xám”, bởi vì đầu vào và đầu ra rõ ràng là ở bên ngoài “hộp đen” mà chúng ta vẫn gọi về hệ thống được kiểm tra. Sự khác biệt này đặc biệt quan trọng khi quản lý kiểm thử tích hợp – Intergartion testing giữa 2 modun mã lệnh được viết bởi hai chuyên viên thiết kế khác nhau, trong đó chỉ giao diện là được đưa ra để kiểm thử. Kiểm thử hộp xám có thể cũng bao gồm cả thiết kế đối chiếu để quyết định, ví dụ, giá trị biên hay thông báo lỗi. 1.1.5. Các cấp độ kiểm thử trong kiểm thử phần mềm. Kiểm thử phần mềm gồm có các cấp độ: Kiểm thử đơn vị, Kiểm thử tích hợp, Kiểm thử hệ thống và Kiểm thử chấp nhận sản phẩm. 9 Nghiên cứu Unit Testing trong C# với NUnit và Demo Hình 1: Sơ đồ các cấp độ kiểm thử. 1.1.5.1. Kiểm thử đơn vị - Unit test. a. Định nghĩa Một đơn vị là một thành phần phần mềm nhỏ nhất mà ta có thể kiểm thử được. Ví dụ, các hàm (Function), thủ tục (Procedure), lớp (Class) hay phương thức (Method) đều có thể được xem là Unit. Vì Unit được chọn để kiểm tra thường có kích thước nhỏ và chức năng hoạt động đơn giản, chúng ta không khó khăn gì trong việc tổ chức kiểm thử, ghi nhận và phân tích kết quả kiểm thử. Nếu phát hiện lỗi, việc xác định nguyên nhân và khắc phục cũng tương đối dễ dàng vì chỉ khoanh vùng trong một đơn thể Unit đang kiểm tra. Một nguyên lý đúc kết từ thực tiễn: thời gian tốn cho Unit Test sẽ được đền bù bằng việc tiết kiệm rất nhiều thời gian, chi phí cho việc kiểm thử và sửa lỗi ở các mức kiểm thử sau đó. Unit Test thường do lập trình viên thực hiện. Công đoạn này cần được thực hiện càng sớm càng tốt trong giai đoạn viết code và xuyên suốt chu kỳ phát triển phần mềm. 10 [...]... theo 2 bư c: - X c định c c lớp tương đương 26 Nghiên c u Unit Testing trong C# với NUnit và Demo - X c định c c ca kiểm thử b X c định c c lớp tương đương C c lớp tương đương đư c x c định bằng bằng c ch lấy mỗi trạng thái đầu vào (thường là 1 c u hay 1 c m từ trong đ c tả) và phân chia nó thành 2 hay nhiều nhóm Mẫu liệt kê c c lớp tương đương: Điều kiện đầu vào C c lớp tương đương hợp C c lớp tương... c c vấn đề tiềm ẩn hay lỗi kỹ thuật - Ứng dụng c a Unit test: kiểm tra đư c tất c c c hàm, thủ t c, sự kiện, thu c tính; kiểm tra c c trạng thái và ràng bu c của đối tượng ở m c sâu hơn, nơi mà không thể truy c p đư c; kiểm tra đư c c c quá trình và c c khung làm vi c( work flow) 1.1.8 M c đích - Đảm bảo thông tin xử lý và xuất ra là chính x c 18 Nghiên c u Unit Testing trong C# với NUnit và Demo - Trong. .. kiểm thử chương trình c a chính họ Quy t c 4: Kiểm tra thấu đáo mọi kết quả c a mỗi kiểm tra Quy t c 5: C c ca kiểm thử phải đư c viết cho c c trạng thái đầu vào không hợp lệ và không mong muốn, c ng như cho c c đầu vào hợp lệ và mong muốn 17 Nghiên c u Unit Testing trong C# với NUnit và Demo Quy t c 6: Khảo sát 1 chương trình để xem liệu chương trình c th c hiện c i mà nó c n th c hiện chỉ là 1 phần,... tập con c c trạng thái đầu vào, c lẽ bạn sẽ chọn ra một tập tùy hứng c c điều kiện, điều này c thể dẫn tới vi c kiểm thử không c hiệu quả Đồ thị nguyên nhân – kết quả hỗ trợ trong vi c lựa chọn một c ch c hệ thống tập c c ca kiểm thử c hiệu quả cao Nó c t c động c lợi ảnh hưởng tới vi c chỉ ra tình trạng chưa đầy đủ và nhập nhằng trong đ c tả Nó cung c p c c ch biểu diễn chính x c cho c c điều... ta chỉ quan tâm đến c c trách nhiệm c a chúng c đư c th c hiện đúng hay không Tuy nhiên trong c c dự án phần mềm ph c tạp thì Unit Test không c n là quy trình riêng lẻ, nhiều đối tượng (đơn vị chương trình) không làm vi c đ c lập 21 Nghiên c u Unit Testing trong C# với NUnit và Demo mà tương t c với c c đối tượng kh c như kết nối mạng, c sở dữ liệu hay dịch vụ web Như vậy c ng vi c kiểm nghiệm c ... lỗi ổ c ng… - C c đối tượng c c c tính chất và hành vi ph c tạp, c c trạng thái luôn thay đổi và c c quan hệ chặt chẽ với nhiều đối tượng kh c - C c đối tượng vận hành chậm chạp C ng vi c kiểm tra hiện hành không liên quan đến thao t c xử lý đối tượng này 23 Nghiên c u Unit Testing trong C# với NUnit và Demo - Đối tượng th c liên quan đến giao diện tương t c người dùng Không người dùng nào c thể.. .Nghiên c u Unit Testing trong C# với NUnit và Demo Thông thường, Unit Test đòi hỏi kiểm thử viên c kiến th c về thiết kế và code c a chương trình b M c đích - Đảm bảo thông tin đư c xử lý và xuất ra là chính x c - Trong mối tương quan với dữ liệu nhập và chứa năng c a Unit - Đòi hỏi tất c c c nhánh bên trong phải đư c kiểm tra phát hiện nhánh sinh lỗi (nhánh đó thường là c u lệnh đư c th c thi trong. .. đến Unit chỉ thật sự 11 Nghiên c u Unit Testing trong C# với NUnit và Demo đư c kiểm tra đầy đủ khi c c Unit tích hợp với nhau trong khi th c hiện Integration Test Trừ một số ít ngoại lệ, Integration Test chỉ nên th c hiện trên những Unit đã đư c kiểm tra c n thận trư c đó bằng Unit Test, và tất c c c lỗi m c Unit đã đư c sửa chữa Một số người hiểu sai rằng Unit một khi đã qua giai đoạn Unit Test với. .. thiết kế nhưng chưa tồn tại dưới dạng mã, ho c c c module chưa sẵn sàng cung c p c c dữ liệu c n thiết để vận hành Unit Test - C c đối tượng th c có c c thủ t c chưa x c định rõ ràng về mặt nội dung (mới chỉ mô tả trong interface) nhưng đư c đòi hỏi sử dụng gấp trong c c Unit Test - C c đối tượng th c rất khó c i đặt (thí dụ đối tượng xử lý c c trạng thái c a server) - C c đối tượng th c xử lý một tình... EasyMock, jMock, Nmock… C c phần mềm này cung c p nhiều API cho phép xây dựng Mock Object và c c kho dữ liệu giả dễ dàng hơn, c ng như kiểm tra tự động c c số liệu trong Unit Test Nói chung, vi c thiết kế Mock Object gồm 3 bư c chính sau đây: - Đưa ra interface để mô tả đối tượng Tất c c c tính chất và thủ t c quan trọng c n kiểm tra phải đư c mô tả trong interface - Viết nội dung cho đối tượng th c dựa . ta c thể kiểm tra đư c. Vì vậy, c c hàm(function), thủ t c (Proceduce), c c lớp (Class) ho c c c phương th c (Method) đều c thể coi là một Unit. Vì Unit đư c chọn để kiểm thử thường c kích. thuật. c. Yêu c u. - Muốn làm đư c Unit testing thì phải chuẩn bị trư c c c ca kiểm thử (Test case) ho c c c kịch bản kiểm thử (Test Script) trong đó phải ghi rõ dữ liệu nhập vào, c c bư c th c hiện. tr c nội tại c a chương trình chẳng hạn c c câu lệnh và nhánh bên trong. • Kiểm thử ch c năng (Functional Test): Tương tự Black Box Test, kiểm thử ch c năng chỉ chú trọng đến ch c năng c a chương