Encapsulation and inheritance in object-oriented programming languages
OOPLSA '86 Conference proceedings on Object-oriented programming systems, languages and applications
Cognitive processes in program comprehension
Papers presented at the first workshop on empirical studies of programmers on Empirical studies of programmers
Mental models and software maintenance
Papers presented at the first workshop on empirical studies of programmers on Empirical studies of programmers
Designing documentation to compensate for delocalized plans
Communications of the ACM
Rigi-A system for programming-in-the-large
ICSE '88 Proceedings of the 10th international conference on Software engineering
Some strategies of reuse in an object-oriented programming environment
CHI '89 Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
Reuse in the context of a transformation-based methodology
Software reusability: vol. 1, concepts and models
Software Engineering Journal
Identifying and Qualifying Reusable Software Components
Computer - Special issue on cryptography
Expert problem solving strategies for program comprehension
CHI '91 Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
IEEE Transactions on Software Engineering
ACM Computing Surveys (CSUR)
A general economics model of software reuse
ICSE '92 Proceedings of the 14th international conference on Software engineering
Automated assistance for program restructuring
ACM Transactions on Software Engineering and Methodology (TOSEM)
Refactoring object-oriented frameworks
Refactoring object-oriented frameworks
Design patterns: elements of reusable object-oriented software
Design patterns: elements of reusable object-oriented software
Sixteen questions about software reuse
Communications of the ACM
The reuse of uses in Smalltalk programming
ACM Transactions on Computer-Human Interaction (TOCHI)
Evaluating software engineering methods and tool—part 4: the influence of human factors
ACM SIGSOFT Software Engineering Notes
Protocol specifications and component adaptors
ACM Transactions on Programming Languages and Systems (TOPLAS)
Extracting Reusable Functions by Flow Graph-Based Program Slicing
IEEE Transactions on Software Engineering
The Role of Opportunism in the Software Design Reuse Process
IEEE Transactions on Software Engineering
How do program understanding tools affect how programmers understand programs?
Science of Computer Programming - Special issue on WCRE 97
SIMULA: an ALGOL-based simulation language
Communications of the ACM
ACM SIGSOFT Software Engineering Notes
DMS: program transformations for practical scalable software evolution
Proceedings of the International Workshop on Principles of Software Evolution
Component Software: Beyond Object-Oriented Programming
Component Software: Beyond Object-Oriented Programming
Success and Failure Factors in Software Reuse
IEEE Transactions on Software Engineering
Object-Oriented Program Comprehension: Effect of Expertise, Task and Phase
Empirical Software Engineering
Design erosion: problems and causes
Journal of Systems and Software
Status Report: Software Reusability
IEEE Software
Architectural Mismatch: Why Reuse Is So Hard
IEEE Software
Architectural Mismatch: Why Reuse Is So Hard
IEEE Software
Locating Features in Source Code
IEEE Transactions on Software Engineering
Navigating and querying code without getting lost
Proceedings of the 2nd international conference on Aspect-oriented software development
Software Product Line Reuse in Practice
ASSET '00 Proceedings of the 3rd IEEE Symposium on Application-Specific Systems and Software Engineering Technology (ASSET'00)
Ciao: a graphical navigator for software and document repositories
ICSM '95 Proceedings of the International Conference on Software Maintenance
Using Coupling Measurement for Impact Analysis in Object-Oriented Systems
ICSM '99 Proceedings of the IEEE International Conference on Software Maintenance
Comprehending Reality " Practical Barriers to Industrial Adoption of Software Maintenance Automation
IWPC '03 Proceedings of the 11th IEEE International Workshop on Program Comprehension
Software reuse strategies and component markets
Communications of the ACM - Program compaction
The business case for software reuse
IBM Systems Journal
Managing Duplicated Code with Linked Editing
VLHCC '04 Proceedings of the 2004 IEEE Symposium on Visual Languages - Human Centric Computing
IEEE Transactions on Software Engineering
Mylar: a degree-of-interest model for IDEs
Proceedings of the 4th international conference on Aspect-oriented software development
Using structural context to recommend source code examples
Proceedings of the 27th international conference on Software engineering
Ranking Significance of Software Components Based on Use Relations
IEEE Transactions on Software Engineering
Enabling Reuse-Based Software Development of Large-Scale Systems
IEEE Transactions on Software Engineering
An empirical study of code clone genealogies
Proceedings of the 10th European software engineering conference held jointly with 13th ACM SIGSOFT international symposium on Foundations of software engineering
Software Reuse Research: Status and Future
IEEE Transactions on Software Engineering
Software psychology: Human factors in computer and information systems (Winthrop computer systems series)
Program element matching for multi-version program analyses
Proceedings of the 2006 international workshop on Mining software repositories
The TXL source transformation language
Science of Computer Programming - The fourth workshop on language descriptions, tools, and applications (LDTA'04)
Representing concerns in source code
ACM Transactions on Software Engineering and Methodology (TOSEM)
Approximate Structural Context Matching: An Approach to Recommend Relevant Examples
IEEE Transactions on Software Engineering
Information Needs in Collocated Software Development Teams
ICSE '07 Proceedings of the 29th international conference on Software Engineering
Supporting the Investigation and Planning of Pragmatic Reuse Tasks
ICSE '07 Proceedings of the 29th international conference on Software Engineering
Cognitive View of Reuse and Redesign
IEEE Software
On the Design and Development of Program Families
IEEE Transactions on Software Engineering
Using information scent to model the dynamic foraging behavior of programmers in maintenance tasks
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
Lightweight, Semi-automated Enactment of Pragmatic-Reuse Plans
ICSR '08 Proceedings of the 10th international conference on Software Reuse: High Confidence Software Reuse in Large Systems
Asking and Answering Questions during a Programming Change Task
IEEE Transactions on Software Engineering
Semi-automating small-scale source code reuse via structural correspondence
Proceedings of the 16th ACM SIGSOFT International Symposium on Foundations of software engineering
"Cloning considered harmful" considered harmful: patterns of cloning in software
Empirical Software Engineering
Two studies of opportunistic programming: interleaving web foraging, learning, and writing code
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
Applying test-driven code search to the reuse of auxiliary functionality
Proceedings of the 2009 ACM symposium on Applied Computing
ICSE '09 Proceedings of the 31st International Conference on Software Engineering
Learning from examples to improve code completion systems
Proceedings of the the 7th joint meeting of the European software engineering conference and the ACM SIGSOFT symposium on The foundations of software engineering
Automatically Recommending Triage Decisions for Pragmatic Reuse Tasks
ASE '09 Proceedings of the 2009 IEEE/ACM International Conference on Automated Software Engineering
Pragmatic software reuse
Clone region descriptors: Representing and tracking duplication in source code
ACM Transactions on Software Engineering and Methodology (TOSEM)
Recommendation Systems for Software Engineering
IEEE Software
Hidden dependencies in software systems
ICSM '10 Proceedings of the 2010 IEEE International Conference on Software Maintenance
The Design of Everyday Things
IEEE Transactions on Software Engineering
Empirical Studies of Programming Knowledge
IEEE Transactions on Software Engineering
Topology analysis of software dependencies
ACM Transactions on Software Engineering and Methodology (TOSEM)
Hi-index | 0.00 |
Many software reuse tasks involve reusing source code that was not designed in a manner conducive to those tasks, requiring that ad hoc modifications be applied. Such pragmatic reuse tasks are a reality in disciplined industrial practice; they arise for a variety of organizational and technical reasons. To investigate a pragmatic reuse task, a developer must navigate through, and reason about, source code dependencies in order to identify program elements that are relevant to the task and to decide how those elements should be reused. The developer must then convert his mental model of the task into a set of actions that he can perform. These steps are poorly supported by modern development tools and practices. We provide a model for the process involved in performing a pragmatic reuse task, including the need to capture (mentally or otherwise) the developer's decisions about how each program element should be treated: this is a pragmatic-reuse plan. We provide partial support for this model via a tool suite, called Gilligan; other parts of the model are supported via standard IDE tools. Using a pragmatic-reuse plan, Gilligan can semiautomatically transform the selected source code from its originating system and integrate it into the developer's system. We have evaluated Gilligan through a series of case studies and experiments (each involving industrial developers) using a variety of source systems and tasks; we report in particular on a previously unpublished, formal experiment. The results show that pragmatic-reuse plans are a robust metaphor for capturing pragmatic reuse intent and that, relative to standard IDE tools, Gilligan can (1) significantly decrease the time that developers require to perform pragmatic reuse tasks, (2) increase the likelihood that developers will successfully complete pragmatic reuse tasks, (3) decrease the time required by developers to identify infeasible reuse tasks, and (4) improve developers' sense of their ability to manage the risk in such tasks.