Improving Design Decomposition

Decomposing a system into subsystems is essential to the design of large software systems. Traditionally, it is performed intuitively without rigorously analyzing the system model. This makes it difficult to check the decomposition correctness, and risks creating subsystems that are either too tightly coupled or not cohesive enough. An aggravating factor is that traditionally classes are the atomic design units. In many cases, however, the same classes play a role in more than one subsystem, and partitioning them unbroken among the subsystems may increase coupling and reduce cohesion. We present an analytical approach that enables reasoning about early exploration of decomposition alternatives. In addition, we describe a visual notation for diagramming the composition of subsystems, and an automatic technique for suggesting good decompositions. A key to our approach is that individual relations, not classes, are the atomic design units. We illustrate the approach with examples and demonstrate its effectiveness on a commercial system.

[1]  F. Brito e Abreu,et al.  Coupling and cohesion as modularization drivers: are we being over-persuaded? , 2001, Proceedings Fifth European Conference on Software Maintenance and Reengineering.

[2]  Soo Dong Kim,et al.  Component identification method with coupling and cohesion , 2001, Proceedings Eighth Asia-Pacific Software Engineering Conference.

[3]  Sven Overhage,et al.  On Component Identification Approaches - Classification, State of the Art, and Comparison , 2009, CBSE.

[4]  Satoru Kawai,et al.  An Algorithm for Drawing General Undirected Graphs , 1989, Inf. Process. Lett..

[5]  Carroll Morgan,et al.  Programming from specifications , 1990, Prentice Hall International Series in computer science.

[6]  Martin Fowler Reducing Coupling , 2001, IEEE Softw..

[7]  Jean-Loup Guillaume,et al.  Fast unfolding of communities in large networks , 2008, 0803.0476.

[8]  Bernd Bruegge,et al.  Object-Oriented Software Engineering Using UML, Patterns, and Java , 2009 .

[9]  Andrew William Roscoe,et al.  The Theory and Practice of Concurrency , 1997 .

[10]  D. L. Parnas,et al.  On the criteria to be used in decomposing systems into modules , 1972, Software Pioneers.

[11]  Xu Xiao-Fei,et al.  Business component identification of enterprise information system: a hierarchical clustering method , 2005, IEEE International Conference on e-Business Engineering (ICEBE'05).

[12]  Vojislav B. Misic,et al.  Measuring class coupling and cohesion: a formal metamodel approach , 1997, Proceedings of Joint 4th International Computer Science Conference and 4th Asia Pacific Software Engineering Conference.

[13]  Jehad Al Dallal Measuring the Discriminative Power of Object-Oriented Class Cohesion Metrics , 2011, IEEE Transactions on Software Engineering.

[14]  Mathieu Bastian,et al.  Gephi: An Open Source Software for Exploring and Manipulating Networks , 2009, ICWSM.

[15]  Jean-Raymond Abrial,et al.  Refinement, Decomposition, and Instantiation of Discrete Models: Application to Event-B , 2007, Fundam. Informaticae.

[16]  Jan Jürjens,et al.  A Platform for Empirical Research on Information System Evolution , 2015, ICSE 2015.

[17]  Tracy Hall,et al.  Measuring OO systems: a critical analysis of the MOOD metrics , 1999, Proceedings Technology of Object-Oriented Languages and Systems. TOOLS 29 (Cat. No.PR00275).

[18]  Steffen Becker,et al.  Reverse Engineering Component Models for Quality Predictions , 2010, 2010 14th European Conference on Software Maintenance and Reengineering.

[19]  Jean-Raymond Abrial,et al.  The B-book - assigning programs to meanings , 1996 .

[20]  Allen H Dutoit,et al.  Object-Oriented Software Engineering , 2011 .

[21]  Daniel Jackson,et al.  Software Abstractions - Logic, Language, and Analysis , 2006 .

[22]  Soo Dong Kim,et al.  A systematic method to identify software components , 2004, 11th Asia-Pacific Software Engineering Conference.

[23]  Chung-Horng Lung,et al.  Software Architecture Decomposition Using Attributes , 2007, Int. J. Softw. Eng. Knowl. Eng..