cosc 612. software reuse introduction software reuse: the creation of software systems from pre-...

32
AN EXAMINATION OF SOFTWARE REUSE: Benefits, Methods and Challenges COSC 612

Upload: cody-hunter

Post on 27-Dec-2015

231 views

Category:

Documents


0 download

TRANSCRIPT

AN EXAMINATION OF SOFTWARE REUSE:

Benefits, Methods and Challenges

COSC 612

IntroductionSoftware Reuse

Introduction

Software Reuse:The creation of software systems from pre-

existing components rather than building them from scratch [11].

Conceived by Douglas McIlroy in 1968Has long been thought as necessary for the

expedient and cost effective production of software

This is particularly important in today’s industry

Introduction

Software Reuse:Despite this awareness, software reuse is

still not what experts imagine it would beToday nearly all programs utilize reuse in

some wayHowever, large scale systematic adoption

remains elusive and still presents many challenges

Outline

I. Why Software Reuse?a. Needs

b. Benefits

II. Software Reuse ExplainedI. What Can be Reused?

II. How is Software Reused?

III. Promising Developments in Reuse

IV. Challenges and Strategies

V. Conclusion

Needs and BenefitsWhy Software Reuse?

Needs

Ever increasing demands on designers and engineers [15]Large scale, complex softwareRapid and demanding release schedulesMore emphasis on usability and valueHigher quality and customizability [3]Increased productivity

Benefits Productivity Gains

Department of Defense Workforce Analysis [1] Increase in productivity by: ○ • Working faster: 8 percent○ • Working smarter: 17 percent○ • Work avoidance: 47 percent

Return on InvestmentOne study [9] reported values of 210% and 400% over 8 and 10

years. Savings over new development

Cheaper by 40% to 80% [9] Decrease in development effort per module Lower Fault Rates by up to 40% [9]

Benefits NASA actively advocates reuse. A study[16]

of their projects demonstrates time benefits.

Benefits Quality Benefits from NASA study[16]

Benefits Cost Benefits from DoD study[1]

What Can be Reused?Software Reuse Explained

What Can be Reused?

[6]

Reuse of Knowledge

Reuse has grown to include knowledge and documents as well as source code [5][6]Knowledge: Reusing solutions to problems

○ Architecture Patterns○ Design Patterns○ Requirements Reuse○ Has a much greater potential than reusing source

code12.

Reuse of Artifacts Documents

UML standardization has facilitated the reuse of requirement, planning and design documents [12]○ User Stories○ State Diagrams○ Sequence Diagrams○ Data Flow Diagrams

Test CasesUser ManualsInterfaces

Reuse of Source Code

Source CodeMost common form of reuseCode LibrariesCode ScavengingRecent developments in component and

framework technology have made reuse easier [10]○ Provides standard code for common tasks○ Programmers can focus on application code

rather than interface code (back end rather than front end)

Reuse of Source Code Examples of framework technology

○ CORBA (OMG)Middleware to allow programs in multiple languages

and platforms to communicate

○ .NET (Microsoft)Provides a vast library

- User Interfaces- Numeric Algorithms- Database Connectivity- Web Development

Allows for interoperability across multiple languages

○ Java EE

How is Software Reused?

Software Reuse Explained

How are these things reused?

[6]

Reuse Techniques Compositional

System is created from the bottom up out of components

Components ideally remain unchangedSystem can be seen as glued together from

parts of a component repositoryWide scopeRequires

○ Proper documentation○ Well defined retrieval protocols

Reuse Techniques Generative

Reuse system designs to generate new softwareThe design process or architecture is general but

specific to a domain of software○ Narrow scope but powerful

Application GeneratorsLanguage Generators

○ Takes a specific problem and generates the implementation

Transformation Systems○ Semantic behavior is described, then

transformations are applied to create concrete code

Reuse Scope and Mode Horizontal

Pulling in software components used in wide variety of applications

Includes use of:○ Software libraries○ Commercial-off-the-shelf (COTS) components

Compositional in nature Horizontal is typically ad-hoc, or opportunistic

Components are found and used as they are needed, if they are available [11]

Can be unreliable, inconsistent or risky for large application / application families

Reuse Scope and Mode Vertical

Largely untapped by current industry, but has more potential than horizontal, ad-hoc reuse [14]

Involves the creation of a product line, or a family of products with similar functionality

Vertical Reuse is Systematic and PlannedInvolves developing a set of vertical assets,

targeted for a specific product domainRequires large overhead and startup, but will

allow for faster creation of products in the long run [11]

Software Product Lines and Domain Engineering

Recent Developments in Software Reuse

Domain Engineering A vertical systematic process which creates

reusable assets and framework for a particular product family or domainAssets can be architectural designs and patterns

as well as components The family of products engineered from this

domain is called a Software Product Line.Developed from a common set of core assets Each is created in a manner prescribed by the

domain

Domain Engineering Current examples include:

Microsoft OfficeGoogle family (Gmail, Google Voice, Google

Documents) Code and Design are drawn upon vertically

instead of horizontally Reuse has narrower scope, but greater

potential for development efficiency and profitability

Challenges and Strategies

Software Reuse

Challenges and Strategies While there is widespread ad-hoc reuse,

systematic reuse remains to be an industry standard

Some factors in this include:Organizational issues

○ Must have strong management support○ Must have a strong organizational foundation in

place to support systematic reuse○ Requires a coordinated planning effort○ Need for reuse often arises after several variants

of software have been made

Challenges and Strategies Funding

Developing reusable assets requires up front investments

Component must be reused frequently to give a return on investment

Design TimePlanning for systematic reuse often requires

more time due to generality and abstractionsThis will pay off later, but may be difficult at first

Challenges and Strategies Planning

Must have plan for product line evolution so you don’t risk obsolescence

An upfront analysis must be done (domain engineering) to ensure the proper scope and requirements for reuse

Adopt an incremental approach to design so that components may evolve with user requirements

Conclusion Software reuse has become frequently

used, however in a non-systematic, informal way through code libraries, etc.

The most promising method of reuse is systematic, vertical reuse such as is found in product line approaches.

There are great benefits to such reuse, however this has yet to become standard practice in development and remains an emerging branch of software engineering.

References1. Barry Boehm, "Managing Software Productivity and Reuse," Computer, vol. 32, no. 9, pp. 111-113, Sept. 1999, doi:10.1109/2.789755

2. Slawomir Duszynski, Jens Knodel, Martin Becker, "Analyzing the Source Code of Multiple Software Variants for Reuse Potential," wcre, pp.303-307, 2011 18th Working Conference on Reverse Engineering, 2011

3. N. Ilker Altintas, Semih Cetin, Ali H. Dogru, Halit Oguztuzun, "Modeling Product Line Software Assets Using Domain-Specific Kits,"  IEEE Transactions on Software Engineering, 28 Oct. 2011. IEEE computer Society Digital Library. IEEE Computer Society.

4. Jacky Estublier and German Vega. 2005. “Reuse and variability in large software applications”. In Proceedings of the 10th European software engineering conference held jointly with 13th ACM SIGSOFT international symposium on Foundations of software engineering (ESEC/FSE-13). ACM, New York, NY, USA, 316-325. DOI=10.1145/1081706.1081757 http://doi.acm.org/10.1145/1081706.1081757

5. Marcus A. Rothenberger, Kevin J. Dooley, Uday R. Kulkarni, Nader Nada, "Strategies for Software Reuse: A Principal Component Analysis of Reuse Practices," IEEE Transactions on Software Engineering, pp. 825-837, September, 2003

6. William B. Frakes, Kyo Kang, "Software Reuse Research: Status and Future," IEEE Transactions on Software Engineering, pp. 529-536, July, 2005

7. Rubén Prieto-Díaz, "Status Report: Software Reusability," IEEE Software, vol. 10, no. 3, pp. 61-66, May-June 1993, doi:10.1109/52.210605

8. McIlroy, Malcolm Douglas (January 1969). "Mass produced software components". Software Engineering: Report of a conference sponsored by the NATO Science Committee, Garmisch, Germany, 7-11 Oct. 1968. Scientific Affairs Division, NATO. p. 79.

9. Parastoo Mohagheghi and Reidar Conradi. 2007. Quality, productivity and economic benefits of software reuse: a review of industrial studies. Empirical Softw. Engg. 12, 5 (October 2007), 471-516. DOI=10.1007/s10664-007-9040-x http://dx.doi.org/10.1007/s10664-007-9040-x

10.  

11. B.Jalender, Dr A.Govardhan, Dr P.Premchand “A Pragmatic Approach To Software Reuse”, Journal of Theoretical and Applied Information Technology (JATIT) Vol 14 No 2 pp.87-96. JUNE 2010.

12. Charles W. Krueger Software Reuse “ACM Computing Surveys (CSUR) Volume 24, Issue 2 (June 1992) Pages: 131 - 183.

13. H. Gomaa, Designing Software Product Lines with UML: From Use Cases to Pattern-Based Software Architectures. Addison-Wesley, 2004.

14. J. Samentinger, Software Engineering with Reusable Components, Springer Verlag, 1997.

15. Boehm, B., Some Future Trends and Implications for Systems and Software Engineering Processes, Systems Engineering, vol. 9, No. 1, 2006, pp 1-19.

16. Selby RW. Enabling reuse-based software development of large-scale systems. IEEE Transactions on Software Engineering 2005; 31(6):495–510..