Publications-Theses

Article View/Open

Publication Export

Google ScholarTM

NCCU Library

Citation Infomation

Related Publications in TAIR

題名 以Gradle與Spock為基礎的Java程式作業自動收發與批改系統
An Assignment Processing System for Java Programming Based on Gradle and Spock
作者 顏碩亨
Yen, Shuo-Heng
貢獻者 陳正佳
Chen, Cheng-Chia
顏碩亨
Yen, Shuo-Heng
關鍵詞 程式作業
自動作業收發
自動作業批改
作業處理系統
測試架構
Gradle
Spock
Assignment processing
Java programming
日期 2018
上傳時間 10-Aug-2018 10:41:35 (UTC+8)
摘要 學習程式設計已經蔚為全世界的潮流,無論是針對一般大眾的網路平台,或是針對一般學生的正規學校,均提供確來越多的各種程式語言學習課程。然而由於程式作業是程式設計課程不可或缺的一環,隨著修課人數的遽增,無可避免的將產生排山倒海的作業量,這將為授課老師或助教造成沉重負擔,因為手動批改作業需要冗長的時間,此外也無法給予學生及時的回饋。此時,我們需要用更好、更有效率的方式,來自動化的管理與批改程式作業。
本研究提出的程式作業管理工具,相較於其他類似工具,例如:Moodle VPL、Jupyter nbgrader等,除了提供程式作業的發佈、編輯和繳交功能之外,更重視程式作業的題目測試生成、程式評量,以及作業回饋等。
本系統的主要特色之一是具備能力,可以從單一程式作業解答,產生對應的程式作業,以及測試與評分程式,因此可節省課程教師準備題目時間。出題者僅需提供一完整Java 程式解答檔,指定其中部分方法為作業題目,再事先備齊每一題目的測試輸入資料以及計分方式,即可利用本系統的人機介面操作,以Java註記(annotations)的方式為每一題目注入測試數據與評分資訊,後續系統操作即可經由解答程式分析,萃取相關資訊,再經由樣板程式而產生所有相關作品,例如分發給學生的程式作業,可結合作業解答與學生交來作業的整合測試與評分程式等。我們的系統透過Gradle自動化所有程式作業的建構與理。自動產生的測試與評分程式使用Spock測試框架進行測試與評分。最後系統不但能提供每位學生整份程式作業的評量結果,可回饋給學生供其做為釐清盲點以及改進錯誤的參考,也同時提供報告,協助授課老師快速掌握學生的學習情況。而在儲存部分,我們使用了Nexus 做為所有相關資料的集中倉儲,例如教師提供的作業解答、自動生成的作業題目、測試與評分碼,所有學生的繳交作業,以及最後的測試與評分報告等。
The learning of programming has become a worldwide trend. More and more courses related to various programming languages are being offered on the Internet for the public and from various schools for the students. However, since programing assignment is an indispensable part of a programing course, the increase of students inevitably brings about a large amount of programming assignments, which will cause an extremely heavy burden on graders and teachers if all assignments are to be processed and graded manually. It would not only take a long time, but also give students no feedback in time. In order to reduce the load of assignments processing, we need to automate the management and operations of programming assignments in a better and more efficient way.
This thesis comes up with a management and processing system of programming assignments. In addition to the functionality of editing, distribution, and submission of assignments, compared with other systems such as Moodle VPL, and Jupyter nbgrader, etc., our system pays more attention on different aspects of assignment generation and processing, such as problem generation, test code generation, assessment automation and feedback to students, etc.
One key feature of our system is its ability to generate assignment problems and test/assessments code from a single solution file together with test input and grading information provided by the teacher. It can thus save a lot of time for the teacher. To initialize an assignment using our system, the teacher can simply designates some methods of the solution file as assignment problems. All test input as well as grading information prepared in advance for each problem can then be injected into the corresponding method as annotations via JavaFX GUI operations. The system can later apply java reflection to inspect these annotations from the annotated solution file and generate all related artifacts such as programming assignments and test/assessment code using predefined Velocity templates.
Our system employs Gradle to automate the building and management of programming assignments. The generated test code will be executed using Spock testing framework. The result of assessment can be used as a feedback to clarify students` weakness and help correct errors. At the same time, it provides reports to help teachers quickly grasp what students have learned. Finally, our system uses Nexus as the central repository of all related artifacts such as solution code provided by teachers, automated generated assignments and test code, students` submitted assignments, as well as final assessment reports etc.
參考文獻 [1] Hiroki Kitaya and Ushio Inoue,“An Online Automated Scoring System for Java Programming Assignments.”in International Journal of Information and Education Technology, Vol. 6, No. 4, April 2016.
[2] Caiza J. C. and Del Alamo J. M. ,“Architecture to Support Automatic Grading Processes in Programming Teaching" in Revista Politécnica - Vol. 36, No. 1, Septiembre 2015.
[3] Sumit Gulwani, Rishabh Singh, Armando Solar-Lezama, “Automated Feedback Generation for Introductory Programming Assignments”,in ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2013), pages 15–26, in June 2013.
[4] Vreda Pieterse,“Automated Assessment of Programming Assignments”in ResearchGate conference paper,April 2013.
[5] Juan C. Rodríguez-del-Pino, Enrique Rubio-Royo, Zenón J. Hernández-Figueroa, “A Virtual Programming Lab for Moodle with automatic assessment and anti-plagiarism features”, in Departament of Informática y Sistemas University of Las Palmas de Gran Canaria , Conference Paper , January 2012.
[6] Dominique Thiébaut ,“Automatic evaluation of computer programs using Moodle`s virtual programming lab (VPL) plug-in” , in Journal of Computing Sciences in Colleges , Volume 30 Issue 6, pages 145-151 , in June 2015.
[7] Arcuri, J. Campos, and G. Fraser, “Unit Test Generation During Software Development: EvoSuite Plugins for Maven, IntelliJ and Jenkins”,in IEEE International Conference on Software Testing, Verification and Validation (ICST), 2016, pages 401-408.
[8] Maven. Retrieved March (2018). From https://maven.apache.org/
[9] Gradle. Retrieved March (2018). From https://gradle.org/
[10] Ant. Retrieved March (2018). From:https://ant.apache.org/
[11] Sbt. Retrieved April (2018). From:https://www.scala-sbt.org/index.html
[12] Gulp. Retrieved April (2018). From:https://gulpjs.com/
[13] SCons. Retrieved April (2018). From:https://scons.org/
[14] CMake. Retrieved April (2018). From:https://cmake.org/
[15] Grunt. Retrieved April (2018). From:https://gruntjs.com/
[16] Gradle v.s. Maven Comparison:https://gradle.org/maven-vs-gradle/
[17] Nexus Repository. Retrieved May (2018). From https://www.sonatype.com/nexus-repositor y-sonatype
[18] NPM. Retrieved May (2018). From https://www.npmjs.com/
[19] Docker. Retrieved May (2018). From https://www.docker.com/
[20] NuGet. Retrieved May (2018). From https://www.nuget.org/
[21] IntelliJ. Retrieved May (2018). From https://www.jetbrains.com/idea/
[22] Hudson. Retrieved May (2018). From http://hudson-ci.org/
[23] Jenkins. Retrieved May (2018). From https://jenkins.io/
[24] JavaFX . Retrieved May (2018). From http://www.oracle.com/technetwork/java/javase/o verview/javafx-overview-158620.html
[25] JavaFX Scene Builder . Retrieved July (2018). From https://www.oracle.com/technetwor k/java/javase/downloads/javafxscenebuilder-info-2157684.html
[26] 單元測試Unit Testing . Retrieved May (2018). From https://en.wikipedia.org/wiki/Un it_testing
[27] TestNG. Retrieved May (2018). From http://testng.org/doc/
[28] Spock. Retrieved May (2018). From http://spockframework.org/
[29] Junit. Retrieved May (2018). From:http://junit.org/junit4/
[30] Moodle. Retrieved May (2018). From:https://moodle.org/?lang=zh_tw
[31] Moodle VPL. Retrieved May (2018). From https://moodle.org/plugins/mod_vpl
[32] Specification language. Retrieved May (2018). From https://en.wikipedia.org /wiki/Sp ecification_language
[33] Execution server(vpl-jail-service) . Retrieved May (2018). From http://vpl.dis.ulpgc.es/index.php/support/2014-09-27-15-06-22/40-how-to-install-vpl-jai l-system
[34] Jmock. Retrieved May (2018). From http://www.jmock.org/
[35] Rspec. Retrieved May (2018). From http://rspec.info/
[36] Groovy. Retrieved May (2018). From https://zh.wikipedia.org/wiki/Groovy
[37] BDD(Behavior-driven development) https://en.wikipedia.org/wiki/Behavior-driven_dev elopment
[38] C#. Retrieved May (2018). From https://en.wikipedia.org/wiki/ C_Sharp_(programming _language)
[39] Ruby. Retrieved May (2018). From https://www.ruby-lang.org/zh_tw/
[40] Scala. Retrieved May (2018). From https://zh.wikipedia.org/wiki/Scala
[41] nbgrader. Retrieved May (2018). From https://nbgrader.readthedocs.io/en/stable/
[42] Apache Velocity. Retrieved May (2018). From http://velocity.apache.org/
[43] FreeMarker. Retrieved May (2018). From https://freemarker.apache.org/
[44] Jamon. Retrieved May (2018). From http://www.jamon.org/
[45] Application Framework. Retrieved May (2018). From http://www.dotspace.idv.tw/Fram eworks.htm
[46] Vert.x. Retrieved May (2018). From https://vertx.io/
[47] JSF(Javaserver Faces) . Retrieved May (2018). From http://www.oracle.com/ technetwor k / topics/index-090910.html
[48] IoC ( Inversion of Control) . Retrieved May (2018). From https://en.wikipedia.org/wiki/Inv ersion_of_control
[49] AOP ( Aspect-oriented programming ) . Retrieved May (2018). From https://en.wikipedia.org/ wiki/Aspect-oriented_programming
[50] Spring framework. Retrieved May (2018). From https://projects.spring.io/spring-boot/
[51] Spring Initializr. Retrieved May (2018). From https://github.com/spring-io/initializr
[52] Spock Report . Retrieved May (2018). From https://github.com/renatoathaydes/spock-reports
描述 碩士
國立政治大學
資訊科學系
103753027
資料來源 http://thesis.lib.nccu.edu.tw/record/#G0103753027
資料類型 thesis
dc.contributor.advisor 陳正佳zh_TW
dc.contributor.advisor Chen, Cheng-Chiaen_US
dc.contributor.author (Authors) 顏碩亨zh_TW
dc.contributor.author (Authors) Yen, Shuo-Hengen_US
dc.creator (作者) 顏碩亨zh_TW
dc.creator (作者) Yen, Shuo-Hengen_US
dc.date (日期) 2018en_US
dc.date.accessioned 10-Aug-2018 10:41:35 (UTC+8)-
dc.date.available 10-Aug-2018 10:41:35 (UTC+8)-
dc.date.issued (上傳時間) 10-Aug-2018 10:41:35 (UTC+8)-
dc.identifier (Other Identifiers) G0103753027en_US
dc.identifier.uri (URI) http://nccur.lib.nccu.edu.tw/handle/140.119/119294-
dc.description (描述) 碩士zh_TW
dc.description (描述) 國立政治大學zh_TW
dc.description (描述) 資訊科學系zh_TW
dc.description (描述) 103753027zh_TW
dc.description.abstract (摘要) 學習程式設計已經蔚為全世界的潮流,無論是針對一般大眾的網路平台,或是針對一般學生的正規學校,均提供確來越多的各種程式語言學習課程。然而由於程式作業是程式設計課程不可或缺的一環,隨著修課人數的遽增,無可避免的將產生排山倒海的作業量,這將為授課老師或助教造成沉重負擔,因為手動批改作業需要冗長的時間,此外也無法給予學生及時的回饋。此時,我們需要用更好、更有效率的方式,來自動化的管理與批改程式作業。
本研究提出的程式作業管理工具,相較於其他類似工具,例如:Moodle VPL、Jupyter nbgrader等,除了提供程式作業的發佈、編輯和繳交功能之外,更重視程式作業的題目測試生成、程式評量,以及作業回饋等。
本系統的主要特色之一是具備能力,可以從單一程式作業解答,產生對應的程式作業,以及測試與評分程式,因此可節省課程教師準備題目時間。出題者僅需提供一完整Java 程式解答檔,指定其中部分方法為作業題目,再事先備齊每一題目的測試輸入資料以及計分方式,即可利用本系統的人機介面操作,以Java註記(annotations)的方式為每一題目注入測試數據與評分資訊,後續系統操作即可經由解答程式分析,萃取相關資訊,再經由樣板程式而產生所有相關作品,例如分發給學生的程式作業,可結合作業解答與學生交來作業的整合測試與評分程式等。我們的系統透過Gradle自動化所有程式作業的建構與理。自動產生的測試與評分程式使用Spock測試框架進行測試與評分。最後系統不但能提供每位學生整份程式作業的評量結果,可回饋給學生供其做為釐清盲點以及改進錯誤的參考,也同時提供報告,協助授課老師快速掌握學生的學習情況。而在儲存部分,我們使用了Nexus 做為所有相關資料的集中倉儲,例如教師提供的作業解答、自動生成的作業題目、測試與評分碼,所有學生的繳交作業,以及最後的測試與評分報告等。
zh_TW
dc.description.abstract (摘要) The learning of programming has become a worldwide trend. More and more courses related to various programming languages are being offered on the Internet for the public and from various schools for the students. However, since programing assignment is an indispensable part of a programing course, the increase of students inevitably brings about a large amount of programming assignments, which will cause an extremely heavy burden on graders and teachers if all assignments are to be processed and graded manually. It would not only take a long time, but also give students no feedback in time. In order to reduce the load of assignments processing, we need to automate the management and operations of programming assignments in a better and more efficient way.
This thesis comes up with a management and processing system of programming assignments. In addition to the functionality of editing, distribution, and submission of assignments, compared with other systems such as Moodle VPL, and Jupyter nbgrader, etc., our system pays more attention on different aspects of assignment generation and processing, such as problem generation, test code generation, assessment automation and feedback to students, etc.
One key feature of our system is its ability to generate assignment problems and test/assessments code from a single solution file together with test input and grading information provided by the teacher. It can thus save a lot of time for the teacher. To initialize an assignment using our system, the teacher can simply designates some methods of the solution file as assignment problems. All test input as well as grading information prepared in advance for each problem can then be injected into the corresponding method as annotations via JavaFX GUI operations. The system can later apply java reflection to inspect these annotations from the annotated solution file and generate all related artifacts such as programming assignments and test/assessment code using predefined Velocity templates.
Our system employs Gradle to automate the building and management of programming assignments. The generated test code will be executed using Spock testing framework. The result of assessment can be used as a feedback to clarify students` weakness and help correct errors. At the same time, it provides reports to help teachers quickly grasp what students have learned. Finally, our system uses Nexus as the central repository of all related artifacts such as solution code provided by teachers, automated generated assignments and test code, students` submitted assignments, as well as final assessment reports etc.
en_US
dc.description.tableofcontents 摘要 II
ABSTRACT III
目錄 V
圖目錄 VII
表目錄 IX
第1章 序論 1
1.1 研究背景與動機 1
1.2 實現方式 2
1.3 論文貢獻與特色 3
第2章 相關研究探討 5
2.1自動化建構工具 5
2.1.1 Maven 6
2.1.2 Gradle 7
2.2儲存庫簡介 8
2.2.1 Nexus Repository 8
2.3輔助工具介面 8
2.3.1 JavaFX 8
2.4 程式測試工具簡介 9
2.4.1 Junit 9
2.4.2 Spock 10
2.5 模板引擎框架 12
2.5.1 Apache Velocity 13
2.6 應用程式框架 13
2.6.1 Spring framework 14
2.6.2 Spring Boot 14
2.7 相似系統的分析與簡介 15
2.7.1 Moodle VPL(Virtual Programming Lab) 15
2.7.2 Jupyter nbgrader 18
第3章 系統架構與實作 24
3.1系統架構 24
3.2系統實作 28
3.2.1輔助作業發佈介面 28
3.2.2程式作業發佈平台 34
3.2.3輔助作業測試介面 36
第4章 介面操作流程與展示 38
4.1介面操作流程 38
4.2介面操作展示 40
4.2.1輔助作業發佈介面 40
4.2.2程式作業發佈平台 47
4.2.3輔助作業測試介面 55
第5章 結論與未來研究方向 59
5.1 結論 59
5.2 未來研究方向 60
參考文獻 61
zh_TW
dc.format.extent 2257752 bytes-
dc.format.mimetype application/pdf-
dc.source.uri (資料來源) http://thesis.lib.nccu.edu.tw/record/#G0103753027en_US
dc.subject (關鍵詞) 程式作業zh_TW
dc.subject (關鍵詞) 自動作業收發zh_TW
dc.subject (關鍵詞) 自動作業批改zh_TW
dc.subject (關鍵詞) 作業處理系統zh_TW
dc.subject (關鍵詞) 測試架構zh_TW
dc.subject (關鍵詞) Gradleen_US
dc.subject (關鍵詞) Spocken_US
dc.subject (關鍵詞) Assignment processingen_US
dc.subject (關鍵詞) Java programmingen_US
dc.title (題名) 以Gradle與Spock為基礎的Java程式作業自動收發與批改系統zh_TW
dc.title (題名) An Assignment Processing System for Java Programming Based on Gradle and Spocken_US
dc.type (資料類型) thesisen_US
dc.relation.reference (參考文獻) [1] Hiroki Kitaya and Ushio Inoue,“An Online Automated Scoring System for Java Programming Assignments.”in International Journal of Information and Education Technology, Vol. 6, No. 4, April 2016.
[2] Caiza J. C. and Del Alamo J. M. ,“Architecture to Support Automatic Grading Processes in Programming Teaching" in Revista Politécnica - Vol. 36, No. 1, Septiembre 2015.
[3] Sumit Gulwani, Rishabh Singh, Armando Solar-Lezama, “Automated Feedback Generation for Introductory Programming Assignments”,in ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2013), pages 15–26, in June 2013.
[4] Vreda Pieterse,“Automated Assessment of Programming Assignments”in ResearchGate conference paper,April 2013.
[5] Juan C. Rodríguez-del-Pino, Enrique Rubio-Royo, Zenón J. Hernández-Figueroa, “A Virtual Programming Lab for Moodle with automatic assessment and anti-plagiarism features”, in Departament of Informática y Sistemas University of Las Palmas de Gran Canaria , Conference Paper , January 2012.
[6] Dominique Thiébaut ,“Automatic evaluation of computer programs using Moodle`s virtual programming lab (VPL) plug-in” , in Journal of Computing Sciences in Colleges , Volume 30 Issue 6, pages 145-151 , in June 2015.
[7] Arcuri, J. Campos, and G. Fraser, “Unit Test Generation During Software Development: EvoSuite Plugins for Maven, IntelliJ and Jenkins”,in IEEE International Conference on Software Testing, Verification and Validation (ICST), 2016, pages 401-408.
[8] Maven. Retrieved March (2018). From https://maven.apache.org/
[9] Gradle. Retrieved March (2018). From https://gradle.org/
[10] Ant. Retrieved March (2018). From:https://ant.apache.org/
[11] Sbt. Retrieved April (2018). From:https://www.scala-sbt.org/index.html
[12] Gulp. Retrieved April (2018). From:https://gulpjs.com/
[13] SCons. Retrieved April (2018). From:https://scons.org/
[14] CMake. Retrieved April (2018). From:https://cmake.org/
[15] Grunt. Retrieved April (2018). From:https://gruntjs.com/
[16] Gradle v.s. Maven Comparison:https://gradle.org/maven-vs-gradle/
[17] Nexus Repository. Retrieved May (2018). From https://www.sonatype.com/nexus-repositor y-sonatype
[18] NPM. Retrieved May (2018). From https://www.npmjs.com/
[19] Docker. Retrieved May (2018). From https://www.docker.com/
[20] NuGet. Retrieved May (2018). From https://www.nuget.org/
[21] IntelliJ. Retrieved May (2018). From https://www.jetbrains.com/idea/
[22] Hudson. Retrieved May (2018). From http://hudson-ci.org/
[23] Jenkins. Retrieved May (2018). From https://jenkins.io/
[24] JavaFX . Retrieved May (2018). From http://www.oracle.com/technetwork/java/javase/o verview/javafx-overview-158620.html
[25] JavaFX Scene Builder . Retrieved July (2018). From https://www.oracle.com/technetwor k/java/javase/downloads/javafxscenebuilder-info-2157684.html
[26] 單元測試Unit Testing . Retrieved May (2018). From https://en.wikipedia.org/wiki/Un it_testing
[27] TestNG. Retrieved May (2018). From http://testng.org/doc/
[28] Spock. Retrieved May (2018). From http://spockframework.org/
[29] Junit. Retrieved May (2018). From:http://junit.org/junit4/
[30] Moodle. Retrieved May (2018). From:https://moodle.org/?lang=zh_tw
[31] Moodle VPL. Retrieved May (2018). From https://moodle.org/plugins/mod_vpl
[32] Specification language. Retrieved May (2018). From https://en.wikipedia.org /wiki/Sp ecification_language
[33] Execution server(vpl-jail-service) . Retrieved May (2018). From http://vpl.dis.ulpgc.es/index.php/support/2014-09-27-15-06-22/40-how-to-install-vpl-jai l-system
[34] Jmock. Retrieved May (2018). From http://www.jmock.org/
[35] Rspec. Retrieved May (2018). From http://rspec.info/
[36] Groovy. Retrieved May (2018). From https://zh.wikipedia.org/wiki/Groovy
[37] BDD(Behavior-driven development) https://en.wikipedia.org/wiki/Behavior-driven_dev elopment
[38] C#. Retrieved May (2018). From https://en.wikipedia.org/wiki/ C_Sharp_(programming _language)
[39] Ruby. Retrieved May (2018). From https://www.ruby-lang.org/zh_tw/
[40] Scala. Retrieved May (2018). From https://zh.wikipedia.org/wiki/Scala
[41] nbgrader. Retrieved May (2018). From https://nbgrader.readthedocs.io/en/stable/
[42] Apache Velocity. Retrieved May (2018). From http://velocity.apache.org/
[43] FreeMarker. Retrieved May (2018). From https://freemarker.apache.org/
[44] Jamon. Retrieved May (2018). From http://www.jamon.org/
[45] Application Framework. Retrieved May (2018). From http://www.dotspace.idv.tw/Fram eworks.htm
[46] Vert.x. Retrieved May (2018). From https://vertx.io/
[47] JSF(Javaserver Faces) . Retrieved May (2018). From http://www.oracle.com/ technetwor k / topics/index-090910.html
[48] IoC ( Inversion of Control) . Retrieved May (2018). From https://en.wikipedia.org/wiki/Inv ersion_of_control
[49] AOP ( Aspect-oriented programming ) . Retrieved May (2018). From https://en.wikipedia.org/ wiki/Aspect-oriented_programming
[50] Spring framework. Retrieved May (2018). From https://projects.spring.io/spring-boot/
[51] Spring Initializr. Retrieved May (2018). From https://github.com/spring-io/initializr
[52] Spock Report . Retrieved May (2018). From https://github.com/renatoathaydes/spock-reports
zh_TW
dc.identifier.doi (DOI) 10.6814/THE.NCCU.CS.007.2018.B02-