Bước 2: Lập trỡnh kiểm định cỏc giai đoạn
- Đầu vào: Tờn giải thuật, số phần tử.
- Đầu ra: Số phần tử của cỏc trường hợp kiểm định. Mỗi trường hợp gồm: số phần tử, mảng vào (nhập hay tạo ngẫu nhiờn) và cho lưu file để làm đầu ra cho chương trỡnh cần kiểm định.
Giai đoạn 3: Thực hiện việc kiểm định
- Thực hiện việc kiểm định bằng cỏch cho chạy chương trỡnh cần kiểm định với cỏc trường hợp theo gợi ý trờn giao diện kiểm định.
- Đầu vào được lấy từ cỏc file chứa mảng đầu vào trờn giao diện kiểm định. - Cỏc mảng đầu ra được lưu file để kiểm tra.
Giai đoạn 4: Kiểm tra kết quả chương trỡnh kiểm định sắp xếp
- Cỏc file chứa cỏc thụng tin đầu ra được đưa vào giao diện kiểm định.
- Chương trỡnh kiểm định sẽ so sỏnh cỏc mảng đầu ra với cỏc mảng đầu vào tương ứng để kiểm tra xem chỳng cú đỳng đặc tả khụng.
CHƢƠNG 3
XÂY DỰNG ỨNG DỤNG KIỂM ĐỊNH 3.1. MỤC TIấU XÂY DỰNG KIỂM ĐỊNH
Ứng dụng được xõy dựng là một chương trỡnh cho phộp kiểm định kết quả thi của học sinh khi thi tin học. Chương trỡnh sẽ cú trỏch nhiệm kiểm tra kết quả bài làm và cho điểm rồi thụng bỏo cho hội đồng chấm thi biết.
Chương trỡnh thực hiện kiểm định hoàn toàn hộp đen, tức là khụng tỏc động bất kỳ điều gỡ đến bài làm của học sinh, chỉ thụng qua cỏc Testcase xõy dựng để kiểm tra sai sút của bài làm rồi đưa ra kết quả thống kờ thu được.
Chương trỡnh này giỳp cho người chấm thi giảm thiểu rất nhiều cỏc thao tỏc và thời gian, cụng sức. Cú thể thấy vớ dụ thống kờ sau:
Nếu cú 400 thớ sinh thi, mỗi đề thi cú 5 bài thỡ tổng cộng sẽ cú 2000 bài thi mà người chấm sẽ phải chấm. Nếu mỗi bài chấm mất 10 phỳt thỡ một người chấm phải tốn 336 giờ, với 5 người chấm thỡ mất 67,2 giờ tương ứng với 2,8 ngày đờm. Trong thực tế việc chấm thi diễn ra rất nhanh, chỉ chưa đầy 1h Chủ tịch hội đồng chấm thi đó phải cú toàn bộ kết quả của kỳ thi. Đú chớnh là việc ỏp dụng chấm thi bằng cỏch sử dụng chương trỡnh kiểm định với cỏc Testcase như chương trỡnh này.
Với vớ dụ trờn thỡ mỏy tớnh sẽ chỉ tốn chưa đầy 10 phỳt để xử lý cho ra kết quả và cũng chỉ cần một người duy nhất chấm là Chủ tịch hội đồng chấm thi. So với kết quả trờn thỡ hiệu quả gấp 33,6 lần và chớnh xỏc hơn rất nhiều.
Như vậy, mục tiờu của chương trỡnh này chớnh là:
- Kiểm tra bài thi của học sinh rồi đưa ra kết quả với độ chớnh xỏc cao, nhanh chúng, giỳp giảm thời gian, chi phớ, nhõn lực cho cụng tỏc chấm thi.
- Xõy dựng bộ Testcase cơ bản cho cỏc bài thi để phục vụ quỏ trỡnh kiểm định.
Nguyờn tắc xõy dựng chương trỡnh:
- Chương trỡnh tự động húa tới mức tối đa cho người sử dụng. - Tốc độ xử lý nhanh.
Chương trỡnh được xõy dựng bằng ngụn ngữ lập trỡnh Visual C++. Cơ sở dữ liệu của chương trỡnh hoàn toàn được lưu dưới dạng cỏc File văn bản thụng thường (text).
3.2. GIỚI THIỆU TỔNG QUAN PHẦN MỀM
Phần mềm được chia làm ba phần chớnh, mỗi phần cú nhiệm vụ riờng được thiết kế trờn cơ sở nhu cầu thực tế của việc chấm thi.
Lớp chương trỡnh thứ nhất: chớnh là cỏc bài thi của học sinh. Cỏc bài thi này cú nhiệm vụ duy nhất là đọc cỏc dữ liệu đầu vào sau đú xử lý và đưa ra dữ liệu kết quả vào file kết quả. Mỗi một học sinh sẽ là một thư mục, trong thư mục này sẽ cú cỏc thư mục con là cỏc bài thi.
Vớ dụ:
Lớp chương trỡnh thứ hai: Đõy là cỏc chương trỡnh kiểm định trực tiếp cỏc bài làm của học sinh qua việc chuyển cỏc Testcase xõy dựng vào đớch tương ứng rồi cho chạy bài làm của thớ sinh. Sau đú, tổng hợp dữ liệu đầu ra. Lớp chương trỡnh này thường của giỏo viờn tương ứng ra đề cỏc bài thi nờn đảm bảo độ chớnh xỏc, khỏch quan và đầy đủ trong cỏc Testcase. Với việc xõy dựng một ứng dụng hoàn chỉnh của
Nguyễn Văn A Bai 1 Bai 2 Bai 3 Bai 4 Nguyễn Văn B Bai 1 Bai 2 Bai 3 Bai 4 Hỡnh 3.1.
cụng đoạn chấm thi Olympic Tin học Toàn quốc nờn chỳng tụi đó xõy dựng lớp chương trỡnh này với Testcase của cỏc bài thi trong cỏc kỳ học sinh giỏi Tin học khỏc nhau trong và ngoài nước.
Lớp chương trỡnh thứ ba: Đõy là lớp ứng dụng hệ thống chấm thi. Chương trỡnh này cho phộp thực hiện việc chấm thi: dựa vào kết quả kiểm tra của lớp chương trỡnh thứ hai, sau đú đưa ra kết quả tổng hợp. Chương trỡnh chỉ cần đọc đầu vào là hai file chứa đường dẫn của bài thi học sinh và đường dẫn của chương trỡnh Testcase.
Hỡnh 3.2. Cỏc lớp chương trỡnh kiểm định
Chi tiết cỏc lớp ứng dụng này sẽ được trỡnh bày cụ thể tại phần sau đõy:
3.3. CÀI ĐẶT VÀ HƢỚNG DẪN SỬ DỤNG
Toàn bộ phần mềm chấm bài thi được lưu trong thư mục Testha gồm hai thư mục chớnh, đú là:
- Thư mục Data: chứa toàn bộ dữ liệu của chương trỡnh: . Bài làm của học sinh (Data\Bai lam Thi Sinh)
. Cỏc testcase do người chấm xõy dựng (Data\TestCases).
Lớp chƣơng trỡnh thứ ba Chương trỡnh chấm Lớp chƣơng trỡnh thứ hai Testcase 1 Testcase 2 Testcase 3 Testcase 4 Lớp chƣơng trỡnh thứ nhất Bài 1 Bài 2 Bài 3 Bài 4
- Thư mục Setup: Cài đặt và chạy chương trỡnh chấm thi.
3.3.1. Chỉ dẫn Chƣơng Trỡnh
Thư mục: Data\Bai lam Thi Sinh chứa cỏc bài làm của thớ sinh. Mỗi thớ sinh cất giữ bài làm của mỡnh trong một thư mục riờng.
Vớ dụ: Thớ sinh thứ nhất lưu cỏc bài làm của mỡnh trong thư mục: Data\Bai lam Thi
sinh\Thi sinh 1. Tương tự như vậy cho cỏc thớ sinh tiếp theo.
1. Quy ước đặt tờn cỏc bài thi: Cú 4 bài thi, quy ước tờn cỏc bài thi lần lượt là:
Bai_1, Bai_2, Bai_3, Bai_4.
2. Mỗi bài thi đều yờu cầu file dữ liệu vào và file dữ liệu ra. Tờn cỏc file này cú thể thay đổi tựy theo ý nghĩa của từng bài. Vớ dụ:
i. Bai_1: tờn file vào/ra là “data.inp” và “data.out” ii. Bai_2: tờn file vào/ra là “abc.inp” và “abc.out” iii. Bai_3: tờn file vào/ra là “hoa.inp” và “hoa.out” iv. Bai_4: tờn file vào/ra là “nhac.inp” và “nhac.out”
Thư mục Data\TestCase chứa 4 bộ test cho 4 bài tương ứng. Mỗi bài cú 6-7 test nhỏ. Quy ước tờn của cỏc test là “?data*.inp” và “data*.out”. Trong đú: kớ hiệu * thể hiện chỉ số Test, kớ hiệu „?‟ cho biết điểm của test đú. Nếu ta thống nhất tất cả cỏc test đều được 5 điểm thỡ ta cú quy tắc đặt tờn cho cỏc cặp test vào và ra tương ứng như sau: 5data1.inp data1.out 5data2.inp data2.out 5data3.inp data3.out 3.3.2. Cài đặt và sử dụng chƣơng trỡnh Cài đặt:
Phần mềm được cài đặt theo cỏc bước sau:
Testha được hai thư mục con là: Data và Setup: - Vào thư mục: Testha\Setup\setup.exe
- Sao chộp thư mục Data vào thư mục cài đặt trờn (C:\Program Files\ HopDen\Testha\)
- Tạo một shortcut của file: Testha.exe ra màn hỡnh.
Sử dụng chƣơng trỡnh
Chạy file Testha.exe để thực hiện chương trỡnh chấm thi, ta cú giao diện như sau:
Bước1: Đầu tiờn, nhập danh sỏch bài thi và danh sỏch cỏc testcase bằng cỏch bấm vào nỳt “nhập từ tệp” ở trờn, bờn dưới nỳt “Thờm Testcase” và chọn file:
Danh_sach_bai_thi.txt. Ta cú giao diện như sau:
Bước2: Nhập danh sỏch thớ sinh bằng cỏch bấm vào nỳt “Nhập từ file” bờn dưới nỳt
“Thờm Thớ sinh”, chọn file “Danh_sach_thi_sinh.txt”. Ta cũng cú thể thờm
từng thớ sinh bằng cỏch bấm nỳt “Thờm thớ sinh”.
Hỡnh 3.5. Giao diện nhập danh sỏch thớ sinh Hỡnh 3.4. Giao diện nhập bài thi và testcase
Bước 3:Bấm vào nỳt “Chấm bài” để mỏy thực hiện việc chấm bài thi cho thớ sinh.
Kết quả chấm thi được cung cấp cỏc thụng tin của từng thớ sinh, đú là:
- Họ tờn, Tổng điểm.
- Đỏnh giỏ cho mỗi bài thi với mỗi Testcase tương ứng.
Nếu hội đồng chấm thi muốn cú chi tiết đỏnh giỏ cho từng thớ sinh: nhấp chuột tại dũng chứa tờn thớ sinh đú, giao diện thụng tin kết quả cho mỗi bài thi như sau:
Hội đồng chấm thi cú thể in kết quả của thớ sinh bằng cỏch chọn nỳt “In bảng
điểm” để cú kết quả cuối cựng ra giấy và hoàn tất cụng việc chấm thi.
Ngoài những giao diện chớnh như đó nờu ở trờn, nếu trong quỏ trỡnh chấm thi, giỏm khảo cú nhu cầu nhập thờm thớ sinh, bài thi và cỏc testcase thỡ chọn nỳt “Thờm
bài thi”, “Thờm thớ sinh”, “Thờm Testcase” để cú giao diện nhập dữ liệu cho thớ sinh:
Và giao diện thờm Testcase cho từng bài thi như sau:
Hỡnh 3.7. Giao diện kết quả chi tiết
3.4. CHƢƠNG TRèNH DÙNG ĐỂ KIỂM ĐỊNH
Cỏc chương trỡnh được kiểm định như đó giới thiệu ở phần trước, đú chớnh là cỏc bài làm của học sinh trong kỳ thi.
Giả sử, trong kỳ thi học sinh giỏi Tin học Quốc gia mỗi đề thi cú 4 bài, cỏc bài được hội đồng chấm thi ra đề và xõy dựng bộ testcase kốm theo để kiểm định lại tớnh đỳng đắn của bài làm thớ sinh.
Để đơn giản hơn trong kiểm định và đảm bảo đỳng khớa cạnh của kiểm định hộp đen. Cỏc bài làm của học sinh được dịch sang dạng chương trỡnh chạy (EXE) nhưng cỏc chương trỡnh này được biờn dịch bởi Turbo Pascal 7.0 và chạy trờn mụi trường Dos.
Để đỳng với ý tưởng của cỏc kỳ thi học sinh giỏi Tin học, tỏc giả sử dụng đề thi gồm 4 bài với nội dung được trỡnh bày ở phần dưới đõy:
Miờu tả sơ qua về bốn chương trỡnh: cỏc chương trỡnh đều nhận File dữ liệu đầu vào là *.INP và cho file kết quả đầu ra khi đó được xử lý là *.OUT.
Miờu tả chi tiết như sau: (Đề bài và chương trỡnh được lấy từ [2])
Chương trỡnh 1: Chữ số cuối cựng khỏc 0
(Đề thi Tin học Quốc gia Ireland, 1994).
Tỡm chữ số cuối cựng khỏc 0 của n! với n trong khoảng 1..100
Dữ liệu nhập vào bao gồm:
- Tờn chương trỡnh: Bai_1.
- Dữ liệu đầu vào là file data.inpcú dạng như sau: n trong khoảng từ 1..100. Với n chớnh là giai thừa cần phõn tớch thành cỏc thừa số nguyờn tố để tỡm số chữ số khỏc 0 cuối cựng.
- Dữ liệu đầu ra data.out cú dạng:
n
Với m là số khỏc khụng cuối cựng của n!, hoặc kết quả ra sẽ bỏo lỗi nếu dữ liệu vào khụng hợp lệ theo đặc tả của bài toỏn.
- Dữ liệu kiểm định Testcase_Bai1 cú dạng:
Cỏc trƣờng hợp kiểm định 5data*.int data*. out
Dữ liệu hợp lệ 15 8
99 4
Cỏc giỏ trị biờn 1 1
100 4
Dữ liệu khụng hợp lệ -1 bỏo lỗi: “Input Error”
101 bỏo lỗi: “Input Error”
Cỏc Testcase sẽ bao gồm cỏc dữ liệu đầu vào và kết quả đầu ra theo mong muốn đạt được. Chương trỡnh kiểm định sẽ cú trỏch nhiệm kiểm tra kết quả đầu ra của chương trỡnh sau khi xử lý với kết quả mong muốn của Testcase.
Mó nguồn của chương trỡnh 1 như sau:
(*--- Tim chu so khac khong cuoi cung cua n! ---*)
uses crt;
function find(n: longint): longint;
var m: longint; {m – hieu so cac thua so 2 va thua so 5} i, k, c: longint;
begin {k – ket qua trung gian} k:= 1; m:=0; find:=k; if (n <= 1) then exit; d:=0; for i:=2 to n do begin Bảng 3.1. Testcase_Bài1
c:=i; while c mod 2 = 0 do begin m:= m+1; c:= c div 2; end; while c mod 5 = 0 do begin m:= m-1; c:= c div 5; end; k:=(k*(c mod 10)) mod 10; end; case (m mod 4) of 0: c:= 6; 1: c:= 2; 2: c:= 4; 3: c:= 8; end; find:=(k*c) mod 10; end; procedure run; var n: longint; begin writeln('---'); repeat
read(n);
if n = 0 then halt;
writeln(' find(',n,') = ',find(n));
until false;
end;
BEGIN
run;
END.
Chương trỡnh 2: abc – sắp theo chỉ dẫn
Cho xõu S gồm N ký tự tạo từ cỏc chữ cỏi „a‟..„z‟, ta gọi là xõu mẫu. Từ xõu mẫu S này người ta tạo ra N xõu thứ cấp bằng cỏch dịch xõu S qua trỏi i vị trớ theo dạng vũng trũn, tức là i ký tự đầu xõu lần lượt được chuyển về cuối xõu, i=0, 1,…N-1. Như vậy, xõu thứ cấp với i=0 sẽ trựng với xõu mẫu S. Giả sử, ta sắp tăng N xõu thu được theo trật tự từ điển. Hóy tỡm xõu thứ k trong dóy.
Dữ liệu nhập vào bao gồm:
- Tờn chương trỡnh: Bai_2
- Dữ liệu vào: Tệp văn bản abc.int cú cấu trỳc như sau:
- Dũng thứ nhất chứa hai số tự nhiờn N và k cỏch nhau bởi dấu cỏch, 6 N
30, 1 k N. Trong đú: N cho biết chiều dài xõu; S, k cho biết vị trớ của xõu thứ cấp trong dóy được sắp tăng theo thứ tự từ điển.
- Dũng thứ hai: xõu mẫu S.
- Dữ liệu ra: tệp văn bản abc.out gồm một dũng chứa xõu k trong dóy được sắp. - Dữ liệu kiểm định Testcase_Bai2 cú dạng:
Cỏc trƣờng hợp kiểm định abc.int abc.out lớp hợp lệ 19 7 afsdafdsasdwertdbvf dsasdwertdbvfafsdaf lớp DL khụng hợp lệ 3 5 cga
bỏo lỗi: “Input Error” 33 -4
adbghjfkrelwitnbacdfklhmnfscijklk
bỏo lỗi: “Input Error” Cỏc giỏ trị biờn hợp lệ 30 1 adnbghfdabetkqsbcdshdertfjkhng abetkqsbcdshdertfjkhngadnbghfd 6 6 dabdec ecdabd Cỏc giỏ trị biờn khụng hợp lệ 5 0 qdab
bỏo lỗi: “Input Error”
31 32 bỏo lỗi: “Input Error”
Mó nguồn của chương trỡnh 2:
(*---
ABC.PAS: Tim phan tu thu k ---*) program ABC; {$B-} uses crt; const MN = 501; nl = #13#10; {xuong dong} bl = #32; {dau cach} fn = 'abc.inp'; gn = 'abc.out'; type Bảng 3.2. Testcase_Bai2
MI = array[0..MN] of integer; MC = array[0..MN] of char; var f, g: text; s: MC; id: MI; n, k: integer; (*--- Doc du lieu:
n: chieu dai xau s,
k: vi tri xau thu cap trong day da sap ---*) procedure Doc; var i: integer; begin assign(f, fn); reset(f); readln(f, n, k);
for i:=1 to n do read(f, s[i]); close(f);
end;
(*--- So sanh 2 xau thu cap [i] va [j]. Sanh(i, j)
= 0: neu [i] = [j] = -1: neu [i] < [j] = 1 neu [i] > [j]
var k: integer;