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

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

Cổ nhân đã có câu “Hiền tài là nguyên khí của Quốc Gia”. Do vậy, cùng với “nâng cao dân trí” thì “bồi dưỡng nhân tài” được Bộ Giáo Dục xác định là nhiệm vụ trọng tâm, được triển khai đồng bộ ở các cấp học phổ thông trong cả nước. Theo nội dung chương 1 – Mục tiêu và nhiệm vụ của môn Tin học thì nhiệm vụ của bộ môn Tin học đã đượ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 hiện và bồi dưỡng HSG Tin học, cung cấp cho đất nước những nhân tài trong lĩnh vực công nghệ thông tin”.[1]

Trong các kì thi HSG môn Tin học của tỉnh Thanh Hóa nói riêng và các kì thi HSG Tin học nói chung, bài thi HSG môn Tin học thường được chấm bằng chương trình chấm tự động dựa trên các bộ Test chấm.

Do đó để nâng cao chất lượng bồi dưỡng HSG, trong quá trình dạy học tôi thường hướng dẫn cho học sinh làm bài tập và kiểm tra bằng các bộ Test, qua đó giúp học sinh rèn luyện kĩ năng làm bài, tự hoàn thiện dần năng lực bản 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 rất dễ trong việc tìm kiếm các bài tập, các đề thi có kèm theo đáp án từ trên mạng Internet, nhưng rất khó để tìm các bộ Test chấm. Trong khi đó, để tự xây dựng các bộ Test chấm cho từng bài tập là công việc rất khó khăn, tốn nhiều thời gian và 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 bộ Test chấm và mang lại hiệu quả nhất định, từ đó nâng cao chất lượng bồi dưỡng HSG môn Tin học trong nhà trường.

Từ những lí do trên, tôi mạnh dạn trình bày 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 HSG môn Tin học”.

 

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

Tài liệu đính kèm:

  • docskkn_su_dung_co_hieu_qua_tien_ich_sinh_test_tu_dong_vao_viec.doc
  • docBìa SKKN Dung tin 2019.doc
  • docDanh mục các đề tài đã được xếp loại.doc
  • docdanh mục tu viet tat.doc
  • docMục lục SKKN Dung 2019.doc
  • docTài liệu tham khảo SKKN Dung tin 2019.doc