Title: QGen
1QGen
- FHARM Team
-
- Flavio Palandri Antonelli Project Manager
- Hyunmin Lee System Tester
- Aarthi Venkataramanan System Architect
- Rupal Shah System Integrator
- Mohip Joarder Language Guru
- COMS W4115 Programming Languages and Translators
- Prof. Alfred V. Aho
-
2Outline
- Introduction Motivations
- Language Basics
- Language Design Architecture
- Demo
- Language Implementation Testing
- Conclusions
3What is QGen?
- QGen, is a programming language to develop
computer-based test applications. -
-
QGen
4With QGen you can..
- Generate computer based tests and surveys
- Define different types of questions and organize
them into logically meaningful sections - Make your tests adapt to the ability of the user
- Provide immediate results/feedback
5Use QGen for..
-
- Customer Insights
-
- Employee Feedback
-
- Research
-
- Education and Training
-
- Just For Fun !
-
6Why QGen?
- Eases the process of creating and evaluating
quizzes and surveys - Yet provides ample flexibility to allow for
customization and dynamic behavior. - The output is a portable java application
7Outline
- Introduction Motivations
- Language Basics
- Language Design Architecture
- Demo
- Language Implementation Testing
- Conclusions
8Overall Structure of a QGen Program
Pro
Program
Section 1
Question 1
. .
Question n
. .
Section S
Question 1
. .
Question m
- Main
- Display questions
- Organize sections
- Evaluate results
9Sample Program
section HelloWorldSection question q1 type
multipleChoice text "What's the most simplest
program usually adopted 2 show a language
example?" image "images/hw.jpg" answer "Hello
World" choices ("Hello World", "Hello Moon",
"Hi World", "Goodbye World") score 5
q1 main showInstruction("Simple test",
"Select the correct choice in the next
question.") showSection(HelloWorldSection) showR
esult()
Section
Question
Sections organization
10Sample Program Output 1
showInstruction("Simple test", "Select the
correct choice in the next question.")
11Sample Program Output 2
showSection(HelloWorldSection)
12Sample Program Output 3
showResult()
13Syntactic Constructs
- Looping structures
- For
- While
- Conditional structures
- if/else
- Built in functions
- showInstruction(String title, String description)
- showResult()
- getSectionScore(Section s)
- getQuestionScore(Section s, Question q)
- getAnswer(Section s, Question q)
- addToList(List l, String s)
14Outline
- Introduction Motivations
- Language Basics
- Language Design Architecture
- Demo
- Language Implementation Testing
- Conclusions
15Abstract Model of a Test
16Architecture
QGen Source Program
Front End
Back End
TreeWalker
Target Java Program
Section
Lexer Parser
Syntax Tree
ANTLR
GUI Manager
Question
grammar.g
walker.g
Interactive GUI Test Application
Runnable Java Program
Java Compiler
JVM
17Outline
- Introduction Motivations
- Language Basics
- Language Design Architecture
- Demo
- Language Implementation Testing
- Conclusions
18Demo Source Code
- section firstSection
- question q1
- type yesNo
- text "Is the grammar S -gt Sa b left
recursive?" - answer "Yes"
- score 5
-
-
- question q2
-
- type fillBlank
- text "___ binding binds the data at run
time" - answer "Dynamic"
- score 5
-
- q1q2
First Section
- section easySection
-
- question q3
-
- type freeText
- text "What is the input language of
Assembler?" - answer "Assembly language"
- score 3
-
- q3
-
Easy Section
19- section hardSection
-
- question q4
-
- type multipleChoice
- text "Which is the best parser among the
given choices?" - answer "Canonical-LR"
- choices ("Canonical-LR", "Simple LR",
"LALR", "LL(1)") - score 10
-
- list l
- for (i 0 to 10)
- addToList(l,i)
-
-
- question q5
-
- type multipleChoice
- text "How many no. of min. states will
be generated after converting the following NFA
to DFA?"
Hard Section
- main
- showInstruction("Computer Adaptive PLT Test",
"Depending on your answers different questions
will be shown in the next section") - showSection(firstSection)
- if (getSectionScore(firstSection) gt 5)
- showSection(hardSection)
-
- else
- showSection(easySection)
-
- showResult()
-
Main function
20Demonstration
21Outline
- Introduction Motivations
- Language Basics
- Language Design Architecture
- Demo
- Language Implementation Testing
- Conclusions
22Development Environment
Tools Software Purpose
ANTLR Takes grammar tokens as input and produces Lexer Parser Walker
Eclipse IDE ANTLR plugin IDE ANTLR plugin for grammar debugging
Google code Subversion Version control
Java Swing Back-end Display
23Test plan
Phase To do
Front-end Unit Test Test every grammar production
Back-end Unit Test - Test with hand-made target programs
Integration Test - Verify equivalence between treewalker output and hand-made target programs
System Test - Test the entire QGen compiler
24Front-end Test with ANTLR Plugin
25Conclusions
- Lessons learned
- Meet regularly
- Keep it simple (Life is hard enough!)
- User-friendly languages are hard to implement and
test - Decouple front-end and back-end development
-
- Future Work Improvements
- Import questions from a file store results to a
DB - Enforce time-limits
- Statistical results