ESOF 427
Software Design and Architecture
Fall 2014

Montana Tech
Computer Science & Software Engineering

Keyboard decoder, refactoring

The goal of this assignment is to gain further experience refactoring existing code to achieve strategic closure under expected axes of change. You will practice refactoring code towards the factory and strategy design patterns.


After creating a beautifully designed set of classes to support your company's touchscreen keyboard product, you went on vacation for two weeks. While gone, your manager outsourced some additional development to Elbonia. Specifically, the following features were added: Here is the UML diagram of the classes after Elbonia's modifications:

Now that you are back from vacation, your boss wants the following new features: Being a good software engineer, you argue the right thing to do is to refactor and cleanup Elbonia's mess before embarking on any new features. Your boss grudgingly agrees. So instead of adding any new features, you are to undertake a refactoring of the existing code. Things on your to do list include: There is an existing JUnit test suite that tests most of the functionality of the project. You should use and update the test suite as you proceed through your refactoring.

To get started, downloaded a zip of the Eclipse project: This includes all the source code from the above diagram, as well as the JUnit test suite and the associated support files. Start by verifying all unit test are passed.
Submission. Please submit a zip to the Moodle dropbox containing your Eclipse directory containing your refactored implementation. NOTE: please include your name(s) in your Eclipse project name as this makes it easier for me to import multiple submissions into my Eclipse. You should provide a modified version of my JUnit test programs that provide similar test coverage to my original test suite. All tests should be green.

Page last updated: October 17, 2013