Abstract:
The DSheet project aims to teach undergraduate students how to properly design a relatively complex application. Most software design examples shown to students come from a confusingly wide range of domains and cover only specific problems. The students are never exposed to the principled design and subsequent construction of a full-scale non-trivial application. The main challenge of this project was to find an application that is complex enough to demonstrate all aspects of good software design, while being simple enough to be understood by students without much prior knowledge. We think that commonly known spreadsheets fulfill this objective. We show that a spreadsheet can be divided into several small components. Each component can then be designed independently. This will allow an iterative progression through increasingly complex prototypes. It is possible to demonstrate the use of design patterns in the prototypes and the incremental development necessitates regressive testing. A document containing the complete design, expressed in UML Class Diagrams, Object Interaction Diagrams and DCharts, is available as a teaching tool. A fully tested, complete, and documented implementation of the presented design is also available. We believe that with DSheet, students will be able to understand more clearly the links between the various constructs used while designing a complex application.
The design document is always in construction! The essential of the design is described, but there is always place for improvements. DSheet was a side project for me, now I need to continue with my thesis. I will continue to update the document, but suggestions are warmly accepted! I also hope that this project will be useful for others: If you want to use it, please do! I am still young, and I am sure that some experienced programmers/designers could add a lot to DSheet and make it a must for learning software design! If you are interested in this project, please email me. It would be nice to have multiple implementations of the design! Also many more features need to be designed!
A python implementation that follows the design specified above was developed. Five prototypes were incrementally built and tested. HTML documentation was generated in the form of epydoc. The code is also well-commented and (I hope) easy to read. A particular attention was given to variable names. The implementation of each prototype is discussed in the design document as an example of a realized design. Each prototype is released under the GNU General Public License.