- Intelligent Tutoring Systems and Adaptive Learning
- Software Testing and Debugging Techniques
- Teaching and Learning Programming
- Logic, programming, and type systems
- Software Engineering Research
- Software Reliability and Analysis Research
- Formal Methods in Verification
- Model-Driven Software Engineering Techniques
- Educational Games and Gamification
- Online Learning and Analytics
- Natural Language Processing Techniques
- Parallel Computing and Optimization Techniques
- Safety Systems Engineering in Autonomy
- Semantic Web and Ontologies
- Open Education and E-Learning
- Visual and Cognitive Learning Processes
- Network Packet Processing and Optimization
Chalmers University of Technology
2015-2019
University of Gothenburg
2018-2019
Quviq (Sweden)
2013-2015
Open University of the Netherlands
2008-2012
The Open University
2008-2009
Datatype-generic programming is defining functions that depend on the structure, or "shape", of datatypes. It has been around for more than 10 years, and a lot progress made, in particular lazy functional language Haskell. There are morethan proposals generic libraries orlanguage extensions To compare characterise many atyped language, we introduce set criteria develop benchmark: characteristic examples testing various facets datatype-generic programming. We have implemented benchmark nine...
We introduce an interactive tutor that supports the stepwise development of simple functional programs. Using this tutor, students receive feedback about whether or not they are on right track, can ask for a hint when stuck, and get suggestions how to refactor their program. Our generates semantically rich from model solutions, using advanced concepts software technology. show teacher add exercise fine-tune feedback. report experiment in which we used our tutor.
Strategies specify how a wide range of exercises can be solved incrementally, such as bringing logic proposition to disjunctive normal form, reducing matrix, or calculating with fractions. In this paper we introduce language for specifying strategies solving exercises. This makes it easier automatically calculate feedback, example when user an erroneous step in calculation. We generate worked-out examples, track the progress student by inspecting submitted intermediate answers, and report...
Programming exercise assessment tools alleviate the task of teachers, and increase consistency markings. Many programming are based on testing. A test-based tool for exercises cannot ensure that a solution is correct. Moreover, it difficult to test if student has used good practices. This unfortunate, because teachers want students adopt techniques. We propose use strategies, in combination with program transformations, as foundation functional assessment. Expert knowledge, form model...
Ask-Elle is an interactive tutor that supports the stepwise development of simple functional programs. Using students receive feedback about whether or not they are on right track, can ask for a hint when stuck, and get suggestions how to refactor their program. Our generates this from model solutions properties solution should satisfy. This paper studies feasibility using together with desired analyse work student. It describes experiment in which we almost 3500 log entries solve...
Learning to program is difficult. To support learning programming, many intelligent tutoring systems for programming have been developed. Research has shown that such tutors positive effects on learning. However, are not widely used. Building an tutor a language substantial amount of work, and utilising it in course often hard teacher. In this paper we illustrate how construct strategies solving exercises these can be used automatically students using incrementally develop program. Using...
Mathematical learning environments give domain-specific and immediate feedback to students solving a mathematical exercise. Based on language for specifying strategies, we have developed framework that automatically calculates semantically rich feedback. We offer this functionality via set of web services. Feedback is only effective when it precise the point. The tests performed some confidence about correctness our To increase in services, explicitly specify properties services should...
QuickCheck allows us to verify software against particular properties. A property can be regarded as an abstraction over many unit tests. uses generated random input data test such If a counterexample is found, it becomes immediately clear what we have tested. This not the case when all tests pass, since do (and shall not) see actual cases. How sure about tested? has ability gather statistics cases, which insightful. But still does tell whether scenarios in mind are included. For this...
Datatype-generic programming is defining functions that depend on the structure, or "shape", of datatypes. It has been around for more than 10 years, and a lot progress made, in particular lazy functional language Haskell. There are morethan proposals generic libraries orlanguage extensions To compare characterise many atyped language, we introduce set criteria develop benchmark: characteristic examples testing various facets datatype-generic programming. We have implemented benchmark nine...
Many functions take a value of particular (recursive) data structure as input and compute an output by traversing the collect, combine, or update values in that structure. Some examples are: collecting all hyperlink tags HTML tree, calculating depth binary adding prefix to every free variable name abstract syntax tree. When defining such we need write code takes care This is often repeated for operate on same structure, not essential operation want perform. type repetitive referred...
Formal specifications of software applications are hard to understand, even for domain experts. Because a formal specification is abstract, reading it does not immediately convey the expected behaviour software. Carefully chosen examples software's behaviour, on other hand, concrete and easy understand—but poorly-chosen more confusing than helpful. In order understand specifications, developers need good examples.
QuickCheck can test a system by specifying state machine for the API exported that system. This specification includes list of possible calls. Each call is accompanied precondition, postcondition, generator arguments, and description how changed. Based on this generates random sequence The preconditions ensure generated valid, postconditions check behaves as expected. Many systems require an initialisation before other calls, describing transition from uninitialized to initialised state....