I’ve worked on the MathCast practice for at least one month in total. Four weeks ago, I drew the code structure (my purpose was to find out its architecture) by viewing its C++ source code, and three weeks ago I again tried to find out what kind of architecture it had by using the reverse engineering feature in Enterprise Architect which imported the C++ source code and provided its corresponding UML model class diagram. However, the resulted class diagram had even more dependencies among its classes than my first hand-drawn structure. After some attempts to analyse its architecture so far, I think it’s time to put an end to this practice.
After some analysis about the real architecture from the code of version 0.83, I conclude the practice with the following points: 1. What really constitutes software architecture? Though I don’t have a definite and comprehensive answer, I believe that components are an essential part of architecture, no matter whether the component is a function block or a class or something else. And so is the connections among components. But in some views of software architecture, the view might show no connections among its components, not explicitly, whereas somehow it still could disclose some underlying interactions among some components through its hierarchy or something similar. 2. Software architecture should have a fine granularity of functional decomposition, and functionality/responsibility should be classified appropriately, otherwise there’s a great risk that the resulted architecture would have lots of messy dependencies. 3. Software architecture manifests an abstract summary of the software. It should give viewers a general understanding of the software.
I didn’t do much work attempting to relate requirements to architecture as the architecture is not ideal enough and I guess this architecture is not intentionally designed as well. But maybe it is worth trying to see what they result in when there are architecturally significant requirements that haven’t been considered into or reflected in the architecture. Well, because of my limited knowledge about software architecture so far, I can’t dig out any more valuable discoveries in this practice. But I hope in my later research I could find something more interesting and I am looking forward to it.