SKKN Sử dụng có hiệu quả Tiện ích Sinh Test tự động vào việc xây dựng Bộ Test chấm nhằm nâng cao chất lượng bồi dưỡng học sinh giỏi môn Tin học 1 1 MỞ ĐẦU 1 1 Lí do chọn đề tài Cổ nhân đã có câu “Hiền[.]
1 MỞ ĐẦU 1.1 Lí chọn đề tài Cổ nhân có câu “Hiền tài ngun khí Quốc Gia” Do vậy, với “nâng cao dân trí” “bồi dưỡng nhân tài” Bộ Giáo Dục xác định nhiệm vụ trọng tâm, triển khai đồng cấp học phổ thông nước Theo nội dung chương – Mục tiêu nhiệm vụ mơn Tin học nhiệm vụ môn Tin học Bộ Giáo Dục xác định rõ: “Bộ môn Tin học phải đảm bảo chất lượng phổ cập, đồng thời phải có nhiệm vụ phát bồi dưỡng HSG Tin học, cung cấp cho đất nước nhân tài lĩnh vực công nghệ thông tin”.[1] Trong kì thi HSG mơn Tin học tỉnh Thanh Hóa nói riêng kì thi HSG Tin học nói chung, thi HSG mơn Tin học thường chấm chương trình chấm tự động dựa Test chấm Do để nâng cao chất lượng bồi dưỡng HSG, trình dạy học thường hướng dẫn cho học sinh làm tập kiểm tra Test, qua giúp học sinh rèn luyện kĩ làm bài, tự hoàn thiện dần lực thân đồng thời giúp tạo hứng thú học tập cho học sinh Thực tế, giáo viên dễ việc tìm kiếm tập, đề thi có kèm theo đáp án từ mạng Internet, khó để tìm Test chấm Trong đó, để tự xây dựng Test chấm cho tập công việc khó khăn, tốn nhiều thời gian cơng sức Do đó, tơi nghiên cứu, vận dụng Tiện ích sinh test tự động vào việc xây dựng Test chấm mang lại hiệu định, từ nâng cao chất lượng bồi dưỡng HSG môn Tin học nhà trường Từ lí trên, tơi mạnh dạn trình bày SKKN “Sử dụng có hiệu Tiện ích Sinh Test tự động vào việc xây dựng Bộ Test chấm nhằm nâng cao chất lượng bồi dưỡng HSG môn Tin học” 1.2 Mục đích nghiên cứu Đề tài “Sử dụng có hiệu Tiện ích sinh Test vào việc xây dựng Test chấm nhằm nâng cao chất lượng bồi dưỡng học sinh giỏi môn Tin học”, hướng tới mục đích: Tìm cách vận dụng linh hoạt Tiện ích sinh Test tự động vào việc xây dựng Test chấm tập lập trình, giúp cơng việc Tạo test chấm nhanh chóng hơn, hiệu hơn, từ phục vụ cho cơng tác bồi dưỡng đánh giá chất lượng đội tuyển HSG môn Tin học 1.3 Đối tượng nghiên cứu Phần mềm chấm thi tự động Themis, tiện ích hỗ trợ xây dựng test chấm Thạc sĩ Nguyễn Tô Sơn Ngôn ngữ lập trình tơi sử dụng q trình nghiên cứu, ứng dụng ngôn ngữ Pascal SangKienKinhNghiem.net 1.4 Phương pháp nghiên cứu Trong q trình nghiên cứu hồn thiện SKKN này, sử dụng phối kết hợp nhiều phương pháp: Phương pháp nghiên cứu tài liệu: Tôi tiến hành nghiên cứu nhiều tài liệu hướng dẫn sử dụng phần mềm Themis, hướng dẫn sử dụng Tiện ích sinh test tự động Ngồi tơi tham khảo thêm đề thi, đáp án, Test chấm đề thi học sinh giỏi sưu tầm từ nhiều nguồn khác Phương pháp thực nghiệm: Trên sở phát huy mặt làm được, rút kinh nghiệm mặt hạn chế, lần tiến hành sau tơi thường có cải tiến định, giúp công việc xây dựng Test chấm hiệu Phương pháp tổng kết: Từ trình nghiên cứu, thực nghiệm rút kinh nghiệm, tổng kết kinh nghiệm thân việc xây dựng test chấm cho nhanh, xác đem lại hiệu cao SangKienKinhNghiem.net NỘI DUNG 2.1 Cơ sở lí luận Theo nội dung chương – Mục tiêu nhiệm vụ mơn Tin học nhiệm vụ mơn Tin học Bộ Giáo Dục xác định rõ: “Bộ môn Tin học phải đảm bảo chất lượng phổ cập, đồng thời phải có nhiệm vụ phát bồi dưỡng HSG Tin học, cung cấp cho đất nước nhân tài lĩnh vực công nghệ thông tin”[1] Theo công văn Số: 2268/TB-SGDĐT cấu trúc đề thi HSG cấp tỉnh mơn văn hóa cấp THPT THCS ban hành ngày 19 tháng năm 2018 thì: Bài thi học sinh giỏi môn Tin học chấm chương trình chấm tự động (chạy test), có so sánh thời gian chạy chương trình thí sinh để đánh giá Chỉ xem xét văn chương trình điểm trường hợp đặc biệt Số test câu số điểm gấp đôi, ba,… số điểm test phải dần hướng tới tính hồn thiện tốn, liệu lớn dần, độ phức tạp tăng dần,… [2] 2.2 Thực trạng Xuất phát từ thực tế, kì thi HSG mơn Tin học thường chấm máy tính, sử dụng chương trình chấm tự động dựa Test Trong q trình tham gia bồi dưỡng HSG mơn Tin học nhận thấy: việc giáo viên sử dụng Test để chấm làm môn Tin học cho học sinh giải tập lập trình kiểm tra đánh giá chất lượng HSG việc làm cần thiết Việc làm không giúp giáo viên đánh giá khả làm học sinh, mà giúp học sinh biết cách phân tích đề, hồn thiện lực làm bài, tạo hứng thú học tập cho học sinh Trước đây, để tạo Test chấm thường phải làm theo cách thủ công, công việc thường vất vả, tốn nhiều thời gian công sức Do vậy, thực chấm làm cho học sinh khảo sát kiểm tra chất lượng HSG, việc làm khơng thường xun thân tơi ngại xây dựng Test chấm Cịn q trình học, hướng dẫn học sinh giải tập, chạy chương trình Sau kiểm tra chương trình Test có sẵn đề vài test có giá trị Input nhỏ, dễ nhìn thấy kết Ouput Khi chương trình làm học sinh có kết Output giống với Output xây dựng liền vội vàng kết luận làm học sinh Kết đánh giá làm học sinh chưa phản ảnh xác thuật tốn Do học sinh thường bị điểm trường hợp liệu có giá trị đặc biệt liệu có giá trị lớn Trong lần kiểm tra khảo sát chất lượng HSG lần lần tiến hành đầu năm 2018 -2019, kết làm học sinh sau: SangKienKinhNghiem.net Kì Thi khảo sát Lần Lần Họ tên Lê Thị Giang Điểm câu Điểm câu Điểm câu Điểm câu Điểm câu Tổng điểm 1.5/6 2.5/5 1.5/4 0.5/3 0/2 6/20 Vũ Văn Cường 2/6 2/5 3/4 2/3 1/2 10/20 Lê Thị Giang 2/6 3/4 2/4 0/3 0.5/2 7.5/20 Vũ Văn Cường 3/6 1/5 2/4 2/3 0/2 8/20 Kết thấp, thời điểm hai đề khảo sát thời khơng khó, đề vào dạng tơi hướng dẫn trước Nhưng làm học sinh chưa tối ưu, dẫn đến điểm vài test Từ kết hai lần thi khảo sát trên, nên q trình bồi dưỡng tơi ý cho học sinh kiểm tra làm Test chấm cách thường xuyên liên tục Để xây dựng Test chấm trăn trở nghiên cứu thực nhiều cách khác Từ tơi nhận cách vận dụng Tiện ích sinh Test tự động đem lại hiệu cao 2.3 Nội dung nghiên cứu đề tài 2.3.1 Thuật ngữ: Bộ Test chấm Bộ Test: gồm giá trị Input Output toán Bộ Test chấm hiểu thư mục mẹ, bên có nhiều thư mục (mỗi thư mục Test), bên thư mục có tệp: Input output tương ứng toán Bộ Test chấm sử dụng để đánh giá mức độ hoàn thiện làm học sinh, từ đánh giá cho điểm Trong trình bồi dưỡng đánh giá HSG trường, để kiểm tra đánh giá làm học sinh thường sử dụng phần mềm chấm thi tự động Themis (Hướng dẫn sử dụng phần mềm Themis link download lưu vào đĩa CD nộp kèm theo SKKN này) Để chấm phần mềm Themis, Test chấm yêu cầu phải xây dựng theo cấu trúc thư mục sau: Hình 1: Cấu trúc thư mục Test chấm theo yêu cầu phần mềm chấm tự động Themis SangKienKinhNghiem.net Vấn đề đặt làm để tạo thư mục Test chấm trên? Làm để tạo tệp Input, Output thư mục con, đảm bảo tệp thư mục có tên giống hệt nhau, khác phần nội dung bên trong? Dưới cách mà làm, cách (cách sử dụng Tiện ích) có nhiều ưu điểm vượt trội nên tơi sử dụng cách làm 2.3.2 Cách xây dựng test chấm thủ công (cách làm cũ) B1: Tự nhập liệu viết chương trình để tạo Input Test1 B2: Chạy chương trình code đáp án để sinh output tương ứng Test1 B3: Di chuyển tệp Input, output vào thư mục theo cấu trúc quy định (Hình 1) B4: Lặp lại bước trên, đủ số test theo mong muốn Với cách làm này, giả sử cần tạo Test chấm gồm 20 Test, giáo viên cần phải tạo 20 thư mục (Test 1, test 2, ) Theo cơng việc tạo tệp Input, chạy chương trình để sinh output tương ứng, di chuyển thư mục Input, Output vào thư mục Test1, test phải thực 20 lần Do vậy, hạn chế lớn cách làm giáo viên phải tốn nhiều thời gian, lặp lặp lại công việc tương tự nhàm chán, dễ gây nhầm lẫn Từ lí trên, tơi khơng cịn tạo Test chấm theo cách làm 2.3.3 Cách xây dựng test chấm nhờ sử dụng Tiện ích Sinh Test tự động a) Giới thiệu tổng quan Tiện ích sinh test tự động Tiện ích sinh Test tự động phần mềm xây dựng phát triển Thầy Nguyễn Tô Sơn – Giảng Viên trường Đại Học Sư Phạm Hà Nội Tiện ích cho phép người dùng tạo Test chấm theo thư mục phù hợp với phần mềm chấm điểm tự động Themis – T.S Lê Minh Hồng.[3] SangKienKinhNghiem.net Hình Giao diện Tiện ích sinh Test tự động – Thầy Nguyễn Tơ Sơn Hình 3: Hình ảnh test chấm sinh từ Tiện ích Chuẩn bị phần cứng phần mềm Một máy tính cài đặt Free Pascal cài đặt biến môi trường Path (xem thêm tại liệu tham khảo – cách cài đặt biến môi trường) Copy file sinh test mẫu tác giả tiện ích (file sinh file INP) code đáp án giáo viên (file từ file INP sinh file OUT vào thư mục với tiện ích Chúng ta dùng file INP OUT để chấm điểm chất lượng chương trình viết học sinh) Lưu ý: Tiện ích có giao diện Tiếng Việt, sử dụng miễn phí, khơng cần cài đặt Hướng dẫn sử dụng: gồm bước làm sau Bước 1: Tạo tệp code đáp án (tệp dùng để sinh file Output) Bước 2: Tạo tệp sinh Input (tệp dùng để sinh Input) cách sửa lại nội dung nằm phần try finally chương trình mẫu tác giả (tùy thuộc vào liệu đề bài, cần sửa lại chương trình cho phù hợp) // Chuong trinh Tao cac file Input cua Ban giam khao SangKienKinhNghiem.net {$MODE OBJFPC} program RandomTest; const Prefix = 'CONG.INP'; procedure GenTest(const FName: String); var f: Text; A, B, C, D: Integer; begin Randomize; assign(f, FName); rewrite(f); try A := Random(10000) + 1; B := Random(10000) + 1; C := Random(10000) + 1; D := Random(10000) + 1; WriteLn(f, A, ' ', B); WriteLn(f, C, ' ', D); finally close(f); end; end; procedure Gen09_AZ; var c: Char; begin for c := '1' to '1' GenTest(Prefix); end; begin Gen09_AZ; end Bước 3: Chạy chương trình tiện ích SangKienKinhNghiem.net Lúc máy tính tự động tạo thư mục Test chấm theo cấu trúc phù hợp với thư mục mà phần mềm Themis yêu cầu, tự sinh file Input file Output, đưa vào thư mục (Hướng dẫn sử dụng Tiện ích link download lưu vào đĩa CD nộp kèm SKKN này) b) Ưu điểm Tiện ích sinh Test tự động Ưu điểm lớn sử dụng Tiện ích vào việc xây dựng Test chấm giúp giáo viên tiết kiệm thời gian, công sức Giả sử cần tạo test chấm gồm 20 Test Thay phải lặp lặp lại công việc tạo thư mục Test, tạo tệp Input, chạy chương trình tạo tệp Output, di chuyển tệp Input tệp Output vào thư mục theo cấu trúc 20 lần nhờ sử dụng Tiện ích Sinh Test tự động, tơi khơng cần phải tạo thư mục mà cần chạy chương trình Tiện ích lần Tuy nhiên, để tạo test chấm hay, đánh giá tương đối xác mức độ hồn thiện làm học sinh, giáo viên cần vận dụng linh hoạt Tiện ích, đặc biệt bước thay đổi code nguồn tệp sinh Input Dưới kinh nghiệm việc sử dụng Tiện ích Sinh test tự động vào việc xây dựng Test chấm 2.3.4 Vận dụng linh hoạt tiện ích sinh Test tự động để xây dựng test chấm a) Cách làm chung B1: Viết code đáp án: Vì code sử dụng để sinh file output cho Test nên yêu cầu code phải đảm bảo xác, xét trường hợp input chứa liệu có giá trị đặc biệt, liệu có giá trị lớn theo yêu cầu toán B2: Tạo file sinh Input: Để tạo input đa dạng, có khả đánh giá tương đối mức độ hoàn thiện làm học sinh, không tạo file sinh Input, mà tùy theo yêu cầu đề thường tạo nhiều file sinh Input khác Ban đầu tơi tạo chương trình sinh Input với mục đính tạo test kiểm thử độ xác làm học sinh Bao gồm trường hợp biên, cực hạn trường hợp cho kết không tuân theo thuật giải, làm thay đổi đáng kể vài yếu tố liên quan đến thời gian, nhớ máy tính Theo kinh nghiệm tơi test dễ sai Tiếp theo tơi tạo chương trình sinh test với mục đích tạo ta test có khả kiểm tra sức chịu đựng chương trình Đây thường test có liệu lớn (tơi tạo liệu Input theo cấp độ tăng dần độ lớn) B3: Chạy file Setup tiện ích: nhập thơng số cho phù hợp để sinh input output tương ứng với trường hợp Sau kích chọn Run SangKienKinhNghiem.net Với cách làm kiểm sốt liệu input tốn, tơi ý tạo test đặc biệt để đánh giá sát lực phân tích đề, làm học sinh Đồng thời nhờ việc tự động hóa Tiện ích sinh test giúp giảm đáng kể thời gian tạo test chấm b) Một số ví dụ Ví dụ 1: Sinh Test cho tập SỐ LỚN THỨ NHÌ Tệp ‘SOTHUNHI.INP’ bao gồm: Dịng chứa số nguyên dương N ( N≤ 106) Dòng chứa dãy A gồm N số nguyên (|Ai| ≤ 109) Yêu cầu: Chỉ số nguyên âm lớn thứ nhì, khơng xuất dãy A Kết ghi vào tệp ‘SOTHUNHI.OUT’ Ví dụ: SOTHUNHI.INP SOTHUNHI.OUT -4 -3 -2 Bước 1: Viết code đáp án (code đáp án lưu vào đĩa CD nộp kèm theo SKKN này) Bước 2: Tạo file sinh Test Phân tích: Đối với tập VD1 trên, để xây dựng Test chấm có khả đánh giá tương đối mức độ hồn thiện thuật giải làm học sinh, ý tạo Test mà Input có liệu vào giới hạn cận dưới, giới hạn cận Input có giá trị đặc biệt Cụ thể Input có liệu số trường hợp sau: Dãy gồm phần tử có giá trị nguyên dương (Test1) Dãy gồm phần tử có giá trị nguyên âm (Test 2) Dãy gồm 106 phần tử giá trị phần tử lớn -106 (Test 12) Dãy gồm N phần tử, dãy có phần tử có giá trị bé -106, trị tuyệt đối khơng q 109 (Test 11) Cịn lại tạo Test ngẫu nhiên, với giá trị liệu tăng dần Thực hiện: Test 1: Input gồm số N = số nguyên dương {Khi số âm lớn thứ số -1; số âm lớn thứ nhì số -2 Nên Output cần đưa là: -2} Để tạo tệp sinh input trên, cần sửa lại code nguồn tác giả từ đoạn try đến đoạn finally sau: SangKienKinhNghiem.net try Writeln(f, ‘1’); write(f,’5’); Finally Sau lưu lại với tên R_SOTHUNHI_TEST1.PAS Test 2: Input gồm số N = số nguyên âm Đoạn lệnh sửa lại code nguồn tác giả (từ try đến đoạn finally) sau: Try Writeln(f, ‘1’); write(f,’-2’); Finally Test đến Test 5: Tạo test mà Input gồm số N ngẫu nhiên có giá trị từ đến 100; dãy N phần tử có giá trị nguyên từ -104 đến 104 Để tạo số N có giá trị ngẫu nhiên tơi sử dụng hàm Random, (chú ý phải khai báo thư viện chuẩn Crt có dịng lệnh Randomize bên trên) Do hàm Random(100) cho phép tạo số nguyên ngẫu nhiên có giá trị từ đến 100 nên để tạo số nguyên có giá trị từ đến 100 phải viết: 1+ Random(100-1) Tương tự, để tạo phần tử dãy có giá trị nguyên từ -104 đến 104 viết random(10000)- random(10000) Đoạn lệnh sửa lại chương trình code nguồn để Sinh Input sau: try N:=1+random(100-1); Writeln(f, N); For i:=1 to N begin k:=random(10000)- random(10000); write(f,k,' '); end; Finally Test đến test 8: Tạo test mà Input gồm số N ngẫu nhiên có giá trị từ 100 đến 1000; dãy N phần tử có giá trị nguyên từ -106 đến 106 Đoạn lệnh sửa lại chương trình code nguồn để Sinh Input sau: try N:=100+random(1000-100); Writeln(f, N); For i:=1 to N begin k:=random(1000000)-random(1000000); write(f,k,' '); 10 SangKienKinhNghiem.net end; finally Test 9: Tạo test có Input gồm số N = 104 dãy gồm 104 phần tử có 104 – phần tử đầu có giá trị tăng dần từ -104 đến -4; phần tử cuối – -2 -2 (số -2 xuất lần) {Khi Output cần đưa là: -3} try N:=10000; Writeln(f, N); For i:=-10000 to -4 write(f,i,' '); write(f,-2,' ',-2,' ',-2); finally Test 10: Tạo test có Input gồm số N = 105 dãy gồm 105 phần tử có 104 – phần tử đầu có giá trị giảm dần từ -2 đến -105 ; phần tử cuối – { Output cần đưa là: -100001} try N:=100000; Writeln(f, N); For i:=-2 downto -100000 write(f,i,' '); write(f,-2); finally Test 11: Tạo test có Input gồm số N = 106 dãy gồm 106 phần tử có giá trị giảm dần từ -1 đến -106 {Output cần đưa là: -1000002} try N:=1000000; Writeln(f, N); For i:=-1 downto -1000000 write(f,i,' '); Finally Test 12: Tạo test có Input gồm số N = 106 dãy gồm 106 phần tử có 106 – phần tử đầu có giá trị tăng dần từ -106 +3 đến -1 ; ba phần tử cuối -109, -107, -107 -19 ( cố tình chọn phần tử có giá trị nhỏ 106) {Output cần đưa là: -999999} try N:=1000000; Writeln(f, N); For i:=-1000000+3 to -1 write(f,i,' '); Write(f,-1000000000,' ',-10000000,' ',-10000000-19); Finally Sau thao tác lưu lại tệp với tên 11 SangKienKinhNghiem.net Bước 3: Chạy tiện ích Sinh test tự động, nhập thơng số tương ứng: Lúc này, tiện ích liên kết, sinh tệp Input từ file R_SOTHUNHI_TEST1.PAS sinh file output tương ứng từ tệp code đáp án SOTHUNHI.PAS mà tơi tạo trước Kết quả, tơi thu thư mục có tên Test1 bao gồm Input, Output sau: Lặp lại thao tác trên, thay đổi thơng số Tiện ích tơi thu Input, Output cho Test lại (Đề minh họa, đáp án, file sinh test test chấm hoàn chỉnh lưu vào đĩa CD nộp kèm theo SKKN này) 12 SangKienKinhNghiem.net Như vậy, với việc sửa lại đoạn ngắn code nguồn tác giả, chạy tiện ích tơi dễ dàng tạo Bộ test chấm hồn chỉnh, có nhiều Test có giá trị Input đặc biệt Test có giá trị ngẫu nhiên độ lớn độ phức tạp tăng dần Ví dụ 2: Sinh Test cho tập XÂU CON Cho xâu S độ dài n gồm kí tự in hoa ‘A’ đến ‘Z’ Hãy tìm xâu liên tiếp dài xâu S, cho ký tự tham gia vào xâu không k lần Yêu cầu: Chỉ độ dài xâu tìm vị trí ký tự thuộc xâu xâu S ban đầu Nếu có nhiều cách chọn xâu – xâu xâu S vị trí kí tự thuộc xâu S ban đầu Input: File XAUCON.INP: - Dòng chứa số nguyên n k (1 ≤ n ≤ 100 000, ≤ k ≤ n) - Dòng thứ hai chứa xâu S Output: File XAUCON.OUT dòng ghi hai số nguyên độ dài xâu vị trí ký tự xâu XAUCON.INP XAUCON.OUT 51 HELLO 31 Tương tự toán ví dụ 1, để thực tạo test chấm cho tập thực theo bước trên, để cập đến thao tác tạo file sinh test( B3), bước lại làm tương tự ví dụ Phân tích: Để tạo test chấm cho toán XÂU CON trên, xét số trường hợp liệu có giá trị Input cực tiểu, giá trị cực đại, giá trị đặc biệt: Trường hợp xâu gồm kí tự (test1) Trường hợp xâu gồm N kí tự (N bé) số nguyên K=1 (Test2) Trường hợp xâu gồm N kí tự (N bé) số nguyên K >1 (Test3) Trường hợp xâu gồm kí tự giống hệt nhau, k>1, k