Abstract
One key to several quality factors of software is the way components are connected. Software coupling can be used to estimate a number of quality factors, including maintainability, complexity, and reliability. Object-oriented languages are designed to reduce the number of dependencies among classes, which encourages separation of concerns and should reduce the amount of coupling. At the same time, the object-oriented language features change the way the connections are made, how they must be analyzed, and how they are measured. This paper discusses software couplings based on object-oriented relationships between classes, specifically focusing on types of couplings that are not available until after the implementation is completed, and presents a static analysis tool that measures couplings among classes in Java packages. Data from evaluating the tool on several open-source projects are provided. The coupling measurement is based on source code, which has the advantage of being quantitative and more precise than previous measures, but the disadvantage of not being available before implementation, and thus not useful for some predictive efforts.
Similar content being viewed by others
Notes
Online at http://www.uml.org/.
Online at: http://jakarta.apache.org/tomcat/.
Online at: http://www.antlr.org/download.html.
Online at: http://ostermiller.org/tulipchain/.
Online at: http://jakarta.apache.org/velocity/.
The developer, Terence Parr at University of San Francisco, explained via email that version 2 had significant problems, which recently motivated him to write version 3.
References
Abdurazik, A., & Offutt, J. (2006). Coupling-based class integration and test order. In Workshop on Automation of Software Test (AST 2006) Shanghai, China, May 2006 (pp. 50–56).
Abdurazik, A., & Offutt, J. (2007). Using coupling-based weights for the class integration and test order problem. The Computer Journal, 1–14, doi:10.1093/comjnl/bxm054.
Alexander, R. T., & Offutt, J. (1999). Analysis techniques for testing polymorphic relationships. In Proceedings of the Thirtieth International Conference on Technology of Object-Oriented Languages and Systems (TOOLS USA ’99), August 1999 (pp. 104–114). Santa Barbara, CA: IEEE Computer Society Press.
Alexander, R. T., & Offutt, J. (2000). Criteria for testing polymorphic relationships. In Proceedings of the 11th International Symposium on Software Reliability Engineering, October 2000 (pp. 15–23). San Jose, CA: IEEE Computer Society Press.
Arisholm, E. (2002). Dynamic coupling measures for object-oriented software. In Proceedings of the Eighth IEEE Symposium on Software Metrics (METRICS’02), June 2002 (pp. 33–42). IEEE.
Bansiya, J. (2000). Evaluating framework architecture structural stability. ACM Computing Surveys, 32(1).
Basili, V., Briand, L., & Melo, W. (1996). A validation of object-oriented design metrics as quality indicators. IEEE Transactions on Software Engineering, 22(10), 751–761.
Bilal, H. Z., & Black, S. (2006). Computing ripple effect for object oriented software. In Quantitative Approaches in Object-Oriented Software Engineering (QAOOSE), Nantes, France, July 2006.
Black, S. (2001). Computing ripple effect for software maintenance. Journal of Software Maintenance: Research and Practice, 13(4), 263.
Bohner, S. A., & Arnold, R. S. (1996). Software change impact analysis. Los Alamitos, CA: IEEE Computer Society Press.
Briand, L. C., Daly, J. W., & Wüst, J. K. (1999a). A unified framework for coupling measurement in object-oriented systems. IEEE Transactions on Software Engineering, 25(1), 91–121.
Briand, L., Devanbu, P., & Melo, W. (1997). An investigation into coupling measures for C++. In Proceedings of the Nineteenth International Conference on Software Engineering, May 1997 (pp. 412–421). Boston, MA: IEEE Computer Society Press.
Briand, L., Feng, J., & Labiche, Y. (2002). Using genetic algorithms and coupling measures to devise optimal integration test orders. In Proceedings of the 14th International Conference on Software Engineering and Knowledge Engineering (pp. 43–50). Ischia, Italy: IEEE Computer Society Press.
Briand, L., Labiche, Y., & Wang, Y. (2003). An investigation of graph-based class integration test order strategies. IEEE Transactions on Software Engineering, 29(7), 594–607.
Briand, L., Wüst, J., & Lounis, H. (1999b). Using coupling measurement for impact analysis in object-oriented systems. In Proceedings of the 1999 IEEE Conference on Software Maintenance, Oxford, UK, August 1999 (pp. 475–482).
Briand, L. C., Wüst, J., & Lounis, H. (1999). Using coupling measurement for impact analysis in object-oriented systems. In Proceedings of the IEEE International Conference on Software Maintenance (ICSM). Oxford, UK: IEEE Computer Society Press.
Chidamber, S. R., & Kemerer, C. F. (1992). A metrics suite for object oriented design. IEEE Transactions on Software Engineering, 20(6), 476–493.
Coad, P., & Yourdon, E. (1991a). Object-oriented analysis. Englewood Cliffs, NJ: Prentice-Hall.
Coad, P., & Yourdon, E. (1991b) Object-oriented analysis (2nd edn.). Englewood Cliffs, NJ: Prentice-Hall.
Collofello, J. S., & Vennergrund, D. A. (1987). Ripple effect analysis based on semantic information. In AFIPS Conference Procceddings (NCC) (Vol. 56, pp. 657–682). ACM SIGSOFT/SIGPLAN.
Constantine, L. L., & Yourdon, E. (1979). Structured design. Englewood Cliffs, NJ: Prentice-Hall.
Eder, J., Kappel, G., & Schrefl, M. (1994). Coupling and cohesion in object-oriented systems. Technical report, University of Klagenfurt.
El Emam, K., Melo, W., & Machado, J. C. (2001). The prediction of faulty classes using object-oriented design metrics. Journal of Systems and Software, 56(1), 51–62.
Elish, M. (2005). A case study on structural characteristics of object-oriented design and its stability. In Proceedings of the 23rd IASTED International Multi-Conference: Software Engineering, Innsbruck, Austria, February 2005.
Epping, A., & Lott, C. M. (1994). Does software design complexity affect maintenance effort? In Proceedings of the 19th NASA Software Engineering Laboratory Workshop, Goddard Space Center, December 1994.
Fenton, N., & Melton, A. (1990). Deriving structurally based software measures. Journal of Systems and Software, 12(3), 177–886.
Fenton, N. E., & Pfleeger, S. L. (1997). Software metrics: A rigorous & practical approach (2nd edn.). Boston, MA: PWS Publishing Company.
Ferneley, E. (2000). Coupling and control flow measures in practice. Journal of Systems and Software, 51(2), 99–109.
Grosser, D., Sahraoui, H., & Valtchev, P. (2002). Predicting software stability using case-based reasoning. In Proceedings 17th IEEE International Conference on Automated Software Engineering, Edinburgh, UK, September 2002 (pp. 295–298).
Grosser, D., Sahraoui, H., & Valtchev, P. (2003). An analogy-based approach for predicting design stability of Java classes. In Proceedings 9th International Software Metrics Symposium, Sydney, Australia, September 2003 (pp. 252–262).
Hall, G. A., Tao, W., & Munson, J. C. (2005). Measurement and validation of module coupling attributes. Software Quality Journal, 13, 281–296.
Harman, M., Okunlawon, M., Sivagurunathan, B., & Danicic, S. (1997). Slice-based measurement of coupling. In IEEE/ACM ICSE workshop on Process Modelling and Empirical Studies of Software Evolution (PMESSE’97), Boston, MA, May 1997 (pp. 28–32).
Henry, S., & Kafura, D. (1981). Software structure metrics based on information flow. IEEE Transactions on Software Engineering, 7(5), 510–518.
Hitz, M., & Montazeri, B. (1995). Measuring coupling and cohesion in object-oriented systems. In Proceedings of the International Symposium on Applied Corporate Computing, Monterrey, Mexico, October 1995 (pp. 412–421).
Hutchens, D. H., & Basili, V. R. (1985). System structure analysis: Clustering with data bindings. IEEE Transactions on Software Engineering, 11(8), 749–757.
IEEE. (1990). Standard glossary of software engineering terminology. New York: Institute of Electrical and Electronic Engineers. ANSI/IEEE Std 610.12-1990.
IEEE. (1998). Standard for a software quality metrics methodology. New York: Institute of Electrical and Electronic Engineers. ANSI/IEEE Std 1061-1998.
Ince, D. (1988). Software development: Fashioning the baroque. Oxford, UK: Oxford University Press.
Inc StatSoft. (2006). Electronic statistics textbook. StatSoft (online), Tulsa, OK. http://www.statsoft.com/textbook/stathome.html.
Jalote, P. (1991). An integrated approach to software engineering. New York, NY: Springer-Verlag.
Jazayeri, M. (2002). On architectural stability and evolution. In Reliable Software Technlogies-Ada-Europe 2002, Lecture Notes in Computer Science (pp. 13–23). Springer-Verlag.
Jazayeri, M., Gall, H., & Hajek, K. (1998). Detection of logical coupling based on product release history. In Proceedings of the 1998 IEEE Conference on Software Maintenance, Bethesda, MD, November 1998 (pp. 190–198).
Jin, Z., & Offutt, J. (1995). Integration testing based on software couplings. In Proceedings of the Tenth Annual Conference on Computer Assurance (COMPASS 95), June 1995 (pp. 13–23). Gaithersburg, MD: IEEE Computer Society Press.
Jin, Z., & Offutt, J. (1998). Coupling-based criteria for integration testing. Software Testing, Verification, and Reliability, 8(3), 133–154.
Kafura, D., & Henry, S. (1981). Software quality metrics based on interconnectivity. Journal of Systems and Software, 2, 121–131.
Kung, D., Gao, J., Hsia, P., Lin, J., & Toyoshima, Y. (1995). Class firewall, test order, and regression testing of object-oriented programs. Journal of Object-Oriented Programming, 8(2), 51–65.
Kung, D., Gao, J., Hsia, P., Toyoshima, Y., Chen, C., Kim, Y.-S., & Song, Y.-K. (1995). Developing an object-oriented software testing and maintenance environment. Communications of the ACM, 38(10), 75–88.
Langley, R. (1971). Practical statistics simply explained. New York: Dover Publications.
Li, W., Etzkorn, L., Davis, C., & Talburt, J. (2000). An empirical study of object-oriented system evolution. Information and Software Technology, 42(6), 373–381.
Malloy, B. A., Clarke, P. J., & Lloyd, E. L. (2003). A parameterized cost model to order classes for class-based testing of C++ applications. In Proceedings of the 14th International Symposium on Software Reliability Engineering. Denver, CO: IEEE Computer Society Press.
Martin, R. C. (2003). Agile software development: Principles, patterns, and practices. Upper Saddle River, NJ: Prentice Hall.
May, J., Hughes, G., & Shaban, N. (1999). Formal coupling of software components. In Fifteenth Annual UK Performance Engineering Workshop (pp. 35–44). Research Press.
McCabe, T. J. (1967). A complexity measure. IEEE Transactions on Software Engineering, 2(4), 308–320.
Myers, G. (1974). Reliable software through composite design. New York, NY: Mason and Lipscomb Publishers.
Offutt, J., Harrold, M. J., & Kolte, P. (1993). A software metric system for module coupling. Journal of Systems and Software, 20(3), 295–308.
Offutt, J., & Li, L. (1996). Algorithmic analysis of the impact of changes to object-oriented software. In Proceedings of 1996 IEEE Conference on Software Maintenance, November 1996 (pp. 171–184). Monterey, CA: IEEE Computer Society Press.
Orso, A., & Pezze, M. (1999). Integration testing of procedural object oriented programs with polymorphism. In Proceedings of the Sixteenth International Conference on Testing Computer Software, June 1999 (pp. 103–114). Washington DC: ACM SIGSOFT.
Page-Jones, M. (1980). The practical guide to structured systems design. New York, NY: YOURDON Press.
Parr, T. (1997). ANother Tool for Language Recognition. http://www.antlr.org. Accessed March 2008.
Schach, S. R., Jin, B., Wright, D. R., Heller, G. Z., & Offutt, A. J. (2002). Maintainability of the Linux kernel. IEEE Proceedings, Special Issue on Open Source Software Engineering, 149(1), 18–23.
Schneidewind, N. F. (1992). Methodology for validating software metrics. IEEE Transactions on Software Engineering, 18(5), 410–422.
Selby, R. W., & Basili, V. R. (1991). Analyzing error-prone system structure. IEEE Transactions on Software Engineering, 17(2), 141–152.
Stephens, M. A. (1974). EDF statistics for goodness of fit and some comparisons. Journal of the American Statistical Association, 69(347), 730–737.
Stevens, W. P., Myers, G. J., & Constantine, L. L. (1974). Structured design. IBM Systems Journal, 13(2), 115–139.
Tai, K.-C., & Daniels, F. J. (1997). Test order for inter-class integration testing of object-oriented software. In The Twenty-First Annual International Computer Software and Applications Conference (COMPSAC ’97), August 1997 (pp. 602–607). Santa Barbara, CA: IEEE Computer Society.
Troy, D. A., & Zweben, S. H. (1981). Measuring the quality of structured designs. Journal of Systems and Software, 2, 112–120.
Wilkie, F. G., & Kitchenham, B. A. (2000). Coupling measures and change ripples in C++ application software. Journal of Systems and Software, 52(2–3):157–164. Maintenance, OO, Metrics.
Xia, F. (2000). On the concept of coupling, its modeling and measurement. Journal of Systems and Software, 50(1), 75–84.
Yau, S. S., & Collofello, J. S. (1980). Some stability measures for software maintenance. IEEE Transactions on Software Engineering, 6(6).
Acknowledgments
This work was sponsored in part by the National Science Foundation under grant number CCR-0097056. Offutt and Abdurazik were sponsored in part by National Institute of Standards and Technology (NIST), Software Diagnostics and Conformance Testing Division (SDCT) in support of its standards and conformance testing program. Thanks to Terence Parr, the developer of ANTLR, for the tool and for quick answers to our pushy questions.
Author information
Authors and Affiliations
Corresponding author
Rights and permissions
About this article
Cite this article
Offutt, J., Abdurazik, A. & Schach, S.R. Quantitatively measuring object-oriented couplings. Software Qual J 16, 489–512 (2008). https://doi.org/10.1007/s11219-008-9051-x
Published:
Issue Date:
DOI: https://doi.org/10.1007/s11219-008-9051-x