This Article 
 Bibliographic References 
 Add to: 
Build-Level Components
July 2005 (vol. 31 no. 7)
pp. 588-600
Reuse between software systems is often not optimal. An important reason is that while at the functional level well-known modularization principles are applied for structuring functionality in modules, this is not the case at the build level for structuring files in directories. This leads to a situation where files are entangled in directory hierarchies and build processes, making it hard to extract functionality and to make functionality suitable for reuse. Consequently, software may not come available for reuse at all, or only in rather large chunks of functionality, which may lead to extra software dependencies. In this paper, we propose to improve this situation by applying component-based software engineering (CBSE) principles to the build level. We discuss how existing software systems break CBSE principles, we introduce the notion of build-level components, and we define rules for developing such components. To make our techniques feasible, we define a reengineering process for semiautomatically transforming existing software systems into build-level components. Our techniques are demonstrated in two case studies where we decouple the source tree of Graphviz into 46 build-level components and analyze the source tree of Mozilla.

[1] L.A. Belady and M.M. Lehman, “A Model of Large Program Development,” IBM Systems J., vol. 15, no. 3, pp. 225-252, 1976.
[2] J. Bergstra and P. Klint, “The Discrete Time ToolBus— A Software Coordination Architecture,” Science of Computer Programming, vol. 31, nos. 2-3, pp. 205-229, July 1998.
[3] M. van den Brand, A. van Deursen, J. Heering, H. Jong, M. de Jonge, T. Kuipers, P. Klint, L. Moonen, P. Olivier, J. Scheerder, J. Vinju, E. Visser, and J. Visser, “The ASF+SDF Meta-Environment: A Component-Based Language Development Environment,” Proc. Conf. Compiler Construction (CC '01), R. Wilhelm, ed., 2001.
[4] A. Capiluppi, M. Morisio, and J.F. Ramil, “The Evolution of Source Folder Structure in Actively Evolved Open Source Systems,” Proc. 10th Int'l Symp. Software Metrics (METRICS '04), L. Ott, ed., pp. 2-13, 2004.
[5] A. Capiluppi, M. Morisio, and J.F. Ramil, “Structural Evolution of an Open Source System: A Case Study,” Proc. 12th IEEE Int'l Workshop Program Comprehension (IWPC '04), pp. 172-182, 2004.
[6] Y. Chiricota, F. Jourdan, and G. Melanoon, “Software Components Capture Using Graph Clustering,” Proc. 11th Int'l Workshop Program Comprehension (IWPC '03), pp. 217-226, May 2003.
[7] M. de Jonge, “Multi-Level Component Composition,” Proc. Second Groningen Workshop Software Variability Modeling (SVM '04), no. 2004-7-01, J. Bosch, ed., Dec. 2004.
[8] D. Doval, S. Mancoridis, and B.S. Mitchell, “Automatic Clustering of Software Systems Using a Genetic Algorithm,” Proc. Software Technology and Eng. Practice, pp. 73-81, 1999.
[9] Free Software Foundation, GNU Coding Standards, 2004,
[10] E. Gansner and S. North, “An Open Graph Visualization System and Its Applications to Software Engineering,” Software— Practice and Experience, vol. 30, no. 11, pp. 1203-1233, Sept. 2000.
[11] Graphviz, http:/, 2005.
[12] A. van der Hoek and A. Wolf, “Software Release Management for Component-Based Software,” Software— Practice and Experience, vol. 33, no. 1, pp. 77-98, Jan. 2003.
[13] R. Holt, M. Godfrey, and X. Dong, “The Build/Comprehend Pipelines,” Proc. Second ASERC Workshop Software Architecture, Feb. 2003.
[14] M. de Jonge, “The Linux Kernel as Flexible Product-Line Architecture,” Technical Report SEN-R0205, CWI, 2002.
[15] M. de Jonge, “Source Tree Composition,” Proc. Seventh Int'l Conf. Software Reuse, C. Gacek, ed., Apr. 2002.
[16] M. de Jonge, “Package-Based Software Development,” Proc. 29th Euromicro Conf., pp. 76-85, Sept. 2003.
[17] M. de Jonge, “To Reuse or to Be Reused: Techniques for Component Composition and Construction,” PhD thesis, Faculty of Natural Sciences, Math., and Computer Science, Univ. of Amsterdam, Jan. 2003.
[18] R. Koschke and T. Eisenbarth, “A Framework for Experimental Evaluation of Clustering Techniques,” Proc. IEEE Eighth Int'l Workshop Program Comprehension (IWPC '00), pp. 201-210, June 2000.
[19] The Linux Kernel Archives, http:/, 2005.
[20] D. Mackenzie, B. Elliston, and A. Demaile, “Autoconf: Creating Automatic Configuration Scripts,” Free Software Foundation, 2002,
[21] D. Mackenzie and T. Tromey, “GNU Automake Manual,” Free Software Foundation, 2003,
[22] S. Mancoridis, B.S. Mitchell, Y. Chen, and G. Gansner, “Bunch: A Clustering Tool for the Recovery and Maintenance of Software System Structures,” Proc. IEEE Int'l Conf. Software Maintenance, pp. 50-59, 1999.
[23] S. Mancoridis, B.S. Mitchell, C. Rorres, C. Chen, and E.R. Gansner, “Using Automatic Clustering to Produce High-Level System Organizations of Source Code,” Proc. 1998 Int'l Workshop Program Understanding (IWPC '98), pp. 45-52, 1998.
[24] P. Miller, “Recursive Make Considered Harmful,” Unix/Linux J. (AUUGN), vol. 19, no. 1, pp. 14-25, 1998, http://aegis.sourceforge. netauug97.pdf.
[25] Mozilla, http:/, 2005.
[26] Mozilla's build system, , 2005
[27] G.C. Murphy, D. Notkin, and K.J. Sullivan, “Software Reflexion Models: Bridging the Gap Between Design and Implementation,” IEEE Trans. Software Eng., vol. 27, no. 4, pp. 364-380, Apr. 2001.
[28] R. van Ommering, F. van der Linden, J. Kramer, and J. Magee, “The Koala Component Model for Consumer Electronics Software,” Computer, vol. 33, no. 3, pp. 78-85, Mar. 2000.
[29] OpenOffice, http:/, 2005.
[30] D.L. Parnas, “On the Criteria to be Used in Decomposing Systems into Modules,” Comm. ACM, vol. 15, no. 12, pp. 1053-1058, Dec. 1972.
[31] R. Russell, D. Quinlan, and C. Yeoh, “Filesystem Hierarchy Standard,” technical report, Filesystem Hierarchy Standard Group, 2004.
[32] C. Szyperski, Component Software: Beyond Object-Orientated Programming, second ed., Addison-Wesley, 2002.
[33] Q. Tu, M. Godfrey, and X. Dong, “The Build-Time Architectural View,” Proc. Int'l Conf. Software Maintenance (ICSM 2001), pp. 398-407, Nov. 2001.
[34] T.A. Wiggerts, “Using Clustering Algorithms in Legacy Systems Remodularization,” Proc. Fourth Working Conf. Reverse Eng., pp. 33-43, 1997.

Index Terms:
Index Terms- CBSE, software component, software reuse, software construction, software engineering, source tree composition, build level.
Merijn de Jonge, "Build-Level Components," IEEE Transactions on Software Engineering, vol. 31, no. 7, pp. 588-600, July 2005, doi:10.1109/TSE.2005.77
Usage of this product signifies your acceptance of the Terms of Use.