27.03.2014 Views

SEKE 2012 Proceedings - Knowledge Systems Institute

SEKE 2012 Proceedings - Knowledge Systems Institute

SEKE 2012 Proceedings - Knowledge Systems Institute

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Evaluating Open Source Reverse Engineering Tools<br />

for Teaching Software Engineering<br />

Swapna S. Gokhale, Thérèse Smith, and Robert McCartney<br />

Department of Computer Science & Engineering<br />

University of Connecticut, Storrs, CT 06269-2155<br />

E-mail: {ssg,tms08012,robert}@engr.uconn.edu<br />

Abstract<br />

This paper reports our experiences and lessons<br />

in the evaluation of open source, reverse engineering<br />

tools to teach Software Engineering (SE). The<br />

chosen tools were expected to meet a dual objective,<br />

namely: (i) teach students software comprehension,<br />

maintenance and evolutions skills; and (ii) train<br />

them in modern SE tools. A majority of the tools<br />

were disappointing because they did not deliver their<br />

promised functionality. Moreover, the tool that was<br />

ultimately selected because it appeared to function as<br />

stated, posed unexpected problems. We summarize our<br />

lessons, which we hope will inform others who wish to<br />

undertake a similar exercise.<br />

Keywords<br />

Software Engineering Education, Tools, Reverse Engineering<br />

1 Introduction and Motivation<br />

The software industry has witnessed phenomenal<br />

growth over the past two decades. Starting from its<br />

humble beginnings in the 1950s [17], today it is worth<br />

more than $233 billion with a projected annual growth<br />

rate of 17% [23]. This dramatic explosion has created<br />

an extensive need for skilled and talented software engineers.<br />

To respond to this need, most educational<br />

institutions now include Software Engineering (SE) as<br />

a mandatory course in their computing curriculum.<br />

The two key realities of today’s software development<br />

environment include: (a) multiple implementation<br />

technologies; and (b) the need for maintenance<br />

over extended lifetimes [28]. As a result, students hoping<br />

to work as software engineers can expect to maintain<br />

and evolve large, complex legacy software. Therefore,<br />

one of the primary objectives of the SE course<br />

should be to teach students how to comprehend and<br />

evolve existing code. Development of several subsidiary<br />

supporting competencies is implied. For example, the<br />

students should be able to: (i) extract design decisions<br />

and rationale from the code in a top-down, organized<br />

manner using abstractions and tools; (ii) distinguish<br />

between well- and poorly-specified requirements, and<br />

especially identify those that will be difficult to implement<br />

given the structure and organization of the existing<br />

code base; and (iii) produce documentation of good<br />

quality explaining the design rationale.<br />

The software industry commonly uses various tools<br />

to perform software development activities. Some of<br />

these tools improve efficiency and quality of management<br />

and housekeeping tasks; for example, defect<br />

tracking and cost estimation tools [13]. Some tools,<br />

on the other hand, support core design, implementation<br />

and testing functions; for example, configuration<br />

and version control, test case generation and reverse<br />

engineering tools [13]. Increasingly advanced tools<br />

continue to be developed, however, software engineers<br />

show tremendous resistance to their adoption. This<br />

resistance, in part, could be attributed to the sharp<br />

learning curve associated with these tools [9]. Alleviating<br />

this resistance can encourage the adoption of<br />

these tools, and ultimately increase the efficiency and<br />

reduce the costs associated with software development<br />

and maintenance. A possible way to mitigate this resistance<br />

may be to expose and train students in the<br />

different types of SE tools during their school projects.<br />

Our SE course thus has a two-fold objective, namely,<br />

to teach students maintenance and evolution skills,<br />

while training them in modern SE tools. To meet this<br />

dual objective, we sought to evaluate contemporary,<br />

open source tools that would reverse engineer UML diagrams<br />

from the source code. What we expected to be<br />

relatively straightforward, given the plethora of open<br />

source UML tools, turned out to be rather cumbersome<br />

162

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!