Design Patterns – How to Describe the Architecture of a Software Product

Architecturedesign-patternsdocumentation

I'm working on my CS Masters thesis at a company which does user interfaces in the field of embedded devices. As part of that I am developing a library for integrating a certain device. My C++ library wraps the device drivers and integrates the device's features in the Qt framework so that it can be used with a variety of Qt/QML-based applications.

So far I have written many notes and detailed API documentation (using Doxygen). But I have no idea how to properly format all the information in order to provide a good overview of my work in the thesis. Simply using the API documentation doesn't make sense since 1) it's way too detailed and 2) doesn't exactly give a formal overview of how things are structured and work together.

From what I know I have to describe at least the following aspects of the software product I'm developing:

  • Technology(ies): which technologies I have used. I have split my project into:

    • a library which provides device management, data conversion, and Qt integration;
    • tests; and
    • a collection of ready-made Qt widgets which use the library.
  • Patterns: what software patterns I have used (MVC, Singleton, Factory, Observer etc.). The problem here is that there are many, many patterns out there and there is a known inconsistency when it comes to which pattern is what exactly (alone the MVC pattern is very famous for it – pick three books from different authors and there is a very high chance that the descriptions of this pattern vary greatly!). Personally I work following the principle "XYZ makes sense to me hence I will use it", which probably many of you will find too broad. 😀

  • Information flow: mostly sequence and flow diagrams here: if user does action X how does the device and the rest of the system respond to it.

  • Data management: for storing and processing the data from the device, my library uses data containers such as arrays, vectors, hash tables etc..

I doubt that this is enough or even correct that's why I'm asking for help. I was unable to find a step-by-step tutorial that I can follow. I also don't know how deep I have to go.

I have asked my professor about the hardware-level stuff and he said that he doesn't want to see that in the thesis and that I should concentrate on what I am developing.

However this restriction only helps a little bit since Qt framework alone has a huge and complex structure. For example if I use a QVector3D do I have to actually describe in detail what this is and how it's managed or can I assume that a simple "A container for 3D vectors" would suffice?

Frankly, we have studied various software architecture related things like patterns etc, but we were never shown how to formally describe a software system. All I did previously was short lab reports and API documentation + some evaluation statistics about performance.

Best Answer

Consider using 4+1 Architecture view to describe architecture of your software.

Summary of the views is given below:

Development view: An implementation view from software developer perspective. UML Diagrams (such as package diagram) could be used to represent this view.

Logical view: It provides functional view describing functionality that the system provides to end-users. UML diagrams (such as class diagrams, and activity diagrams) could be used to represent the logical view.

Physical view: It reveals a system engineer's point of view. It is also referred as the deployment view. Deployment diagram could be employed to describe the view.

Process view: It captures the dynamic aspects (concurrency, runtime behavior, etc.) of the system. Activity diagrams are suitable for the view.

Scenarios: Scenarios (or use cases) describe sequences of interactions between objects and between processes.

Related Topic