In an attempt to improve software quality and programmer productivity, software engineers have focused on improving the software development process. Another approach to the quality and productivity problem, similar to but crucially different from the software-process approach, is improving the design and implementation of individual components of a system. In order to achieve improvements one component at a time, this research applies software engineering principles to individual component design.
Engineering principles alone are not enough, however. A "software discipline" comprising goals, properties, principles and local certification techniques is needed. "Goals" are concerned with improvement in the overall software process (e.g., improved programmer productivity). The "properties" are those characteristics each component should possess in order to achieve the goals (e.g., composability). The "principles" are very detailed language-dependent guidelines that lead the engineer to high-quality component designs and implementations. "Certification techniques" are specific methods that permit one-time certification of component possession of the properties. "Local" certification techniques permit certification for component C without knowledge of any of C's clients, and without knowledge of implementation details of any component used in C's implementation.
The RESOLVE/Ada Discipline--for constructing components in Ada--is defined with the goals of improved programmer productivity and systems that are easier to maintain. There are four component properties: correctness, composability, reusability and understandability. There are 41 specific principles governing component construction. Finally, all four properties are shown to be locally certifiable.
Locally certifying correctness of component C (i.e., certifying that C's implementation meets its specification) is the biggest problem. In the proposed discipline, it requires examining C's package specification (including embedded comments formally specifying C's behavior) and the package specification of each component used in C's implementation--but nothing else.
Examination of several existing component libraries and frameworks for constructing components show that some implicitly define parts of a discipline (e.g., some have goals and properties while others have properties and principles). However, none explicitly defines a discipline and more importantly none even mentions the need for certification, local or not.
Numerous certified RESOLVE/Ada components (package specifications and bodies) are provided as examples.
Cited By
- Ducasse S, Nierstrasz O, Schärli N, Wuyts R and Black A (2006). Traits, ACM Transactions on Programming Languages and Systems (TOPLAS), 28:2, (331-388), Online publication date: 1-Mar-2006.
- Ramachandran M (2005). Software reuse guidelines, ACM SIGSOFT Software Engineering Notes, 30:3, (1-8), Online publication date: 1-May-2005.
- Hollingsworth J, Blankenship L and Weide B Experience report Proceedings of the 8th ACM SIGSOFT international symposium on Foundations of software engineering: twenty-first century applications, (11-19)
- Hollingsworth J, Blankenship L and Weide B (2000). Experience report, ACM SIGSOFT Software Engineering Notes, 25:6, (11-19), Online publication date: 1-Nov-2000.
- Long T, Weide B, Bucci P, Gibson D, Hollingsworth J, Sitaraman M and Edwards S Providing intellectual focus to CS1/CS2 Proceedings of the twenty-ninth SIGCSE technical symposium on Computer science education, (252-256)
- Long T, Weide B, Bucci P, Gibson D, Hollingsworth J, Sitaraman M and Edwards S (1998). Providing intellectual focus to CS1/CS2, ACM SIGCSE Bulletin, 30:1, (252-256), Online publication date: 1-Mar-1998.
- Edwards S (1997). Representation Inheritance, IEEE Transactions on Software Engineering, 23:2, (83-92), Online publication date: 1-Feb-1997.
- Frakes W and Fox C (1996). Quality Improvement Using A Software Reuse Failure Modes Model, IEEE Transactions on Software Engineering, 22:4, (274-279), Online publication date: 1-Apr-1996.
- Davis M Adaptable, reusable code Proceedings of the 1995 Symposium on Software reusability, (38-46)
- Davis M (1995). Adaptable, reusable code, ACM SIGSOFT Software Engineering Notes, 20:SI, (38-46), Online publication date: 1-Aug-1995.
- Whittle B (1995). Models and languages for component description and reuse, ACM SIGSOFT Software Engineering Notes, 20:2, (76-89), Online publication date: 1-Apr-1995.
- Weide B, Heym W and Hollingsworth J Reverse engineering of legacy code exposed Proceedings of the 17th international conference on Software engineering, (327-331)
- Zweben S, Edwards S, Weide B and Hollingsworth J (1995). The Effects of Layering and Encapsulation on Software Development Cost and Quality, IEEE Transactions on Software Engineering, 21:3, (200-208), Online publication date: 1-Mar-1995.
- Weide B, Edwards S, Harms D and Lamb D (2019). Design and Specification of Iterators Using the Swapping Paradigm, IEEE Transactions on Software Engineering, 20:8, (631-643), Online publication date: 1-Aug-1994.
- Levine T (1994). Reusable software components, ACM SIGAda Ada Letters, XIV:4, (23-27), Online publication date: 1-Jul-1994.
- Poulin J and Tracz W (1994). WISR'93: 6th annual workshop on software reuse, ACM SIGSOFT Software Engineering Notes, 19:1, (55-71), Online publication date: 1-Jan-1994.
- Levine T (1994). Reusable software components, ACM SIGAda Ada Letters, XIV:6, (41-52), Online publication date: 1-Nov-1994.
- Sitaraman M and Gray J Software reuse Proceedings of the conference on TRI-Ada '93, (137-146)
Index Terms
- Software component design-for-reuse: a language-independent discipline applied to ADA
Recommendations
Software Component Models
Component-based Development (CBD) is an important emerging topic in Software Engineering, promising long sought after benefits like increased reuse, reduced time-to-market and hence software production cost. The cornerstone of a CBD technology is its ...
Integrating component-based and reuse-driven software engineering business into software and information engineering curriculum
FIE '00: Proceedings of the 30th Annual Frontiers in Education - Volume 01Component-based enterprise software engineering (CBESE) is a rapidly emerging trend in the software engineering area. In the CBESE approach, software systems are no longer built from scratch. Instead, reusable software components, built by in-house ...