5.4.1. Tính Cyclomatic complexity (CC)
Khi sinh viên làm một bài tập từ hệ thống, tính năng tính CC được thực hiện trên tệp tin chương trình java của sinh viên. Ngoài việc tính CC thì hệ thống còn phản hồi cho sinh viên vềđộ phức tạp của bài toán dựa vào CC.
Với ví dụ trong hình 5.2, chương trình có ba điểm quyết định (một là tại điều kiện k<=100 trong vòng lặp for, hai là k chia hết cho 3 trong điều kiện của lệnh if, và thứ ba là k chia hết cho 7 trong điều kiện của lệnh if) nên theo công thức tính Cyclomatic complexity = số điểm quyết định + 1. Nên với bài toán ví dụ này Cyclomatic complexity bằng 4. Với CC tính được này (theo bảng 3.2) thì chương trình có thể kiểm thửđược với tối thiểu 3 ca kiểm thử và ít rủi ro.
5.4.2. So sánh sự tương tự về cấu trúc
Hệ thống sẽ so sánh chương trình của sinh viên với các chương trình mẫu. Nếu hệ thống tìm thấy một sự giống nhau về cấu trúc của chương trình sinh viên với bất kỳ chương trình mẫu nào của bài tập tương ứng thì hệ thống sẽđưa ra một lời chúc mừng. Ngược lại đưa ra phản hồi không đúng cho sinh viên.
Hình 5.3 Kết quả thực nghiệm chức năng so sánh cấu trúc trong trường hợp hai chương trình giống cấu trúc
Trong ví dụ hình 5.3 là cấu trúc chương trình của sinh viên giống với chương trình mẫu nên một thông báo chúc mừng xuất hiện kèm theo cấu trúc của chương trình mà hệ thống phân tích được.
Vẫn ví dụđó, nhưng ta thêm một dòng lệnh k=9 vào cuối chương trình của sinh viên (như hình 5.4) thì ta sẽ thấy một thông báo sai cấu trúc xuất hiện.
Hình 5.4 Kết quả thực nghiệm chức năng so sánh cấu trúc trong trường hợp hai chương trình không giống cấu trúc
Ở ví dụ này, tuy là lệnh k=9 được thêm vào không ảnh hưởng đến kết quả của bài toán nhưng nó khác cấu trúc mẫu ở chỗ xuất hiện thêm một phép gán ở cuối.
5.5. Đánh giá kết quả thực nghiệm
Do thời gian có hạn nên tôi mới chỉ cài đặt được hai chức năng là: tính Cyclomatic complexity và so sánh cấu trúc của chương trình mẫu và chương trình sinh viên.
So với mục tiêu của bài toán ứng dụng tôi vẫn chưa làm được các điều sau đây: Chưa kết hợp được với phân tích động đểđánh giá giải pháp của sinh viên thông qua tập các đầu vào và các đầu ra mong đợi.
KẾT LUẬN
Trong thời gian thực hiện luận văn, tôi đã nghiên cứu và thực hiện được những công việc sau:
Tìm hiểu được các khái niệm, các công nghệ và cách tiếp cận của phân tích chương trình trong việc hiểu chương trình tựđộng.
Tìm hiểu được một số đơn vị đo phần mềm (Software metric) đặc biệt là Cyclomatic complexity.
Tìm hiểu về công cụ ANTLR để chuyển đổi mã nguồn thành AST.
Xây dựng được hệ thống thực nghiệm ứng dụng lý thuyết đã tìm hiểu với hai chức năng chính là: Thứ nhất là tính Cyclomatic complexity của chương trình sinh viên rồi phản hồi lại cho sinh viên vềđộ phức tạp của chương trình. Thứ hai là kiểm tra cấu trúc chương trình của sinh viên rồi phản hồi lại bằng cách so sánh với cấu trúc của chương trình mẫu.
Tuy nhiên, do thời gian có hạn cũng như kiến thức của tôi còn hạn chế nên luận văn vẫn còn một số vấn đề chưa được giải quyết:
Hệ thống thực nghiệm còn đơn giản và chưa phân tích được chính xác tất cả các chương trình trên thực tế.
Hệ thống mới chỉ trả lời cho sinh viên xem cấu trúc chương trình có giống cấu trúc mẫu không chứ chưa trả lời được mức độ tương tự của cấu trúc.
Đây là một đề tài mang tính nghiên cứu và có khả năng áp dụng cao trong thực tế. Vì thế, trong thời gian tới tôi rất muốn tiếp tục đề tài này theo những hướng phát triển như sau:
Hoàn thiện ứng dụng để có thể kết hợp cả phân tích động và có thể trả lời được một cách chính xác về mức độ tương tự của chương trình và đưa ra gợi ý cho sinh viên về cách giải quyết vấn đề…
Tích hợp thêm vào hệ thống các đơn vịđo phần mềm khác.
Phát triển hệ thống lên thành một hệ thống chấm điểm tự động kèm theo chức năng phát hiện bài sao chép.
TÀI LIỆU THAM KHẢO
Tiếng việt
1. Dương Ngọc Duy, Phan Quang Hiếu (2013), Cây cú pháp trừu tượng (AST)
và ứng dụng trong web ide, luận văn tốt nghiệp cử nhân, trường Đại học Khoa học tự nhiên, TP. HCM.
2. Trần Thị Bích Hằng (2013), nghiên cứu ứng dụng antlr để xử lý các thông điệp trong phần mềm đa ngữ, luận văn thạc sỹ kỹ thuật chuyên ngành khoa học máy tính, trường Đại học Đà Nẵng.
Tiếng Anh
3. Ahmad Taherkhani (2008), Static Program Analysis for Recognizing Sorting
Algorithms, Master’s thesis, URL
http://www.cs.hut.fi/~ahmad/mastersthesis.pdf
4. Nghi Truong, Paul Roe, Peter Bancroft (2004), Static Analysis of Students’ Java Programs, GPO Box 2434, Brisbane QLD 4001, Australia.
5. Vesa Hirvisalo (2004) Using Static Program Analysis to Compile Fast Cache Simulators. Phd thesis, Department of Computer Science and Engineering, Helsinki University of Technology, Finland, URL http://lib.tkk.fi/Diss/2004/isbn9512270137/isbn9512270137.pdf
6. Gurdev Singh1, Dilbag Singh2, Vikram Singh3 (January 2011) A Study of Software Metrics, IJCEM International Journal of Computational
Engineering & Management, URL:
http://ijcem.org/papers12011/12011_14.pdf Internet 7. http://en.wikipedia.org/wiki/Program_analysis 8. http://en.wikipedia.org/wiki/Software_metric 9. http://en.wikipedia.org/wiki/Cyclomatic_complexity 10. http://www.whiteboxtest.com/cyclomatic-complexity.php 11. http://www.antlr.org/ 12. http://en.wikipedia.org/wiki/Correctness_(computer_science) 13. http://homepage.cs.uiowa.edu/~tinelli/classes/111/Fall08/Notes/ch18-I.pdf 14. http://en.wikipedia.org/wiki/Program_optimization 15. http://en.wikipedia.org/wiki/Abstract_syntax_tree