Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 13 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
13
Dung lượng
3,03 MB
Nội dung
I ĐẶT VẤN ĐỀ 1.1 Lý chọn đề tài: Trong q trình giảng dạy mơn Tin học, thân trăn trở làm để học sinh đạt kết tốt học lập trình Đặc biệt mũi nhọn học sinh giỏi Trong nội dung bồi dưỡng học sinh giỏi, nội dung quan trọng bồi dưỡng nguồn tập Bao gồm tập cho trình học tập làm đề luyện tập kiểm tra đội tuyển Khi có tập phần quan trọng đánh giá làm học sinh đạt yêu cầu hay khơng Mà để đánh giá với tập ta cần số lượng Test định Trong trình bồi dưỡng, đưa tập cho em rèn luyện thường tạo số lượng test phù hợp để đánh giá Các em kiểm tra chương trình hay sai, hiệu hay khơng Qua tơi nhận thấy học sinh hứng thú kiểm tra thuật tốn hay sai Nhưng làm để tạo test chất lượng, kiểm tra hết trường hợp thuật tốn khơng đơn giản Một số chương trình tập huấn Sở vài tài liệu khác dừng mức biết cách tạo test case ngẫu nhiên chưa sâu vào cách tạo test case chất lượng Từ lý trên, qua q trình giảng dạy tơi xin trình bày sáng kiến “Kinh nghiệm tạo test cho tập lập trình” Nhằm góp thêm chút kinh nghiệm cho bạn đồng nghiệp tham khảo áp dụng vào cơng việc 1.2 Mục đích nghiên cứu - Nghiên cứu cách tạo test chất lượng cho tập lập trình 1.3 Đối tượng khách thể nghiên cứu: - Đối tượng: Test tốn lập trình Tin học - Khách thể: Học sinh lớp 11 12 trường THPT Vĩnh Định 1.4 Phương pháp nghiên cứu: - Phân tích tổng kết kinh nghiệm 1.5 Nhiệm vụ nghiên cứu: - Nghiên cứu cách tạo test - Nghiên cứu kỹ thuật tạo test chất lượng 1.6 Phạm vi kế hoạch nghiên cứu: - Phạm vi nghiên cứu: Chương trình bồi dưỡng HSG – Phần tập kiểm tra - Kế hoạch nghiên cứu: Đợt 1: từ tháng năm 2013 đến tháng năm 2014 Đợt 2: từ tháng năm 2015 đến tháng năm 2016 Đợt 3: từ tháng năm 2017 đến tháng năm 2018 Đợt 4: từ tháng năm 2018 đến tháng 10 năm 2018 Trang | II NỘI DUNG SÁNG KIẾN 2.1 Cơ sở lý luận 2.1.1 Bài tập lập trình Bài tập lập trình tập sử dụng hầu hết kỳ thi HSG Tin học cấp Nội dung yêu cầu học sinh giải vấn đề cách viết chương trình máy tính để giải Các tập lập trình sử dụng kỳ thi đa dạng, thuộc nhiều chủ đề khác Từ yêu cầu đánh giá kỹ viết chương trình đơn giản đánh giá tư việc giải vấn đề phức tạp 2.1.2 Bộ test chấm Sau học sinh viết chương trình để giải tập lập trình máy, giám khảo tiến hành đánh giá cho điểm chương trình viết học sinh Chương trình học sinh thực với test chấm Một test chấm bao gồm nhiều test Mỗi test chấm bao gồm file liệu vào file liệu đáp án Một số tốn đa nghiệm có thêm chương trình check cho test Một test chấm tốt test đánh giá hết trường hợp vấn đề cần giải quyết, đánh giá chương trình học sinh có giải vấn đề đặt tập hay không Từ giúp cho điểm để phân loại thí sinh 2.2 Thực trạng tại: 2.2.1 Thuận lợi Trong năm học vừa qua, ban giám hiệu nhà trường thường xuyên quan tâm, tạo điều kiện cho Tổ tin học Nhà trường đầu tư phòng máy với khoảng 20 máy phòng Đây yếu tố thuận lợi, giúp cho thầy trò trường THPT Vĩnh Định học tốt mơn lập trình Vì lập trình khơng thể thiếu cơng cụ máy tính Nguồn tập phong phú internet Có nhiều trang giải tập trực tuyến spoj, NTU, Codeforces… Đây điều kiện thuận lợi cho việc tìm kiếm nguồn tập Các tập lập trình chấm phần mềm Themis Bộ GD-ĐT sử dụng kỳ thi Nên thuận tiện cho giáo viên chấm Chỉ cần người đề chuẩn bị tốt test chấm 2.2.2 Khó khăn Các tập lập trình cần lượng Test định để kiểm tra tính đắn thuật toán Đặc biệt chuẩn bị nguồn tập cho q trình học làm đề ơn luyện thi cử cần phải có test chất lượng để kiểm tra.Và có tài liệu hướng dẫn người bắt đầu cách xây dựng test case chất lượng Một số chương trình tập huấn Sở vài tài liệu dừng mức giáo viên biết cách sử dụng tạo test ngẫu nhiên Mà test tạo ngẫu nhiên yếu khơng thể đáp ứng yêu cầu chấm Trang | 2.3 Giải pháp Giải pháp xây dựng file mẫu để tạo test sâu phân tích chương trình tạo input mạnh thơng qua ví dụ Từ giúp cho người đọc định hình cách xây dựng nhóm test chất lượng Trong sáng kiến kinh nghiệm năm học 2017-2018 tơi trình bày cách để có chương trình đúng, hợp lý để giải tập lập trình Dựa chương trình viết ta tiến hành tạo test Trong trình tạo test cho tập lập trình tơi thường tạo template sinh test Từ file mẫu tiến hành tạo test cho tập nhanh chóng Template sinh test viết Pascal: uses sysutils; const tenbai = 'Govaoday'; var itest : longint; folder, filevao, filera, r : ansistring; Procedure taothumuc( itest : longint); begin str(itest,r); while(length(r) < 3) r := '0' + r; folder := 'Test' + r; removedir(folder); createdir(folder); filevao := folder + '\' + tenbai + '.inp' ; filera := folder + '\' + tenbai + '.out' ; end; Procedure xuly; var begin assign(input, filevao); reset(input); assign(output, filera); rewrite(output); close(input); close(output); end; Procedure taoinput; var begin assign(output, filevao); rewrite(output); randomize; close(output); end; BEGIN for itest:=1 to 10 begin taothumuc(itest); taoinput; xuly; end; END Trang | Vịng for chương trình duyệt tạo số lượng test case theo yêu cầu Với itest chương trình tạo thư mục có phần hậu tố có số thứ tự itest Ví dụ itest = tạo thư mục Test001 (Tên thư mục bạn thay đổi tùy theo nhu cầu tạo test) Sau tạo thư mục gọi hai chương trình: Taoinput: Tạo file input Xuly: Giải tạo file output Ta cần lưu lại templates sử dụng cho tất tập muốn tạo test case Với tập muốn tạo test case ta cần: Tạo thư mục chứa test (Thường tên tập) Copy file template tạo test vào thư mục vừa tạo Sửa đổi tên tập, copy chương trình viết xác vào chương trình Xuly Điều chỉnh vịng for chương trình sửa đổi chương trình Taoinput để tạo test case Ưu điểm việc sử dụng template so với cách sử dụng phần mềm trung gian tạo test đơn giản, thao tác sửa đổi chương trình, biên dịch, chạy chương trình để tạo test thực hoàn toàn Pascal nên thuận tiện, dễ quản lý Tính chuẩn xác chương trình Xuly nhắc đến SKKN năm trước, phần tơi xin nói đến kinh nghiệm tạo test tơi cách sửa đổi chương trình taoinput để tạo test đủ tốt Để dễ hình dung tơi minh hoạ bước tạo test chất lượng cho tập sau: Bạn Mì năm học lớp chồi, bạn thích vui đùa với số, với chữ Bạn mì dùng máy tính Ba để gõ kí tự vào máy tính Ba bạn Mì giúp bạn lưu lại kí tự gõ vào tệp Xauhay.inp Thật tình cờ hơm Ba bạn Mì dạy anh chị 11 xâu đối xứng, nên ba bạn Mì có tập cho bạn sau: đếm xem tệp bạn Mì gõ có số đối xứng Dữ liệu Gồm nhiều dòng, dịng đoạn kí tự chữ cái, chữ số bạn Mì gõ Kết Ghi số lượng số đối xứng tìm vào tệp xauhay.out Ví dụ Xauhay.inp Xauhay.out abcBG343Mi121San3568vinanilk9 chaoban12 Giải thích: có số 343, 121 Ràng buộc: - Số dòng tối đa 100 - Mỗi dịng chứa tối đa 300 kí tự Trang | Để tạo test cho tốn tơi thường chia nhóm test khác nhau, nhóm test bao gồm số test để đánh giá chương trình mức độ định Sau số nhóm test tơi thường tạo 2.3.1 Các test nhỏ, test đặc biệt Các test dành cho trường hợp đặc biệt tốn, test nhỏ sinh tay Nhóm test quan trọng, cần suy nghĩ cẩn thận để xét hết trường hợp đặc biệt tốn Trong ta tự suy nghĩ trường hợp như: khơng có số đối xứng, số đối xứng có chữ số, xâu tồn số khơng đối xứng, xâu tồn số đối xứng, xâu gồm số đối xứng cách kí tự, xâu gồm số đối xứng cách xâu kí tự đối xứng, xâu ngẫu nhiên … Ví dụ 1: Ta sửa chương trình taoinput chương trình tương ứng cho trường hợp: Xâu gồm số đối xứng cách xâu kí tự đối xứng Chương trình chính: for itest:=1 to begin Chương trình tạo input: Procedure taoinput1; var s : ansistring; begin assign(output, filevao); rewrite(output); s := ‘121aba444ccc56765g90909hkjjkh’; write(s); close(output); end; Chạy chương trình tạo test Test001 Ví dụ 2: Trường hợp có xâu, gồm chữ đối xứng Chương trình chính: for itest:=2 to begin Chương trình tạo input: Procedure taoinput1; var s : ansistring; begin assign(output, filevao); rewrite(output); s := ‘abccbahhhakka’; write(s); close(output); end; Chạy chương trình tạo Test002 Ví dụ 3: Trường hợp có hai xâu hai dịng, xâu chứa tồn số đối xứng Chương trình chính: for itest:=3 to begin Chương trình tạo input: Procedure taoinput1; var s, r : ansistring; begin assign(output, filevao); rewrite(output); Trang | s := ‘123321’; r := ‘123456789987654321’; writeln(s); writeln(r); close(output); end; Chạy chương trình tạo Test003 Qua ba ví dụ ta hình dung cách sửa đổi chương trình chương trình Taoinput để tạo test case Trong ví dụ sau tơi xin trình bày cách sửa đổi chương trình Taoinput 2.3.2 Test cho trường hợp thuật tốn sai Các test tạo nhằm mục đích kiểm tra đánh giá sai lầm mà thuật tốn học sinh cịn mắc phải Một số sai lầm sai kiểu liệu, tham lam sai, sai giới hạn, đọc liệu thiếu, vòng lặp while sai kiểm tra điều kiện chưa hợp lý… Một số sai lầm đặc biệt học sinh cài đặt thuật toán ta tạo test case ngẫu nhiên không đánh giá hết Đôi sai lầm học sinh lại rơi vào trường hợp đặc biệt nhóm test nên cần xem xét cẩn thận tránh trùng lặp test Ví dụ 4: Trường hợp học sinh sai tách xâu, chuyển xâu số kiểm tra tính đối xứng Như kiểm tra xâu số có giá trị bé xấp xỉ 18*1018 Lúc ta tạo test chứa xâu số đối xứng từ 21 kí tự trở lên để bắt lỗi Procedure taoinput2; var s, r : ansistring; begin assign(output, filevao); rewrite(output); s := ‘123456789000987654321’; //Xâu 21 kí tự DX writeln(s); close(output); end; Ví dụ 5: Trường hợp học sinh sai lầm vòng lặp dẫn đến tách thiếu số cuối xâu Lúc test ta có xâu số đối xứng cuối Procedure taoinput2; var s, r : ansistring; begin assign(output, filevao); rewrite(output); s := ‘abc121cd1d4vinhdinh555’; writeln(s); close(output); end; Ví dụ 6: Trường hợp học sinh sai lầm đọc đề dẫn đến đọc xâu Khi test case có từ dịng trở lên, dịng trở có số đối xứng đáp án học sinh chắn sai Procedure taoinput2; var s, r : ansistring; begin assign(output, filevao); rewrite(output); s := ‘vinhdinh2507chaodonban444vetham123321’; r := ‘truongcu212bensong1111’; Trang | writeln(s); writeln(r); close(output); end; 2.3.3 Test ngẫu nhiên Một số tập ta khơng thể hình dung hết sai lầm mà học sinh mắc phải Như test hai giải pháp bỏ sót sai lầm học sinh Trường hợp thường sinh test ngẫu nhiên Để test ngẫu nhiên đủ độ mạnh cần thiết cần số lượng định vài test ngẫu nhiên chưa đủ Ví dụ tập SEQ198 NTUcoder, cách code phức tạp, sinh 260 test ngẫu nhiên Xem trang chấm thấy học sinh sai nhiều trường hợp khác với test ngẫu nhiên Ảnh sau vài trường hợp thế: Ví dụ 7: Với nhóm test ta tạo input khơng q 50 dịng, Mỗi dịng có độ dài khơng q 50 gồm kí tự tạo ngẫu nhiên Với kí tự xâu 70% ưu tiên tạo kí tự số cịn lại kí tự chữ - Số dòng input: Ta lấy ngẫu nhiên từ 10 đến 50 - Với dòng: Độ dài lấy ngẫu nhiên Len; ta duyệt từ đến Len để tạo kí tự cho dịng Lệnh chr(random(10)+48) trả kí tự số Procedure taoinput3; var i, j, len, m, x, y : longint; begin assign(output, filevao); rewrite(output); randomize; m := 10 + random(41); //So dong for i:=1 to m begin len := 40 + random(11); //Do dai dong i for j:=1 to len begin x := + random(10); if(x