| 1. Controller for Unity3D-based RoboSoccer simulation 
	  Using Unity3D [1], the 3D game development environment,
	  we have developed a simulation scenario in which
	  two teams with two rovers each can play robot soccer
	  against each other.
	  The rovers of both teams can be controlled via a socket
	  connection to the Unity simulation [2].
	 
	  The goal of the
	  project is to develop the automatic control software
	  for a team. Any programming language
	  can be chosen (as long as it supports TCP/IP socket
	  communication). Machine learning could also be used. 
	 
	  The project is suited for a student with interests
	  in 3D simulation, rovers, and programming languages.
	 
	  [1] Unity3D web page. www.Unity3D.com
	   | 
| 2. Specification and analysis of designs using Alloy and Electrum 
	  The Alloy language and tool offer an approach to software design
	  that supports a fully automated analysis giving designers immediate
	  feedback [1,2].
	  It has been used, for instance, to analyze, critique, and improve the
	  design of Git [3]. A recent extension of Alloy is called Electrum [4].
	  While Alloy focusses on the specification of structure, Electrum extends
	  Alloy with capability to specify and reason about behaviour.
	 
	  The goal of the project is to study Electrum, i.e., understand its relationship to Alloy, and its capabilities, strengths, and weaknesses.
	 
	  The project is suited for a student with interests software design and formal specification and analysis. 
	 
	  [1] Alloy web page. alloytools.org
	   | 
| 3. Formal specification and verification of smart contracts 
	  Smart contracts are computer protocols aimed at facilitating
	  the enforcement and verification of a contract. Various
	  cryptocurrencies such as bitcoin have adopted smart contracts.
	  A recent paper in one of the most respected and visible
	  computing journals advocates the view that many of the
	  basic algorithms and techniques used in blockchains are
	  best understood as variations on familiar algorithms and
	  techniques from classic distributed computing [1].
	   
	    The goal of the project is to explore this view through, e.g., 
	    the study of the literature and the experimentation
	    with proposed approaches to a formal specification and
	    verification (including testing) of smart contracts. 
	 
	  The project is suited for a student with interests
	  in formal specification and distributed computing.
	   
	    [1] M. Herlihy. Blockchains From a Distributed Computing Perspective. 
	    Communications of the ACM, February 2019, Vol. 62 No. 2, Pages 78-85
   | 
| 4. Model-driven software development for distributed systems 
	In model-driven software development (MDSD) [1], executable code
	is generated from higher-level, often domain-specific artifacts
	such as component and connector models and state machines.
	The motivation behind MDSD is to increase developer productivity
	by raising the level of abstraction and automation and
	lowering accidental complexity. MDSD hase been used successfully
	in different domains including telecommunications and
	automotive for the construction of concurrent reactive systems.
	MDSD tools include Papyrus-RT [2] and HCL RTist [3].
	 
	  In recent work, we have extended MDSD to support the
	  development of web-based distributed systems as found
	  in many Internet of Things (IoT) applications [4].
	  The extension includes an integration with
	  Node-RED [5], a programming tool for wiring
	  together hardware devices, APIs and online services,
	  as well as the development of a distributed
	  runtime system (middleware) to support the
	  communication between different model components [6].
	  The goal of the
	  project is to experiment with this extension through
	  the construction of small sample systems. 
	 
	  The project is suited for a student with interests
	  in software development, software modeling, and
	  distributed systems.
	 
	  [1] Beyond code: An introduction to model-driven software development (CISC 836).
	  Graduate course in School of Computing, Queen's University. 
	  research.cs.queensu.ca/home/dingel/cisc836_W19
	   | 
| 5. Survey and comparison of build automation tools 
	Build automation tools automate the process of turning source code into executable
	code and are indispensible for large projects, especially when
	agile development processes with continuous integration and delivery are followed.
	 
	  The goal of the project is to select a few tools and compare them with
	  respect to some relevant criteria chosen by the student. 
	 
	  The project is most suitable for a student with interest in
	  modern, industrial software development.
   | 
| 6. Support for dynamic reconfiguration in Kubernetes 
	Kubernetes is an open-source container-orchestration system
	for automating application deployment, scaling, and management [1].
	 
	  The goal of the project is to explore the extend to which
	  Kubernetes allows the reconfigation of a containerized
	  application during execution.
	 
	  The project is most suitable for a student with interest in
	  modern, industrial software development. 
	     | 
| 7. Teaching concolic testing 
	Concolic testing is a recent approach to testing
	that combines random testing and symbolic execution [1].
	It has been very successful and powers, for instance,
	Microsoft's Security Risk Detection Service [2].
	 
	  The goal of the project develop a concolic testing
	  engine on a simple imperative language suitable
	  for teaching the core principles behind the technique. 
	 
	  The project is most suitable for a student with interest in
	  software testing. 
	 
	  [1] Concolic testing. Wikipedia entry. en.wikipedia.org/wiki/Concolic_testing
	   | 
Last updated at: 5:15pm, Sept 21, 2019