intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Sáng kiến kinh nghiệm THPT: Ứng dụng một số kĩ thuật kiểm thử phần mềm trong giảng dạy lập trình cho học sinh giỏi môn Tin học trường THPT Trần Hưng Đạo

Chia sẻ: _ _ | Ngày: | Loại File: DOC | Số trang:30

21
lượt xem
8
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Mục đích nghiên cứu của đề tài "Ứng dụng một số kĩ thuật kiểm thử phần mềm trong giảng dạy lập trình cho học sinh giỏi môn Tin học trường THPT Trần Hưng Đạo" nhằm giúp kiểm tra phát hiện ra các lỗi nếu có của chương trình khi làm bài là việc rất quan trọng giúp học sinh hiểu ra các lỗi sai, từ đó có thể khắc phục, rút kinh nghiệm.

Chủ đề:
Lưu

Nội dung Text: Sáng kiến kinh nghiệm THPT: Ứng dụng một số kĩ thuật kiểm thử phần mềm trong giảng dạy lập trình cho học sinh giỏi môn Tin học trường THPT Trần Hưng Đạo

  1. CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự do – Hạnh phúc ĐƠN YÊU CẦU CÔNG NHẬN SÁNG KIẾN TÊN SÁNG KIẾN ỨNG DỤNG MỘT SỐ KĨ THUẬT KIỂM THỬ PHẦN MỀM TRONG GIẢNG DẠY LẬP TRÌNH CHO HỌC SINH GIỎI MÔN TIN HỌC TRƯỜNG THPT TRẦN HƯNG ĐẠO Tác giả: Lê Cao Duy – Giáo viên trường THPT Trần Hưng Đạo Ninh Bình, tháng 4 năm 2022
  2. MỤC LỤC 1.Tên sáng kiến, lĩnh vực áp dụng..........................................................................................3 2.Nội dung .............................................................................................................................3 3.Hiệu quả kinh tế xã hội dự kiến đạt được............................................................................9 4.Điều kiện và khả năng áp dụng...........................................................................................9 PHỤ LỤC.............................................................................................................................11 4.1 Kỹ thuật specification-based (Kiểm thử hộp đen)..................................................13 ......................................................................................................................................14 4.2 Kỹ thuật structure-based (Kiểm thử hộp trắng)......................................................16 4.3 Kiểm thử hộp xám..................................................................................................17 TÀI LIỆU THAM KHẢO....................................................................................................30 2
  3. CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập- Tự do – Hạnh phúc ĐƠN YÊU CẦU CÔNG NHẬN SÁNG KIẾN Kính gửi: Hội đồng sáng kiến Sở Giáo dục và Đào tạo Ninh Bình Tôi ghi tên dưới đây: Ngày Nơi công tác Trình độ Tỉ lệ (%) đóng tháng STT Họ và tên (hoặc nơi Chức vụ chuyên góp vào việc tạo năm thường trú) môn ra sáng kiến sinh Thạc sĩ Trường THPT 1 Lê Cao Duy 1987 Giáo Viên Công Nghệ 100% Trần Hưng Đạo Thông Tin 1. Tên sáng kiến, lĩnh vực áp dụng Là tác giả đề nghị xét công nhận sáng kiến: “ỨNG DỤNG MỘT SỐ KĨ THUẬT KIỂM THỬ PHẦN MỀM TRONG GIẢNG DẠY LẬP TRÌNH CHO HỌC SINH GIỎI MÔN TIN HỌC TRƯỜNG THPT TRẦN HƯNG ĐẠO” Lĩnh vực áp dụng sáng kiến: Lĩnh vực giáo dục – bộ môn tin học cấp THPT 2. Nội dung Hiện nay, trong quá trình dạy học lập trình trong chương trình tin học. Nhiệm vụ ra đề và chữa bài cho học sinh là một nhiệm vụ diễn ra thường xuyên. Việc kiểm tra đánh giá, chữa bài học sinh, giúp kiểm tra phát hiện ra các lỗi nếu có của chương trình khi làm bài là việc rất quan trọng giúp học sinh hiểu ra các lỗi sai, từ đó có thể khắc phục, rút kinh nghiệm. Khi giảng dạy các bài toán lập trình giáo viên ngoài giảng dạy về lý thuyết thì phần giao bài tập cho học sinh thực hiện là quá trình không thể thiếu để học sinh thực hành và vận dụng các kiến thức đã học để thực hiện các bài toán được giao. Khi giáo viên ra đề ngoài việc viết mã nguồn chương trình cho đề thì việc tạo các bộ test là một việc quan trọng giúp giáo viên kiểm tra chương 3
  4. trình, phát hiện ra các trường hợp mà chương trình học sinh có thể chưa xử lý, không xử lý được hoặc có thể thực hiện sai. Việc tạo bộ test hiện nay đa số dựa trên các kinh nghiệm của các thầy cô ra đề hoặc dựa trên các chương trình tạo test tự động, các tài liệu nói về vấn đề tạo test cho các bài lập trình rất ít hoặc có nói thì cũng chưa đề cập chi tiết đến cách tạo test sao cho hiệu quả. Việc chữa bài cho học sinh hiện nay giáo viên thường gặp 2 trường hợp chính: TH1: Bài làm biên dịch có lỗi cú pháp. TH2: Bài làm không có lỗi cú pháp. Đối với TH1 giáo viên sẽ dựa vào các thông báo lỗi để xử lý giúp cho học sinh làm bài, Với TH2 khi đó giáo viên sẽ kiểm tra chương trình thường bằng các test của đề bài có, hoặc dựa trên giải thuật của bài toán mà học sinh làm để phát hiện ra các trường hợp có thể sinh lỗi. Công việc chữa bài cho học sinh ngoài sử dụng các công cụ hỗ trợ của chương trình soạn thảo lập trình để tìm các lỗi cơ bản như cú pháp thì việc tìm các lỗi có thể mắc phải của học sinh như lỗi về cấu trúc dữ liệu hoặc giải thuật, vv… đa số giáo viên nào làm nhiều và gặp nhiều lỗi thì dễ phát hiện và có nhiều kinh nghiệm khắc phục, chữa lỗi. a. Giải pháp cũ thường làm - Chi tiết của giải pháp cũ * Đối với trường hợp tạo test cho đề: - Trường hợp này việc tạo các test cho bài làm, giáo viên thường sẽ dựa trên kinh nghiệm của bản thân để tạo ra các test sao cho có khả năng phát hiện lỗi là cao nhất. Do đó việc tạo test sao cho có hiệu quả là một vấn đề rất quan trọng và bức thiết. Đối với giáo viên mới ra trường hoặc ít kinh nghiệm tạo test thì việc tạo ra các test hiệu quả để phát hiện lỗi thường khó và có thể tạo test nhưng không hiệu quả, không phát hiện lỗi. - Việc tạo ra các test có thể không đánh giá được hết các trường hợp mà bài toán có thể xảy ra. Số lượng test có thể nhiều nhưng không bao phủ được 4
  5. toàn bộ bài toán (các test yếu). Người ra đề nếu không có trình độ cao và kinh nghiệm thì thường sẽ cho ra các test có đầu vào giống hoặc tương tự test mẫu mà không xử lý được các trường hợp đặc biệt mà bài toán có thể gặp. * Đối với trường hợp chữa bài cho học sinh. - Đối với các lỗi cú pháp thì thường được chương trình dịch thông báo các lỗi và giáo viên sẽ dựa vào đó để tìm ra lỗi cụ thể để khắc phục. - Đối với các lỗi khi chạy chương trình mới phát sinh thì thường khó hơn, một số lỗi có thể gặp như sau: Trường hợp khi học sinh lập trình mà bài làm của học sinh khi chạy chương trình có kết quả lúc đúng với output đề bài lúc không đúng với output đề bài, trong trường hợp này giáo viên thường thực hiện kiểm tra lại theo 2 cách: C1: kiểm tra học sinh có hiểu đúng input và output C2: kiểm tra giải thuật của học sinh có chính xác không, nếu giải thuật đúng thì thực hiện kiểm tra cách cài đặt thuật toán bằng ngôn ngữ lập trình để tìm lỗi. Trường hợp học sinh viết chạy trên phần mềm này thì được phần mềm khác thì không (viết trên Free pascal thì chạy mà Tubo pascal thì không), trường hợp này giáo viên thường phải kiểm tra lại các hàm mà học sinh viết trên Free pascal có được hỗ trợ trên Tubo pacal không, hoặc các thông số hệ thống như giới hạn bộ nhớ ,vv.. Hoặc trường hợp cùng một giải thuật, ngôn ngữ lập trình này thì chương trình chạy được ngôn ngữ khác thì không trường hợp này giáo viên phải kiểm tra lại các khai báo, các kiểu dữ liệu,vv.. mà các ngôn ngữ lập trình hỗ trợ. Trường hợp khi thực hiện chương trình mà xuất hiện các dữ liệu không mong muốn ở đầu ra khi đó giáo viên phải kiểm tra lại toàn bộ mã nguồn của chương trình xem xuất hiện dữ liệu dư thừa ở giai đoạn nào của chương trình. Đối với những trường hợp này hiện nay cũng thường phụ thuộc vào trình độ và kinh nghiệm của giáo viên để phát hiện và xử lý lỗi. 5
  6. - Ưu điểm: + đối với trường hợp tạo test cho đề, giáo viên có thể tạo ngay được một số test cho bài toán + Đối với việc chữa bài thì có thể xác định ngay được lỗi thường nằm ở đâu từ đó có thể tìm nhanh ra lỗi nếu có của chương trình. - Nhược điểm: Việc thực hiện kiểm tra chương trình trước nay thường dựa trên kinh nghiệm của các thầy cô giáo, thầy cô nào dạy nhiều gặp nhiều trường hợp lỗi thì có nhiều kinh nghiệm để phát hiện và sửa lỗi. Điều này dẫn đến có bài toán thì phát hiện được lỗi hoặc phát hiện lỗi sớm nhưng có bài toán thì phát hiện lỗi muộn hoặc không phát hiện được lỗi. Phát hiện lỗi trong trường hợp này giáo viên thường thực hiện như sau: - Cách 1: Đưa vào các test input khác nhau để kiểm tra bài toán - Cách 2: Đọc mã nguồn của học sinh để phát hiện ra các lỗi có thể phát sinh khi thực hiện chương trình để tìm ra lỗi. Với cách thứ nhất, vấn đề đặt ra là nếu test input không phủ hết được các trường hợp của bài toán, test không chính xác, hoặc test dư thừa thì có thể sẽ không phát hiện ra được các lỗi của bài toán hoặc có thể dẫn tới bài toán từ đúng trở thành sai. Với cách thứ 2, để đọc mã nguồn để phát hiện được ra lỗi có thể phát sinh thì đòi hỏi giáo viên phải hiểu xâu về lập trình hoặc có thể đã gặp các đó trong quá trình lập trình trước đó mới có thể phát hiện được lỗi. Do đó vấn đề đặt ra là: - Thứ nhất, có kĩ thuật hoặc phương pháp nào để thiết kế các test làm sao cho thật tối ưu và hiệu quả để kiểm tra các bài toán giúp giáo viên tạo nhanh các test nhưng test lại đủ mạnh để bao phủ được các trường hợp của bài toán. - Thứ 2, khi chữa bài cho học sinh ngoài việc sử dụng các test để kiểm tra thì có kĩ thuật hoặc phương pháp nào để giúp giáo viên và học sinh có thể tránh được lỗi hoặc nhanh chóng phát hiện ra lỗi có thể gặp phải b. Giải pháp mới cải tiến: 6
  7. - Mô tả bản chất của giải pháp mới. Trong quá trình học tập và công tác của bản thân, qua tìm hiểu về quy trình phát triển phần mềm hiện nay thì kiểm tra phần mềm (kiểm thử phần mềm) là một khâu quan trọng, nó chiếm tới 25% cho đến 50% tổng giá trị của phần mềm[2]. Do yêu cầu bức thiết đó nên quy trình kiểm thử phần mềm ngày càng được quan tâm và phát triển. Hiện nay, có rất nhiều phương pháp và kĩ thuật để tìm và phát hiện lỗi của phần mềm được phát triển và sử dụng. Công việc kiểm thử phần mềm ngày càng được quan tâm và phát triển, từ đó có rất nhiều công cụ và tài liệu nghiên cứu của các công ty và cá nhân phát triển phần mềm được nghiên cứu và phát triển, do đó cá nhân tôi đã tìm hiểu và vận dụng các kĩ thuật kiểm thử phần mềm vào trong các bài toán lập trình cho học sinh trung học phổ thông nhằm nâng cao chất lượng giảng dạy cho học sinh đặc biệt là học sinh giỏi. Kết quả tìm hiểu của giải pháp tôi xin trình bày trong phần “PHỤ LỤC” đi kèm của tài liệu này. - Tính mới, sáng tạo của giải pháp * Đối với học sinh + Tạo ra các bộ test mạnh giúp học sinh có thể tự bồi dưỡng kĩ năng lập trình từ đó tạo hứng thú, truyền cảm hứng sự đam mê cho học sinh trong hoạt động học tập. + Học sinh có thể tự kiểm tra chương trình của mình viết, khắc phục được các lỗi thường gặp, từ đó có thể tự nâng cao kiến thức và kĩ năng lập trình, tăng kinh nghiệm cho bản thân trong quá trình học. + Tăng cường khả năng làm vệc độc lập và khả năng làm việc nhóm giúp nâng cao kiến thức và kĩ năng cho học sinh. * Đối với giáo viên + Giáo viên thay đổi được cách kiểm tra chương trình, giáo viên mới giảng dạy cũng có thể kiểm tra chương trình một cách toàn diện. Việc tạo test trở nên đơn giản hơn, nhanh chóng hơn nhưng không làm giảm sự bao phủ của test đối với bài toán. 7
  8. + Phát hiện nhanh được các trường hợp có lỗi tránh được các lỗi có thể phát sinh trong lập trình hoặc thực thi chương trình từ đó làm giảm thời gian công sức của giáo viên trong việc chữa bài và ra đề cho học sinh + Có quy trình kiểm tra đầy đủ hoàn chỉnh tránh bỏ sót. Các quy trình, các bước thực hiện được dựa trên các tài liệu và nghiên cứu của các giảng viên và chuyên gia trong lĩnh vực công nghệ thông tin nói chung và công nghệ phần mềm nói riêng đã được áp dụng và triển khai ở các công ty công nghệ. + Giảm bớt thời gian chấm, kiểm tra chương trình của học sinh giúp nâng cao hiệu quả quá trình giảng dạy. Thông qua việc chấm và chữa bài cho học sinh giúp giáo viên nhanh chóng phát hiện ra các thiếu sót của học sinh từ đó có các hỗ trợ cho học sinh. Sau khi áp dụng đề tài vào quá trình dạy bồi dưỡng học sinh giỏi tại trường. Tôi đã kiểm tra và đánh giá chất lượng học sinh giỏi, kết quả các bài thi như sau: Điểm Điểm Điểm Điểm Tổng Kì thi Họ Tên câu 1 câu 2 câu 3 câu 4 Điểm Nguyễn Chọn HSG Lớp 5/6 4/5 2/5 0/4 11/20 Hữu Niên 12 Cấp Trường Văn Đình - lần 1 5/6 3/5 2/5 0/4 10/20 Quân Nguyễn Chọn HSG Lớp 6/6 5/5 4/5 2/5 17/20 Hữu Niên 12 Cấp Trường Văn Đình - lần 2 6/6 4/5 3/5 1/5 14/20 Quân Nguyễn 6/6 5/5 3.4/5 3/4 17.4/20 Chọn HSG Tỉnh Hữu Niên Lớp 12 Văn Đình 6/6 4/5 2.6/5 2/4 14.6/20 Quân So sánh kết quả giữa các bài thi trên dễ nhận thấy kết quả thi ở các lần thi sau học sinh có điểm cao hơn lần thi trước mặc dù đề có độ khó tăng dần. Đặc biệt học sinh có xu hướng lấy được trọn vẹn các điểm ở các bài có độ 8
  9. khó ở dạng trung bình khá. Do đó học sinh đã dần biết phân tích vận dụng các kiến thức và kĩ thuật lập trình thành thạo hơn, ít mắc lỗi hơn từ đó có thể lấy hết được các điểm của các bài, tránh bị mất điểm trong các trường hợp dữ liệu có giá trị đặc biệt. 3. Hiệu quả kinh tế xã hội dự kiến đạt được - Hiệu quả kinh tế: + Sáng kiến giúp học sinh và giáo viên phát hiện ra các lỗi sớm, làm giảm thời gian chữa bài giúp giáo viên có thể trang bị thêm các kiến thức mới. Ngoài ra còn giúp giáo viên và học sinh giảm thời gian kiểm tra chương trình, qua đó nâng cao trình độ của giáo viên và học sinh. + Tăng cường khả năng học và tự học tạo hứng thú cho học sinh. Từ đó góp phần hình thành các năng lực khác mà xã hội yêu cầu góp phần tạo nên những học sinh có đủ phẩm chất và năng lực mà chương trình giáo dục phổ thông mới đang hướng tới, qua đó giúp tạo ra các nguồn nhân lực chất lượng cao góp phần mang lại sự phát triển kinh tế cho đất nước. - Hiệu quả xã hội: Việc áp dụng sáng kiến giúp khả năng tự học tự tìm tòi của cả giáo viên và học sinh được nâng cao. Việc áp dụng giúp học sinh có thể tự bồi dưỡng kiến thức một cách chủ động hiệu quả, giáo viên thì không ngừng tự bồi dưỡng kiến thức và phương pháp dạy học. Chương trình tin học của khối THPT hiện nay được đánh giá là khá trừu tượng và khô khan vì vậy yêu cầu giáo viên không ngừng trau dồi kiến thức ở nhiều lĩnh vực, cách ra đề và kiểm tra lời giải là một trong những điểm quan trọng để tạo sự yêu thích tin học cho học sinh tránh sự nhàm chán và khó khăn trong quá trình học. Qua việc áp dụng sáng kiến cũng giúp giáo viên hiểu và trình bày nội dung lời giải một cách khoa học, có hệ thống tránh được việc chữa bài hoặc ra đề một cách chiếu lệ hình thức. 4. Điều kiện và khả năng áp dụng - Điều kiện áp dụng: 9
  10. + Thông qua việc áp dụng quy trình kiểm thử phần mềm vào quá trình ra đề và kiểm tra lời giải cho các bài toán lập trình cho giáo viên và học sinh sẽ tạo điều kiện cho giáo viên thuận lợi trong việc dạy học theo phương pháp tích cực. + Học sinh được trang bị kiến thức một cách tốt nhất để tự giải các bài tập là không khó khăn. - Khả năng áp dụng: + Sáng kiến: “Ứng Dụng Một Số Kĩ Thuật Kiểm Thử Phần Mềm Trong Giảng Dạy Lập Trình Cho Học Sinh Giỏi Môn Tin Học Trường THPT Trần Hưng Đạo” đã được triển khai tại trường THPT Trần Hưng Đạo. + Sáng kiến có khả năng áp dụng với đối tượng học sinh từ cấp THCS đến cấp THPT ở các trường thuộc các địa bàn khác nhau. - Danh sách giáo viên đã tham gia áp dụng sáng kiến lần đầu: TT Họ và Ngày Nơi công Chức Trình độ Nội dung tên tháng tác danh chuyên công việc năm sinh môn hỗ trợ Trường Thạc Sỹ Giảng dạy Lê Cao 08/04/198 Giáo 1 THPT Trần Công Nghệ môn tin Duy 7 viên Hưng Đạo Thông Tin học thpt Tôi xin cam đoan mọi thông tin nêu trên là đúng sự thật và hoàn toàn chịu trách nhiệm trước pháp luật về nội dung theo đơn đề nghị. Tôi xin chân thành cảm ơn! Ninh Bình, Ngày 28 tháng 04 năm 2022 XÁC NHẬN CỦA LÃNH ĐẠO ĐƠN VỊ Người nộp đơn CƠ SỞ Lê Cao Duy 10
  11. PHỤ LỤC I. Cơ Sở Lý Thuyết 1. Định nghĩa 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 đó [1]. Kiểm thử 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. Theo [2] kỹ thuật kiểm thử không chỉ giới hạn ở việc thực hiện một chương trình hoặc ứng dụng với mục đích đi tìm các lỗi phần mềm (bao gồm các lỗi và các thiếu sót) mà còn là một quá trình phê chuẩn và xác minh một chương trình máy tính - ứng dụng - sản phẩm nhằm:  Đáp ứng được mọi yêu cầu hướng dẫn khi thiết kế và phát triển phần mềm.  Thực hiện công việc đúng như kỳ vọng.  Có thể triển khai được với những đặc tính tương tự.  Đảm bảo được mọi nhu cầu của các bên liên quan. Tùy thuộc vào từng phương pháp, việc kiểm thử có thể được thực hiện bất cứ lúc nào trong quá trình phát triển phần mềm. Theo truyền thống thì các nỗ lực kiểm thử được tiến hành sau khi các yêu cầu được xác định và việc lập trình được hoàn tất nhưng trong Agile (là một tập hợp các phương pháp phát triển phần mềm linh hoạt dựa trên việc lặp đi lặp lại và gia tăng giá trị) thì việc kiểm thử được tiến hành liên tục trong suốt quá trình xây dựng phần mềm. Như vậy, mỗi một phương pháp kiểm thử bị chi phối theo một quy trình phát triển phần mềm nhất định [2]. 11
  12. 2. Phân loại kiểm thử phần mềm: Ta phân loại kiểm thử dựa vào các yếu tố: Chiến lược kiểm thử, phương pháp kiểm thử và kỹ thuật kiểm thử. [2] Dựa vào chiến lược kiểm thử ta có thể phân chia kiểm thử thành hai loại: kiểm thử thủ công và kiểm thử tự động. Theo phương pháp tiến hành kiểm thử ta chia kiểm thử làm hai loại: kiểm thử tĩnh và kiểm thử động. Dựa vào kỹ thuật kiểm thử ta có thể phân chia kiểm thử thành ba loại: Specification-based (thiết kế dựa trên đặc tả) hay kỹ thuật black-box (kỹ thuật hộp đen) Structure-based (thiết kế dựa trên cấu trúc) hay kỹ thuật white-box (kỹ thuật hộp trắng) Kỹ thuật kiểm thử hộp xám (Gray - box Testing). 3. Quy trình kiểm thử phần mềm: Quy trình kiểm thử phần mềm bao gồm các bước:  Lập kế hoạch kiểm tra  Thiết kế test case  Phát triển test script  Thực hiện test  Đánh giá kết quả test a) Lập kế hoạch : Nhằm chỉ định và mô tả các loại kiểm tra sẽ được triển khai và thực hiện. Kết quả của bước lập kế hoạch là bản tài liệu kế hoạch KTPM bao gồm nhiều chi tiết từ các loại kiểm tra, chiến lược kiểm tra, cho đến thời gian và phân định lực lượng kiểm tra viên. b) Thiết kế test: Nhằm chỉ định các test case và các bước kiểm tra chi tiết cho mỗi phiên PM. Giai đoạn thiết kế test là hết sức quan trọng, hết sức quan trọng, nó đảm bảo tất cả các tình huống kiểm tra hết tất cả các yêu cầu. Các bước thiết kế test:  Xác định và mô tả test case 12
  13.  Mô tả các bước chi tiết để kiểm tra  Xem xét và khảo sát độ bao phủ của việc kiểm tra  Xem xét test case và các bước kiểm tra c) Phát triển test script: Bước này thường không bắt, chỉ yêu cầu trong những trường hợp đặc thù cần thiết kế, tạo ra các test script có khả năng chạy trên máy tính giúp tự động hoá việc thực thi các bước kiểm tra đã định nghĩa ở các bước thiết kế test d) Thực hiện test: Mục đích thực hiện các bước kiểm tra đã thiết kế và ghi nhận kết quả e) Đánh giá test: Mục đích đánh giá toàn bộ quá trình kiểm tra bao gồm xem xét và đánh giá kết quả kiểm tra lỗi, chỉ định các yêu cầu thay đổi và tính toán số liệu liên quan, đến quá trình kiểm tra. 4. Kĩ thuật kiểm thử phần mềm Với kỹ thuật phù hợp, giáo viên với vai trò như một kiểm thử viên (tester) sẽ thiết kế được các trường hợp kiểm tra (test case) có hiệu quả cao. Quan trọng hơn cả, trước khi thiết kế test case, tester phải trả lời được hai câu hỏi sau: Kỹ thuật thiết kế test case nào là phù hợp nhất cho bài toán hay vấn đề đang cần giải quyết? Nên kết hợp những kỹ thuật thiết kế test case nào với nhau cho quá trình test hiện tại của chương trình? Để trả lời hai câu hỏi trên, chúng ta cần phải nắm được khái quát về những kỹ thuật đó. 4.1 Kỹ thuật specification-based (Kiểm thử hộp đen) 13
  14. Nhóm kỹ thuật specification-based chỉ tập trung kiểm thử những yếu tố bên ngoài của hạng mục kiểm thử. Chúng có thể là các đặc điểm kỹ thuật, thiết kế, cách vận hành bên ngoài,… Nhờ đó, tester có thể test chất lượng bên ngoài mà không làm hỏng cấu trúc bên trong phần mềm. Nhóm kỹ thuật này gồm có: a. Equivalence partitioning (phân vùng tương đương) Equivalence partitioning là kỹ thuật sẽ phân loại các input thành những phân vùng theo một logic nhất định. Từ đó, tester sẽ chọn một input từ mỗi phân vùng để thiết kế và thực thi test case. Nếu input đó hợp lệ hoặc không hợp lệ thì cả phân vùng cũng hợp lệ hoặc không hợp lệ. b. Boundary value analysis (phân tích giá trị biên) 14
  15. Boundary value analysis được dùng để phát hiện lỗi ở những boundary value (giá trị biên). Test case sẽ được thiết kế cùng với các boundary value của equivalence partitioning. Nếu input nằm trong boundary value thì test case là positive testing (kiểm thử tích cực). Ngược lại, nếu input nằm ngoài boundary value thì test case là negative testing (kiểm thử tiêu cực). Thông thường có thể kết hợp giữa phương pháp giá trị biên và phân vùng tương đương để tạo test. Ví dụ, nhập một số có giá trị trong khoảng từ 4 đến 10 thì ta có 2 giá trị biên là 4 và 10. Ba phân vùng là: (nhỏ hơn 4), (5  9), (lớn hơn10). Tương tự nhập một số có giá trị từ 10.000 đến 100.000 thì có 2 giá trị biên là 10.000 và 100.000 và ba phân vùng là: nhỏ hơn 10.000, từ 10.000 đến 100.000, lớn hơn 100.000. c. Decision table testing (kiểm thử bảng quyết định) Decision table là kỹ thuật kiểm thử giúp tester đánh giá output khi kết hợp các input với nhau. Bảng quyết định trình bày các điều kiện input cùng 15
  16. những hành động hay output tương ứng. Qua đó, bạn có thể xây dựng logic phần mềm dựa trên bảng quyết định. d. State transition testing (kiểm thử chuyển đổi trạng thái) Khi dùng kỹ thuật state transition, tester bắt buộc phân tích phần mềm theo một trình tự nhất định. Trình tự này là thứ tự chuyển đổi trạng thái của phần mềm trong sơ đồ chuyển đổi trạng thái. Kỹ thuật này được dùng để kiểm thử khả năng nhập, thoát và chuyển đổi trạng thái của phần mềm. e. Use case testing (kiểm thử trường hợp sử dụng) Kỹ thuật này dựa vào use case (trường hợp sử dụng). Use case mô tả sự tương tác giữa phần mềm và tác nhân khác như người dùng, hệ thống khác,… Do đó, test case được thiết kế dựa trên use case giúp test các yêu cầu nghiệp vụ, chức năng. 4.2 Kỹ thuật structure-based (Kiểm thử hộp trắng) Nhóm kỹ thuật structure-based giúp tester kiểm thử cấu trúc và cách vận hành bên trong của phần mềm. Cấu trúc phần mềm thường bao gồm code (mã), control flow (luồng điều khiển), data flow (luồng dữ liệu),… Lúc này, tester sẽ nạp các input để thực thi code và kiểm tra đối chiếu những output thu được. Vì có liên quan đến cấu trúc phần mềm nên tester phải có kiến thức lập trình. Phương pháp kiểm thử hộp trắng dựa trên: - Các câu lệnh (statement) - Đường dẫn (path) - Các điều kiện (condition) - Vòng lặp (loop) - Ngã rẽ (branch) Dưới đây là các kỹ thuật thiết kế test case thuộc nhóm structure-based: a. Statement testing (kiểm thử câu lệnh) Trong kỹ thuật statement testing, mọi câu lệnh trong cấu trúc code sẽ thực thi ít nhất một lần. Qua đó, tester có thể test được cách vận hành của toàn bộ source code (mã nguồn) phần mềm. Tuy nhiên, tester không thể kiểm thử điều kiện sai mà chỉ có thể thực thi các điều kiện đúng. 16
  17. b. Decision testing (kiểm thử quyết định) Decision testing sẽ thực thi, test những quyết định dựa trên decision result (kết quả quyết định). Để làm điều này, test case sẽ đi theo các control flow từ decision point (điểm quyết định). Decision testing giúp kiểm thử xem có câu lệnh không thể truy cập hay gây bất thường không. c. Condition testing (kiểm thử điều kiện) Condition testing được dùng để test các biểu thức Boolean có dạng True (đúng) hoặc False (sai). Mỗi biểu thức Boolean sẽ được thực thi ít nhất một lần bằng cả tham số True và False. Với kỹ thuật này, test case được thiết kế để những điều kiện Boolean có thể thực thi dễ dàng. d. Multiple condition testing (kiểm thử đa điều kiện) Mục đích của kỹ thuật này là kiểm thử mọi tổ hợp điều kiện có thể của quyết định. Công thức tính số tổ hợp này là 2 lũy thừa bậc N, với N là số biến điều kiện. Số lượng tổ hợp này cũng chính là số lượng test case mà bạn phải dùng. e. Path testing (kiểm thử lộ trình) Trong kỹ thuật này, tester sẽ test từng câu lệnh có trong source code để tìm lỗi. Việc này giúp xác định lỗi tiềm ẩn trong một đoạn code. Tuy nhiên, tester không nên áp dụng kỹ thuật path testing khi kiểm thử các phần mềm phức tạp. Với cấu trúc code phức tạp, số test case hay câu lệnh mà bạn phải kiểm thử là rất nhiều. 4.3 Kiểm thử hộp xám. Kiểm thử hộp xám liên quan đến hiểu biết về cấu trúc dữ liệu bên trong và các thuật toán cho mục đích của các bài kiểm thử thiết kế. Khi thực hiện những bài kiểm thử với User hoặc mức độ hộp đen, Tester không nhất thiết phải truy cập vào mã nguồn của phần mềm[2]. Ta có thể thao tác với dữ liệu đầu vào và định dạng đầu ra không xác định như hộp xám bởi vì đầu vào và đầu ra rõ ràng ở bên ngoài của "hộp đen" mà chúng được hệ thống gọi ra trong quá trình kiểm thử. Sự phân biệt này là đặc biệt quan trọng khi tiến hành kiểm thử tích hợp giữa hai Module được viết mã bởi hai nhà phát triển 17
  18. khác nhau, mà ở đó chỉ có các giao diện được bộc lộ ra để kiểm thử.Tuy nhiên, các kiểm thử mà yêu cầu thay thế một kho lưu trữ dữ liệu back-end như một cơ sở dữ liệu hoặc một tập tin đăng nhập không xác định như hộp xám, người dùng sẽ không thể thay đổi các kho lưu trữ dữ liệu trong khi sản phẩm vẫn đang hoạt động bình thường. Kiểm thử hộp xám cũng có thể bao gồm kỹ thuật đảo ngược để xác định đối tượng, giá trị biên hoặc các thông báo lỗi. II. Vận dụng một số kĩ thuật kiểm thử phần mềm vào bài toán cụ thể. Kiểm thử phần mềm hiện nay đã phát triển rất mạnh, đã có rất nhiều các tài liệu và phương pháp khác nhau để thực hiện cho các dự án phần mềm. Và mỗi phương pháp cũng có thể có các tên gọi khác nhau tuy có cùng phương thức hoạt động. Do đó trong phạm vi kiến thức của cá nhân tìm hiểu và đặc thù của các bài toán lập trình trong giảng dạy cấp phổ thông nên trong các bài toán dưới đây, tôi sẽ trình bày việc ứng dụng kiểm thử phần mềm vào 2 khía cạnh đã nêu ở phần trên đó là việc tạo test cho 1 bài toán sao cho mạnh, hiệu quả và việc kiểm tra mã nguồn bài toán để phát hiện lỗi. Đối với mỗi bài toán khác nhau ta có các phương pháp test khác nhau, không có công thức chung nào cả, với mỗi kĩ thuật thì do yêu cầu bài toán mà kiểm thử viên sẽ quyết định kĩ thuật nào là phù hợp. Tuy vậy dựa vào lý thuyết ở phần 3.1 ta có thể tạm chia thành 2 hướng lớn như sau: a. Nếu chỉ cần quan tâm có lỗi hay không(không cần biết lỗi do đâu) thì ta nên dùng kĩ thuật kiểm thử hộp đen (trường hợp này thường dùng cho chấm thi hoặc kiểm tra nhanh chương trình có đúng theo yêu cầu). Ta không cần biết mã nguồn như thế nào hay viết bằng ngôn ngữ gì hay có đoạn mã nào được viết mà không được sử dụng,vv... b. Nếu quan tâm tới lỗi chỗ nào và lỗi như thế nào thì nên dùng kĩ thuật kiểm thử hộp trắng, hoặc hộp xám (dùng trong quá trình học tập và ôn luyện). Việc áp dụng kĩ thuật này đòi hỏi người kiểm tra phải thông thạo về ngôn ngữ lập trình được viết và am hiểu về giải thuật lập trình. 18
  19. Đối với trường hợp kiểm tra mã nguồn của bài toán để phát hiện ra các lỗi tiềm ẩn của bài toán là một nhiệm vụ phức tạp đòi hỏi giáo viên phải có sự am hiểu xâu về ngôn ngữ lập trình mà chương trình sử dụng và nắm vững về cấu trúc dữ liệu giải thuật. Do đó với việc kiểm tra mã nguồn bài toán ta thường sẽ áp dụng kiểm thử hộp trắng và hộp xám để tìm và phát hiện lỗi. Quy trình sử dụng kiểm thử hộp trắng và hộp xám qua các tài liệu nghiên cứu thì đây là phương pháp kiểm thử khá phức tạp để thực hiện theo nhiều bước, tuy nhiên việc lập trình trong giảng dạy tin học cấp THPT thì các bài tập lập trình trong khi thi đấu và học tập thường có mã nguồn tương đối ngắn (trong 1 cuộc thi 1 bài thi lập trình thường chỉ kéo dài từ 2 đến 3 tiếng/bài) nên các nhân tôi sẽ không trình bày chi tiết các kĩ thuật kiểm thử hộp trắng mà chỉ đưa ra nội dung mà cá nhân đã tìm hiểu và vận dụng. 1. Bài toán Mật Khẩu a. Đề bài: Hiện nay, tình trạng ăn cắp thông tin cá nhân người dùng diễn ra rất thường xuyên. Do đó việc bảo vệ thông tin cá nhân luôn được các tổ chức và cá nhân quan tâm. Một trong những phương pháp bảo vệ thông tin hữu hiệu là đặt mật khẩu. Mật khẩu được coi là an toàn phải có từ 6 kí tự trở lên và có đủ 4 loại: Chữ cái Latinh in hoa [‘A’.. ‘Z’], chữ cái Latinh in thường [‘a’.. ‘z’], các kí tự đặc biệt như (!,@,#,$,%,...) và chữ số [‘0’.. ‘9’]. Ví dụ: Xâu ‘Tinhoc@019’ được coi là mật khẩu an toàn, còn xâu ‘hsgtin2019’ không phải là mật khẩu an toàn[4]. Yêu cầu: Cho một xâu S. Đếm xem có bao nhiêu xâu con gồm các kí tự liên tiếp trong xâu S để xâu con đó là một mật khẩu an toàn. Biết rằng các xâu con giống nhau hoàn toàn được coi là 1 cách. Dữ liệu vào: File PASSWORD.INP Gồm một dòng chứa xâu S có độ dài n kí tự (6 ≤ n ≤ 255). Dữ liệu ra: File PASSWORD.OUT ghi một số là số lượng mật khẩu an toàn tìm được. Yêu cầu thời gian chạy chương trình không quá 1s/test và bộ nhớ là 1Gb. 19
  20. b. Phân tích: * Vận Dụng Kiểm Thử Hộp Đen. Việc sinh test cho bài toán đầu tiên ta sẽ phân tích đề bài để xác định yêu cầu, cụ thể ở đây là bài toán cho xâu S với ràng buộc là chương trình thực hiện không quá 1s và bộ nhớ tố đa là 1Gb. Vận dụng kĩ thuật kiểm thử hộp đen vào bài toán ta thấy: - Trường hợp(TH) áp dụng kĩ thuật phân vùng tương đương thì bài toán này ta có thể chia thành 3 vùng tương đương như sau: vì S là xâu có độ dài n kí tự (6 ≤ n ≤ 255) nên ta có phân vùng 1 là n < 6, phân vùng 2 từ 6  255, phân vùng 3 là các số lớn hơn 255. Với n < 6 ta thấy đây là chuối kí tự nên chuỗi nhỏ nhất là chuỗi rỗng nên ở đây ta phải phân vùng thành 0 < n < 6 Do đó ta có thể tạo được 3 test cho 3 phân vùng này để kiểm tra là S = 4 kí tự (n255) - Áp dụng kĩ thuật phân tích giá trị biên với 3 phân vùng tương đương như ở trên ta có tương ứng được 3 giá trị biên như sau: n = 6 và n = 255 và n = 0. Do đó ta có thể tạo được 3 test cho giá trị biên để kiểm tra. Lưu ý giá trị biên chỉ sử dụng được cho phân vùng là các số liên tục như số nguyên hoặc số thực, còn đối với dải số không liên tục như liệt kê thì không áp dụng được vì không có mối liên hệ. Từ 2 kĩ thuật trên ta có thể tạo ra được 6 test để kiểm tra là:  Trường hợp: n255  Trường hợp: 6 < n < 255  Trường hơp: n=6  Trường hợp: n = 255  Trường hợp: n=0 - Kĩ thuật dùng bảng quyết định dùng kết hợp các input để đánh giá output nên ta nhận thấy giá trị n255 là 2 miền giá trị mà n không thỏa 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2