|
|
Research Statements
Software reuse is a common practice for developers during software development
to save time and efforts. Software reuse could be in different development
activities and at different abstraction levels such as the reuse of implementation
code, software libraries, application programming interfaces (APIs), frameworks
(e.g. Eclipse, Visual Studio), or more complex: the reuse of algorithms,
protocols, or specifications, etc. Such reuse creates the software artifacts
that contain similar portions, for example, with similar code (often referred
to as code clones), similar algorithms/protocols/specifications, similar
API usages (e.g. usage or programming patterns), similar designs (e.g.
design patterns), similar concerns (e.g. aspects), or similar requirements.
Similar/reused artifacts often require consistent changes because they
evolve in a similar manner (e.g. a similar bug fix could be derived for
buggy code that similarly misuses the same software library as others,
etc). Moreover, similar/reused artifacts require similar treatments, causing
the creation or updating of other similar artifacts at different development
phases. My research focuses on automated methods to detect such software
similarity and leverage such knowledge in providing automatic supports
and recommendations for related development tasks. The departure point
with existing code clones research is that such software similarity is
at higher levels of abstraction.
Software artifacts constantly evolve during the software lifecycle. Software
evolution has been creating many challenging issues in software management.
The maintenance and evolution of software typically accounts for
more than 70% of the total efforts in software development. Especially,
one of great challenges is the tasks of managing software changes and
maintaining the integrity and consistency among software artifacts produced
by developers during various phases of software lifecycle. My research
focuses on how to automate those software development tasks to cope with
software evolution and to improve developers' productivity and software
quality.
|
|