Sau đây là mô hình User Case thể hiện vai trò của các hệ thống tham gia khi sử dụng đặc tả IMS QTI :
Trong đó:
authoringTool: công cụ tạo bài thi.
itemBank: kho câu hỏi.
assessmentDeliverySystem: hệ thống phân phối bài thi.
learningSystem: hệ thống học tập
assessment: Bài thi chứa các câu hỏi.
assessmentItem: Câu hỏi
author: tác giả của đề thi (giáo viên).
itemBankManager: ngƣời quản lý các kho câu hỏi.
proctor: giám thị/ngƣời coi thi.
scorer: giám khảo.
tutor: giáo viên
candidate: thí sinh 3.4.1 Assessment:
Assessment là một cấu trúc mô tả bài thi (Test) trong đó chứa các câu hỏi (assessmentItem).
Cấu trúc assessment đƣợc mô tả qua User Case :
Hình 3. 2 Cấu trúc bài thi trong đặc tả IMS QTI
Trong đặc tả IMS QTI, tất cả các bài thi, bao gồm cả section và câu hỏi đều đƣợc lƣu trữ bằng XML.
Bài thi (assessment): Một bài thi có thể có nhiều section.
Section: Là một phần con của bài thi, cũng có thể hiểu nhƣ một chƣơng của bài học, trong đó chứa các câu hỏi.
Câu hỏi (assessmentItem): Là thành phần thấp nhất trong cấu trúc đề thi, đƣợc mô tả bởi đặc tả IMS QTI.
3.4.2 assessmentItem:
Câu hỏi theo đặc tả IMS QTI bao gồm nội dung của câu hỏi, câu trả lời của thí sinh và phản hồi (feedback) từ hệ thống.
Chƣơng 4: XÂY DỰNG MỘT SỐ DỊCH VỤ WEB TRONG HỆ THỐNG SÁT HẠCH TRẮC NGHIỆM THEO CHUẨN QTI VÀ
ĐO ĐẠC THÔNG SỐ CHẤT LƢỢNG DỊCH VỤ WEB
Trên cơ sở nghiên cứu kiến trúc dịch vụ web và nhận thấy rằng hiệu năng của hệ thống theo kiến trúc hƣớng dịch vụ phụ thuộc rất nhiều vào chất lƣợng các dịch vụ thành phần, việc đo lƣờng tham số, đánh giá chất lƣợng dịch vụ web là rất quan trọng. Chƣơng này trình bày việc xây dựng một số dịch vụ web có thể sử dụng trong hệ thống sát hạch trắc nghiệm bằng máy tính theo chuẩn IMS QTI và với mục tiêu nâng cao hiệu năng hệ thống tổng thể, chúng tôi sẽ thử nghiệm việc áp dụng mô hình chất lƣợng dịch vụ web, đo lƣờng tham số, đánh giá chất lƣợng dịch vụ cho một số dịch vụ đã tạo ra.
4.1 Xây dựng một số dịch vụ web cung cấp tiện ích phục vụ trắc nghiệm bằng máy tính theo chuẩn QTI bằng máy tính theo chuẩn QTI
4.1.1 Tạo câu hỏi trắc nghiệm theo chuẩn QTI dạng một lựa chọn
Mô tả : Ngƣời sử dụng muốn tạo câu hỏi trắc nghiệm theo chuẩn QTI dạng một
lựa chọn trong số 4 đáp án. Để thực hiện đƣợc công việc này, ngƣời sử dụng sẽ nhập nội dung của câu hỏi bao gồm các thông tin:
• Tiêu đề của câu hỏi • Nội dung của câu hỏi
• Đƣờng dẫn lƣu tập tin chứa câu hỏi sẽ tạo(VD: C:\KT\cau2.xml). • Lựa chọn thứ tự đáp án đúng trong 4 đáp án (1,2,3,4)
• Đáp án 1. • Đáp án 2. • Đáp án 3. • Đáp án 4.
Service sẽ thực hiện chuyển nội dung câu hỏi thành định dạng XML theo chuẩn QTI, lƣu lại theo đƣờng dẫn lƣu của ngƣời sử dụng chỉ định và báo cho ngƣời sử dụng biết là câu hỏi đã đƣợc tạo thành công hay chƣa.
Hàm của dịch vụ Web: Hàm CreateSimpleQuestion
public String CreateSimpleQuestion (String title,String sprompt, String fileXml,int correct, String ans1, String ans2, String ans3, String ans4)
4.1.2 Tạo câu hỏi trắc nghiệm theo chuẩn QTI dạng yes/no
Mô tả : Ngƣời sử dụng muốn tạo câu hỏi trắc nghiệm theo chuẩn QTI dạng yes/no.
Để thực hiện đƣợc công việc này, ngƣời sử dụng sẽ nhập nội dung của câu hỏi bao gồm các thông tin:
• Tiêu đề của câu hỏi
• Đƣờng dẫn lƣu tập tin chứa câu hỏi sẽ tạo (VD: C:\KT\cau2.xml). • Nội dung của câu hỏi
• Lựa chọn đáp án của câu hỏi (yes/no)
Service sẽ thực hiện chuyển nội dung câu hỏi thành định dạng XML theo chuẩn QTI, lƣu lại theo đƣờng dẫn của ngƣời sử dụng chỉ định và báo cho ngƣời sử dụng biết là câu hỏi đã đƣợc tạo thành công hay chƣa.
Hàm của dịch vụ Web: Hàm CreateYesNoQuestion
public String createYesNoQuestion(String title,String sprompt, String fileXml,String correct)
4.1.3 Tạo câu hỏi trắc nghiệm theo chuẩn QTI dạng nhập văn bản
Mô tả: Ngƣời sử dụng muốn tạo 1 câu hỏi dƣới dạng nhập văn bản theo chuẩn
QTI. Để thực hiện đƣợc công việc này, ngƣời sử dụng sẽ nhập nội dung của câu hỏi bao gồm các thông tin:
• Đƣờng dẫn lƣu tập tin chứa câu hỏi sẽ tạo (VD: C:\KT\cau1.xml). • Nội dung của câu hỏi
Service sẽ thực hiện chuyển nội dung câu hỏi thành định dạng XML theo chuẩn QTI, và lƣu lại theo vị trí ngƣời sử dụng chỉ định và báo cho ngƣời sử dụng biết là câu hỏi đã đƣợc tạo thành công hay chƣa.
Hàm của dịch vụ Web: Hàm createTextQuestion
public String createTextQuestion( String fileXml, String sprompt) 4.1.4 Kiểm tra phù hợp chuẩn QTI
Mô tả : Ngƣời sử dụng muốn kiểm tra một tập tin XML lƣu nội dung một câu hỏi
có phải đƣợc viết theo chuẩn QTI hay không. Để thực hiện đƣợc công việc này, ngƣời sử dụng sẽ nhập đƣờng dẫn tập tin XML lƣu nội dung của câu hỏi. Service sẽ báo cho ngƣời sử dụng biết là câu hỏi đó có theo chuẩn XML hay không? Nếu không theo chuẩn thì nó sẽ báo dạng lỗi chuẩn QTI của tập tin.
Hàm của dịch vụ Web: Hàm ValidateQti
public String validateQti(String xmlFile)
4.1.5 Hiển thị nội dung câu hỏi lƣu trong tập tin xml (Hƣớng phát triển)
Mô tả : Ngƣời sử dụng muốn hiển thị nội dung câu hỏi đã đƣợc đóng gói theo
chuẩn IMS QTI. Để thực hiện đƣợc công việc này, ngƣời sử dụng sẽ nhập đƣờng dẫn tập tin XML lƣu nội dung của câu hỏi hoặc gói câu hỏi theo chuẩn IMS QTI.
Input: Tập tin xml (lƣu các câu hỏi) và tập tin nén (lƣu các bài kiểm tra) theo chuẩn
QTI.
Output: Hiển thị nội dung các câu hỏi, các bài kiểm tra trên trang web
Hàm của dịch vụ Web: Hàm QtiEngine
4.1.6 Đóng gói câu hỏi theo chuẩn IMS QTI (Hƣớng phát triển)
Mô tả : Ngƣời sử dụng muốn đóng gói các câu hỏi theo chuẩn IMS QTI. Để thực
hiện đƣợc công việc này, ngƣời sử dụng sẽ nhập tên các tập tin xml chứa nội dung các câu hỏi theo chuẩn IMS QTI và các tập tin bổ trợ cho câu hỏi.
Input: tên các tập tin xml chứa nội dung các câu hỏi theo chuẩn IMS QTI và các
tệp tin bổ trợ theo câu hỏi.
Output:
Hệ thống sẽ tạo ra 1 file nén .zip có chứa các thông tin: • File imsmanifest.xml mô tả cho gói câu hỏi
• Các file xml đặc tả cho câu hỏi (item) • Các file meta-data dùng trong câu hỏi
• Các tệp bổ trợ (thƣờng là các tệp ảnh hay đa phƣơng tiện) do item yêu cầu. Tập tin nén .zip dạng này có thể đƣợc sử dụng cho các hệ thống khác nhau tuân theo chuẩn IMS QTI.
Hàm của dịch vụ Web: Hàm PackingQti
Hình 4. 1 Giao diện web service đã tạo
4.2 Xây dựng hệ thống sát hạch trắc nghiệm theo kiến trúc hƣớng dịch vụ
Xây dựng hệ thống sát hạch trắc nghiệm theo chuẩn QTI (Client) sử dụng các web service đã tạo bằng chƣơng trình eclipse.
Hình 4. 2 Giao diện trang web phía client sử dụng webservice đã tạo
4.3 Sử dụng công cụ soapUI để đo chất lƣợng Web Service 4.3.1 Giới thiệu công cụ soapUI 4.3.1 Giới thiệu công cụ soapUI
Chất lƣợng của dịch vụ (QoS) ngày càng quan trọng với sự tăng nhanh trong việc sử dụng và áp dụng web services. Hiện nay có nhiều công cụ và nhiều kỹ thuật cho việc đo và đánh giá QoS của Web services. Các công cụ này tạo điều kiện trong việc đo và phân tích QoS và đều hữu ích trong việc đánh giá chất lƣợng dịch vụ trong mạng thời gian thực.
Có thể kể đến một số công cụ nhƣ: soapUI; LoadRunner; Jmeter... tuy nhiên tôi đã lựa chọn công cụ soapUI chứ không phải các công cụ khác để đo một số thông số chất lƣợng web serivce mà tôi đã xây dựng ở giai đoạn phát triển và cả ở giai đoạn triển khai thử nghiệm trong thực tế Bởi vì các lý do sau:
- soapUI là một công cụ kiểm thử mã nguồn mở cho kiến trúc hƣớng dịch vụ SOA và kiểm thử web service. Nó đƣợc phát triển bởi SmartBear software và đƣợc cung cấp miễn phí dƣới giấy phép GNU LGPL.
- soapUI có khả năng nhanh chóng tạo các kiểm thử hiệu năng nâng cao và thực thi các chức năng một cách tự động.
- SoapUI cung cấp giao diện dễ sử dụng và khả năng thực hiện đa dạng các kiểm thử bằng việc cung cấp một số tính năng thƣơng mại. soapUI nhận đƣợc một số các giải thƣởng: ATI Automation Honors, 2009, InfoWorld Best of Open Source Software Award, 2008.
4.3.2 Điều kiện kiểm thử chất lƣợng Web Service
Máy tính thực hiện đo Web Service:
- Toshiba satelite : Chip Intel (R) Pentium (R) Dual CPU T2310 @1.46Ghz; Ram: 2GB; Hệ điều hành : Win 7 Ultimate;
- soapUI pro 5.1.2.
- Mạng internet FPT gói Mega You 8mbps Máy chủ dùng để triển khai Webservice:
- HP DL380: Chip Intel Xeon 3.0; Ram: 8GB; Hệ điều hành Window Server 2008; - apache Tomcat 7.
- Mạng internet đƣờng truyền leaseline Vietel 12mbps.
Để thực hiện đo chất lƣợng Web Service tôi tiến hành xây dựng 2 TestCase sau:
TestCase1: Trƣờng hợp tạo thành công các câu hỏi
Với các chức năng createSimpleChoice, createTextQuestion, createYesNoQuestion, validateQti, dữ liệu đƣợc gửi lên là hợp lệ.
- Với createSimpleChoice, Nội dung SOAP/Xml-RPC Data (Test Request) : - <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/enve lope/" xmlns:def="http://DefaultNamespace"> <soapenv:Header/> <soapenv:Body> <def:createSimpleChoice> <def:title>question1</def:title>
<def:sprompt>Bộ nhớ trong của máy tính gồm có mấy thành phần? </def:sprompt> <def:fileXml>question1.xml</def:fileXml> <def:correct>2</def:correct> <def:ans1>1</def:ans1> <def:ans2>2</def:ans2> <def:ans3>3</def:ans3> <def:ans4>4</def:ans4> </def:createSimpleChoice> </soapenv:Body> </soapenv:Envelope>
- Với createTextQuestion, Nội dung SOAP/Xml-RPC Data (Test Request) :
- Với createYesNoQuestion, Nội dung SOAP/Xml-RPC Data (Test Request) :
- Với ValidateQuestion, Nội dung SOAP/Xml-RPC Data (Test Request) :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/env elope/" xmlns:def="http://DefaultNamespace"> <soapenv:Header/> <soapenv:Body> <def:createTextQuestion> <def:fileXml>textquestion.xml</def:fileXml>
<def:sprompt>Trình bày sơ đồ cấu trúc của một máy tính </def:sprompt> </def:createTextQuestion> </soapenv:Body> </soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/enve lope/" xmlns:def="http://DefaultNamespace"> <soapenv:Header/> <soapenv:Body> <def:createYesNoQuestion>
<def:title>câu hỏi YesNo</def:title> <def:sprompt>Sơ đồ cấu trúc của một máy tính gồm có 5 thành phần đúng hay sai?</def:sprompt> <def:fileXml>yesno.xml</def:fileXml> <def:correct>yes</def:correct> </def:createYesNoQuestion> </soapenv:Body> </soapenv:Envelope>
TestCase 2: Trƣờng hợp không tạo thành công các câu hỏi
Với các chức năng createSimpleChoice, createTextQuestion,
createYesNoQuestion, validateQti, dữ liệu đƣợc gửi lên là không đúng nên không thể tạo thành công các câu hỏi, lỗi tạo câu hỏi ở đây đều là đƣờng dẫn lƣu tập tin xml của câu hỏi không đúng (không tồn tại thƣ mục ERROR).
- Với createSimpleChoice, Nội dung SOAP/Xml-RPC Data (Test Request) :
- Với createTextQuestion, Nội dung SOAP/Xml-RPC Data (Test Request) :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/e nvelope/" xmlns:def="http://DefaultNamespace"> <soapenv:Header/> <soapenv:Body> <def:validateQti> <def:xmlFile>question1.xml</def:xmlFile> </def:validateQti> </soapenv:Body> </soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelo pe/" xmlns:def="http://DefaultNamespace"> <soapenv:Header/> <soapenv:Body> <def:createSimpleChoice> <def:title>question1</def:title>
<def:sprompt>Trong sơ đồ cấu trúc của máy tính, Bộ nhớ trong gồm có mấy thành phần?</def:sprompt> <def:fileXml>C:/ERROR/question1.xml</def:fileXml> <def:correct>2</def:correct> <def:ans1>1</def:ans1> <def:ans2>2</def:ans2> <def:ans3>3</def:ans3> <def:ans4>4</def:ans4> </def:createSimpleChoice> </soapenv:Body> </soapenv:Envelope>
- Với createYesNoQuestion, Nội dung SOAP/Xml-RPC Data (Test Request) :
- Với validateQti, Nội dung SOAP/Xml-RPC Data (Test Request) :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/enve lope/" xmlns:def="http://DefaultNamespace"> <soapenv:Header/> <soapenv:Body> <def:createYesNoQuestion>
<def:title>câu hỏi YesNo</def:title> <def:sprompt>Sơ đồ cấu trúc của máy tính gồm có 5 thành phần, đúng hay sai?</def:sprompt> <def:fileXml>C:/ERROR/yesno.xml</def:fileXml> <def:correct>yes</def:correct> </def:createYesNoQuestion> </soapenv:Body> </soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap /envelope/" xmlns:def="http://DefaultNamespace"> <soapenv:Header/> <soapenv:Body> <def:createTextQuestion> <def:fileXml>C:/ERROR/textquestion.xml</def:fi leXml>
<def:sprompt>Trình bày sơ đồ cấu trúc của một máy tính </def:sprompt>
</def:createTextQuestion> </soapenv:Body>
4.3.3Kiểm thử chức năng (Function Test)
Với TestCase 1, kết quả trả về là:
createSimpleChoiceReturn: Thành Công
createTextQuestionReturn:Thành Công
createYesNoReturn:Thành Công
validateQtiReturn: File Theo chuan QTI
Thời gian trả về của TestCase1 là: 354ms
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/ envelope/" xmlns:def="http://DefaultNamespace"> <soapenv:Header/> <soapenv:Body> <def:validateQti> <def:xmlFile>C:/ERROR/question1.xml</def:xmlFil e> </def:validateQti> </soapenv:Body> </soapenv:Envelope>
Với TestCase2, kết quả trả về là:
createSimpleChoiceReturn: Có lỗi tạo File
createTextQuestionReturn: Có lỗi tạo File
createYesNoReturn:Có lỗi tạo File
validateQtiReturn: File Not Found
Hình 4. 4 Kết quả kiểm thử tải của TestCase 2
Thời gian trả về của TestCase2 là: 380ms
Nhƣ vậy là Web Service đã thực hiện đƣợc đúng nhƣ chức năng đã thiết kế. 4.3.4 Kiểm thử tải (Load Test)
soapUI cung cấp các chiến lƣợc kiểm thử tải khác nhau nhƣ:
Strategy - Simple: TestCase thực hiện với độ trễ có thể cấu hình đƣợc.
Strategy - Variance: TestCase thực hiện nhiều thay đổi số lƣợng các thread theo thời gian.
Strategy- Burst: TestCase thực hiện trong"bursts".
Strategy - Thread: TestCase thực hiện với một số lƣợng thread cố định có thể thay đổi đƣợc.
Fixed-Rate: thực hiện một TestCase ở một tỉ lệ cố định.
Trong luận văn của mình, tôi sẽ tiến hành kiểm thử tải theo chiến lƣợc Strategy- Simple vì chiến lƣợc Simple là hoàn hảo với kiểm thử cơ bản. Sử dụng nó để kiểm tra hiệu suất cơ bản của web service và xác thực rằng các vấn đề về khóa nguồn tài nguyên hoặc không có luồng. Gia tăng số lƣợng các threads khi bạn muốn thực hiện
kiểm thử tải phức tạp hơn hoặc sử dụng chiến lƣợc cho kiểm thử ngâm với thời gian thực hiện lâu hơn.
Tiến hành kiểm thử tải với các Web Services đã xây dựng đƣợc triển khai tại server của Trung tâm học liệu Thái Nguyên tại địa chỉ:
http://125.214.0.117:8080/WS_Utilities_Qti/services/Tools_Qti?wsdl
Phƣơng án kiểm thử: Thời gian kiểm thử là 3s, random 0.5, delay: 1000ms với số lƣợng các use khác nhau (1,10,30,50...) và Kết quả nhận đƣợc là:
- createSimpleChoice
User Test Step min Max avg last cnt Tps bytes bps err rat
1 createSimpleChoice Request 1 71 110 84.66 71 3 0.8 1269 340 0 0 10 createSimpleChoice Request 1 79 791 173.87 99 16 4.88 6768 2067 0 0 30 createSimpleChoice Request 1 122 1670 570.1 752 37 11.89 15651 5030 0 0 50 createSimpleChoice Request 1 161 2225 687.1 188 38 11.86 16074 5019 0 0 70 createSimpleChoice Request 1 74 1121 437.73 1018 23 7.16 9729 3032 0 0 100 createSimpleChoice Request 1 148 1436 714.57 1436 14 4.18 5922 1769 0 0 1000 createSimpleChoice Request 1 254 1408 922.77 254 9 1.85 3807 785 111 1233
Bảng 4. 1 Bảng kết quả kiểm thử tải của chức năng createSimpleChoice
- createTextQuestion
user Test Step min Max avg Last cnt tps bytes Bps err rat
1 createTextQuestion Request 1 65 72 67.66 66 3 0.8 1689 453 0 0 10 createTextQuestion Request 1 61 128 83.31 65 16 4.88 9008 2751 0 0 30 createTextQuestion Request 1 125 1687 299.35 146 37 11.89 15651 5030 0 0 50 createTextQuestion Request 1 57 1077 248.28 626 38 11.86 16074 5019 0 0 70 createTextQuestion Request 1 90 1304 464.56 441 23 7.16 9729 3032 0 0 100 createTextQuestion Request 1 153 1179 323.28 171 14 4.18 7882 2355 0 0 1000 createTextQuestion Request 1 131 1269 352 1269 9 1.85 5067 1045 10 111
Bảng 4. 2 Bảng kết quả kiểm thử tải của chức năng createTextQuestion
- createYesNoQuestion
user Test Step min Max avg last cnt tps Bytes Bps err rat
1 createYesNoQuestion Request 1 93 110 103.33 107 3 0.8 1323 355 0 0 10 createYesNoQuestion Request 1 61 264 139.81 61 16 4.88 7056 2155 0 0 30 createYesNoQuestion Request 1 100 646 203.02 123 37 11.89 15799 5078 0 0 50 createYesNoQuestion Request 1 56 1170 258.63 173 38 11.86 16226 5067 0 0 70 createYesNoQuestion Request 1 176 993 461.13 366 23 7.16 9821 3061 0 0 100 createYesNoQuestion Request 1 165 770 320.71 211 14 4.18 6174 1845 0 0 1000 createYesNoQuestion Request 1 285 984 520.55 285 9 1.85 3969 818 67 744
Bảng 4. 3 Bảng kết quả kiểm thử tải của chức năng createYesNoQuestion
- validateQti
user Test Step min max avg last cnt tps bytes bps err rat
1 validateQti Request 1 59 115 78.33 115 3 0.8 1167 313 0 0 10 validateQti Request 1 55 368 101.18 67 16 4.88 6224 1901 0 0 30 validateQti Request 1 113 1268 342.35 483 37 11.89 14578 4685 0 0 50 validateQti Request 1 55 670 246.92 170 38 11.86 14951 4669 0 0 70 validateQti Request 1 166 953 457.3 338 23 7.16 9062 2824 0 0