|Author : DAOUDI Samir | Context : MSc Software Engineering – Software Engineering|
The advance in computer technologies in the last decent allowed the appearance of new software-solutions that respond to complex needs. The new software generation is so complex and difficult compared with the 1st generations of these last; this complexity is the consequence of the computer maturity level that we have seen recently. Companies and people are more aware about what they need and how they want it.
Due to this advancement, the software engineering’s methods and approaches also have been enhenced in order to fit efficiently and quickly these changes. One of the greatest approaches in developing software that was thougt and designed to respond to this complexity is the component reusability.
A component is a part of the software, responsible for its own execution, implementation and application and shouldn’t disturb other components in the system (Jawadekar, 2004).
Component reusability can be easily described by the fact of integrating external components or previously developed for different projects components in a new one (Girolami, 2000).
However, things are not so easy as decribed by the different definitions; In order to have a workable solution based on component reusability, some condiftions have to be satisfied:
– The component should perform exactly what is expected to do.
– Developers have to document the component if they distribute it for reuse.
– At least inputs and outputs should be well described (list, types).
– The component shouldn’t have any unexpected behaviour.
– The component shouldn’t have any hidden methods they might be invoked by malicious code…etc.
– The component should be independent…etc. (Lau, 2004).
This is a quick overview of conditions that should be in any component, the last condition which is the component independence is very important; If component does not satisfy this last, it can generate impotant bugs or failures in the final solution being developed.
Let’s suppose that in a scientific calculation software, we have used a predefined component which is responsible of performing some mathematical calculations (Sin, Cos, Tang, Sqr …etc). Our software was developed and different calls and methods’ results are based on that component. If later we decide to use another component (of other developers or other company) the software should run exactly as it was before (or better, in the case we’ve changed the component to fix bugs), and no code modifications or compile would be needed.
Some components needs other external resources (libraries, dll’s or system specifications) and these kind of component can be very dangerous for any system. A well understanding of the internal behaviour is important before any implementation.
What is meant by component independence is that the software should run properly whith any component that is supposed to do the same task.
Two measures are important when considering the component independence: Coupling and Cohesion. We say that components are highly coupled when an interconnexion exist between at least two components (Jawadekar, 2004).
Finally, the object oriented programming has opened new horizons for software engineering and new methods and approaches was developed in order to fit the complexity of new systems.
One approache to optimize, accelerate and enhence development cycle is the component reuse which needs some conditions to be satisfied for successful implementation.
Waman.S Jawaderkar (2004).Software engineering: Principles and practice. ISBN:978-0-07-058371-9.
Kung- Kiu Lau (2004).Component-based software development: Case Studies. ISBN:981-238-828-1.
Mark Girolami (2000). Advances in independent component analysis. ISBN:1-85233-263-8.