Designing documentation to compensate for delocalized plans
Communications of the ACM
Concurrent programming: principles and practice
Concurrent programming: principles and practice
What are race conditions?: Some issues and formalizations
ACM Letters on Programming Languages and Systems (LOPLAS)
An incremental approach to structural testing of concurrent software
ISSTA '96 Proceedings of the 1996 ACM SIGSOFT international symposium on Software testing and analysis
Model checking for programming languages using VeriSoft
Proceedings of the 24th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Deterministic replay of Java multithreaded applications
SPDT '98 Proceedings of the SIGMETRICS symposium on Parallel and distributed tools
RecPlay: a fully integrated practical record/replay system
ACM Transactions on Computer Systems (TOCS)
Program understanding behavior during corrective maintenance of large-scale software
International Journal of Human-Computer Studies - Best of empirical studies of programmers 7
Task Analysis for Human-Computer Interaction
Task Analysis for Human-Computer Interaction
Pattern-Oriented Software Architecture: Patterns for Concurrent and Networked Objects
Pattern-Oriented Software Architecture: Patterns for Concurrent and Networked Objects
C++ Network Programming: Resolving Complexity Using Ace and Patterns (C++ in-Depth Series)
C++ Network Programming: Resolving Complexity Using Ace and Patterns (C++ in-Depth Series)
A Controlled Experiment in Maintenance Comparing Design Patterns to Simpler Solutions
IEEE Transactions on Software Engineering
Assertions in End-User Software Engineering: A Think-Aloud Study
HCC '02 Proceedings of the IEEE 2002 Symposia on Human Centric Computing Languages and Environments (HCC'02)
Choosing among Alternative Pasts
IPDPS '03 Proceedings of the 17th International Symposium on Parallel and Distributed Processing
A Classification of Concurrency Failures in Java Components
IPDPS '03 Proceedings of the 17th International Symposium on Parallel and Distributed Processing
Towards the Reverse Engineering of UML Sequence Diagrams
WCRE '03 Proceedings of the 10th Working Conference on Reverse Engineering
Learning concurrency: evolution of students' understanding of synchronization
International Journal of Human-Computer Studies
How Effective Developers Investigate Source Code: An Exploratory Study
IEEE Transactions on Software Engineering
Proceedings of the 27th international conference on Software engineering
Concurrency: State Models And Java Programs
Concurrency: State Models And Java Programs
Human Problem Solving
Extracting Sequence Diagram from Execution Trace of Java Program
IWPSE '05 Proceedings of the Eighth International Workshop on Principles of Software Evolution
Static control-flow analysis for reverse engineering of UML sequence diagrams
PASTE '05 Proceedings of the 6th ACM SIGPLAN-SIGSOFT workshop on Program analysis for software tools and engineering
Program comprehension as fact finding
Proceedings of the the 6th joint meeting of the European software engineering conference and the ACM SIGSOFT symposium on The foundations of software engineering
Testing concurrent programs using value schedules
Proceedings of the twenty-second IEEE/ACM international conference on Automated software engineering
Using formal models to objectively judge quality of multi-threaded programs in empirical studies
Proceedings of the 2008 international workshop on Models in software engineering
Assessing the benefits of synchronization-adorned sequence diagrams: two controlled experiments
Proceedings of the 4th ACM symposium on Software visualization
Bug Wars: a competitive exercise to find bugs in code
Journal of Computing Sciences in Colleges
Designing useful tools for developers
Proceedings of the 3rd ACM SIGPLAN workshop on Evaluation and usability of programming languages and tools
An empirical study of programming bugs in CS1, CS2, and CS3 homework submissions
Journal of Computing Sciences in Colleges
Hi-index | 0.00 |
Graduates of computer science degree programs are increasingly being asked to maintain large, multi-threaded software systems; however, the maintenance of such systems is typically not well-covered by software engineering texts or curricula. We conducted a think-aloud study with 15 students in a graduate-level computer science class to discover the strategies that students apply, and to what effect, in performing corrective maintenance on concurrent software. We collected think-aloud and action protocols, and annotated the protocols for a number of behavioral attributes and maintenance strategies. We divided the protocols into groups based on the success of the participant in both diagnosing and correcting the failure. We evaluated these groups for statistically significant differences in these attributes and strategies. In this paper, we report a number of interesting observations that came from this study. All participants performed diagnostic executions of the program to aid program comprehension; however, the participants that used this as their predominant strategy for diagnosing the fault were all unsuccessful. Among the participants that successfully diagnosed the fault and displayed high confidence in their diagnosis, we found two commonalities. They all recognized that the fault involved the violation of a concurrent-programming idiom. And, they all constructed detailed behavioral models (similar to UML sequence diagrams) of execution scenarios. We present detailed analyses to explain the attributes that correlated with success or lack of success. Based on these analyses, we make recommendations for improving software engineering curriculums by better training students how to apply these strategies effectively.