Dynamic software visualization is designed to provide programmers with insights as to what the program is doing. Most current visualizations either use program traces to show information about prior runs, slow the program down substantially, show only minimal information, or force the programmer to indicate when to turn visualizations on or off. We have developed a dynamic Java visualizer that provides a statement-level view of a Java program in action with low enough overhead so that it can be used almost all the time by programmers to understand what their program is doing while it is doing it.
{"title":"Tool demonstration: JIVE and JOVE: Java as it happens","authors":"S. Reiss, Manos Renieris","doi":"10.1109/WPC.2005.41","DOIUrl":"https://doi.org/10.1109/WPC.2005.41","url":null,"abstract":"Dynamic software visualization is designed to provide programmers with insights as to what the program is doing. Most current visualizations either use program traces to show information about prior runs, slow the program down substantially, show only minimal information, or force the programmer to indicate when to turn visualizations on or off. We have developed a dynamic Java visualizer that provides a statement-level view of a Java program in action with low enough overhead so that it can be used almost all the time by programmers to understand what their program is doing while it is doing it.","PeriodicalId":421860,"journal":{"name":"13th International Workshop on Program Comprehension (IWPC'05)","volume":"23 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2005-05-15","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"114143432","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Andrian Marcus, V. Rajlich, Joseph Buchta, M. Petrenko, A. Sergeyev
Concept location in source code is the process that identifies where a software system implements a specific concept. While it is well accepted that concept location is essential for the maintenance of complex procedural code like code written in C, it is much less obvious whether it is also needed for the maintenance of the object-oriented code. After all, the object-oriented code is structured into classes and well-designed classes already implement concepts, so the issue seems to be reduced to the selection of the appropriate class. The objective of our work is to see if the techniques for concept location are still needed (they are) and whether object-oriented structuring facilitates concept location (it does not). This paper focuses on static concept location techniques that share common prerequisites and are search the source code using regular expression matching, or static program dependencies, or information retrieval. The paper analyses these techniques to see how they compare to each other in terms of their respective strengths and weaknesses.
{"title":"Static techniques for concept location in object-oriented code","authors":"Andrian Marcus, V. Rajlich, Joseph Buchta, M. Petrenko, A. Sergeyev","doi":"10.1109/WPC.2005.33","DOIUrl":"https://doi.org/10.1109/WPC.2005.33","url":null,"abstract":"Concept location in source code is the process that identifies where a software system implements a specific concept. While it is well accepted that concept location is essential for the maintenance of complex procedural code like code written in C, it is much less obvious whether it is also needed for the maintenance of the object-oriented code. After all, the object-oriented code is structured into classes and well-designed classes already implement concepts, so the issue seems to be reduced to the selection of the appropriate class. The objective of our work is to see if the techniques for concept location are still needed (they are) and whether object-oriented structuring facilitates concept location (it does not). This paper focuses on static concept location techniques that share common prerequisites and are search the source code using regular expression matching, or static program dependencies, or information retrieval. The paper analyses these techniques to see how they compare to each other in terms of their respective strengths and weaknesses.","PeriodicalId":421860,"journal":{"name":"13th International Workshop on Program Comprehension (IWPC'05)","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2005-05-15","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"127638553","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
In order to make frameworks easier to use we need to better understand the difficulties that programmers have with them. The questions that programmers ask give clues to the quality of design, documentation, and programmer practice. We describe the method and results of a study on the Java Swing framework. We collected and analyzed a sample of 300 newsgroup questions asked about two Swing components (JButton and JTree), and classified the questions according to the design features of the components. This process revealed key insights that can improve a framework's design, its tutorials, and programmer practice.
{"title":"What can programmer questions tell us about frameworks?","authors":"Daqing Hou, Kenny Wong, H. Hoover","doi":"10.1109/WPC.2005.47","DOIUrl":"https://doi.org/10.1109/WPC.2005.47","url":null,"abstract":"In order to make frameworks easier to use we need to better understand the difficulties that programmers have with them. The questions that programmers ask give clues to the quality of design, documentation, and programmer practice. We describe the method and results of a study on the Java Swing framework. We collected and analyzed a sample of 300 newsgroup questions asked about two Swing components (JButton and JTree), and classified the questions according to the design features of the components. This process revealed key insights that can improve a framework's design, its tutorials, and programmer practice.","PeriodicalId":421860,"journal":{"name":"13th International Workshop on Program Comprehension (IWPC'05)","volume":"34 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2005-05-15","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"132420303","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
The detection of omnipresent objects can be an important aid to the process of understanding a large software system. As a result, various detection techniques have been presented in the literature. However, these techniques do not take the subsystem structure into account when deciding whether an object is omnipresent or not. In this paper, we present a new set of detection methods for omnipresent objects that maintain that an object needs to be connected to a large number of subsystems before it is deemed omnipresent. We compare this novel approach to existing ones. We also introduce a framework that can improve the effectiveness of existing software clustering algorithms by combining them with an omnipresent object detection method. Experiments with two large software systems demonstrate the usefulness of this framework.
{"title":"Software clustering based on omnipresent object detection","authors":"Zhihua Wen, Vassilios Tzerpos","doi":"10.1109/WPC.2005.31","DOIUrl":"https://doi.org/10.1109/WPC.2005.31","url":null,"abstract":"The detection of omnipresent objects can be an important aid to the process of understanding a large software system. As a result, various detection techniques have been presented in the literature. However, these techniques do not take the subsystem structure into account when deciding whether an object is omnipresent or not. In this paper, we present a new set of detection methods for omnipresent objects that maintain that an object needs to be connected to a large number of subsystems before it is deemed omnipresent. We compare this novel approach to existing ones. We also introduce a framework that can improve the effectiveness of existing software clustering algorithms by combining them with an omnipresent object detection method. Experiments with two large software systems demonstrate the usefulness of this framework.","PeriodicalId":421860,"journal":{"name":"13th International Workshop on Program Comprehension (IWPC'05)","volume":"5 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2005-05-15","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"126769785","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
CodeSurfer is a tool that provides a wide range of program understanding capabilities by exposing the results of a static-semantic analysis to the user in novel and interesting ways. The tool performs a number of whole-program analyses, including pointer analysis, and creates a system dependence graph for the program. The user can browse these dependences through the GUI in a manner akin to surfing the Web. An open architecture fosters the development of plug-ins that can extend the basic functionality. These include tools for reasoning about the paths through the program, and for software assurance.
{"title":"The CodeSurfer software understanding platform","authors":"P. Anderson, M. Zarins","doi":"10.1109/WPC.2005.37","DOIUrl":"https://doi.org/10.1109/WPC.2005.37","url":null,"abstract":"CodeSurfer is a tool that provides a wide range of program understanding capabilities by exposing the results of a static-semantic analysis to the user in novel and interesting ways. The tool performs a number of whole-program analyses, including pointer analysis, and creates a system dependence graph for the program. The user can browse these dependences through the GUI in a manner akin to surfing the Web. An open architecture fosters the development of plug-ins that can extend the basic functionality. These include tools for reasoning about the paths through the program, and for software assurance.","PeriodicalId":421860,"journal":{"name":"13th International Workshop on Program Comprehension (IWPC'05)","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2005-05-15","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"122625939","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Bradley Dux, A. Iyer, S. Debray, D. Forrester, S. Kobourov
Recent years have seen an increased recognition of some of the advantages offered by dynamically modifiable code, i.e., code that changes during the execution of the program. In its full generality, it can be very difficult to understand the behavior of such self-modifiable code. This paper describes a system that graphically displays the execution behavior of dynamic code, focusing on code modifications and their effect on the structure of the program, i.e., the call graph and control flow graphs of functions. This can help users visualize the structure of runtime code modifications and understand the behavior of dynamically modifiable programs.
{"title":"Visualizing the behavior of dynamically modifiable code","authors":"Bradley Dux, A. Iyer, S. Debray, D. Forrester, S. Kobourov","doi":"10.1109/WPC.2005.45","DOIUrl":"https://doi.org/10.1109/WPC.2005.45","url":null,"abstract":"Recent years have seen an increased recognition of some of the advantages offered by dynamically modifiable code, i.e., code that changes during the execution of the program. In its full generality, it can be very difficult to understand the behavior of such self-modifiable code. This paper describes a system that graphically displays the execution behavior of dynamic code, focusing on code modifications and their effect on the structure of the program, i.e., the call graph and control flow graphs of functions. This can help users visualize the structure of runtime code modifications and understand the behavior of dynamically modifiable programs.","PeriodicalId":421860,"journal":{"name":"13th International Workshop on Program Comprehension (IWPC'05)","volume":"4 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2005-05-15","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"121045416","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Understanding the dynamics of a program can be made easier if dynamic analysis techniques are used. However, the extraordinary size of typical execution traces makes exploring the content of traces a tedious task. In this paper, we present a tool called SEAT (software exploration and analysis tool) that implements several operations that can help software engineers understand the content of a large execution trace. Perhaps, the most powerful aspect of SEAT is the various filtering techniques it incorporates. In our precious work, we showed that these techniques can reduce significantly the size of traces in order to reveal the main content they convey.
{"title":"SEAT: a usable trace analysis tool","authors":"A. Hamou-Lhadj, T. Lethbridge, Lianjiang Fu","doi":"10.1109/WPC.2005.30","DOIUrl":"https://doi.org/10.1109/WPC.2005.30","url":null,"abstract":"Understanding the dynamics of a program can be made easier if dynamic analysis techniques are used. However, the extraordinary size of typical execution traces makes exploring the content of traces a tedious task. In this paper, we present a tool called SEAT (software exploration and analysis tool) that implements several operations that can help software engineers understand the content of a large execution trace. Perhaps, the most powerful aspect of SEAT is the various filtering techniques it incorporates. In our precious work, we showed that these techniques can reduce significantly the size of traces in order to reveal the main content they convey.","PeriodicalId":421860,"journal":{"name":"13th International Workshop on Program Comprehension (IWPC'05)","volume":"31 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2005-05-15","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"122551242","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
One of today's challenges is understanding the behavior of complex software. A major challenge here is that libraries, classes, and other components are often not well understood and can easily be used incorrectly. Our system, CHET, lets developers define specifications that describe how a component should be used and checks these specifications statically in real Java systems. Unlike previous systems, CHET is able to check a wide range of complex conditions in large software systems without programmer intervention. CHET comes with an interactive front end that makes both defining specifications and understanding the results of the checks intuitive and easy.
{"title":"Tool demonstration: CHET: checking specifications in Java systems","authors":"S. Reiss","doi":"10.1109/WPC.2005.40","DOIUrl":"https://doi.org/10.1109/WPC.2005.40","url":null,"abstract":"One of today's challenges is understanding the behavior of complex software. A major challenge here is that libraries, classes, and other components are often not well understood and can easily be used incorrectly. Our system, CHET, lets developers define specifications that describe how a component should be used and checks these specifications statically in real Java systems. Unlike previous systems, CHET is able to check a wide range of complex conditions in large software systems without programmer intervention. CHET comes with an interactive front end that makes both defining specifications and understanding the results of the checks intuitive and easy.","PeriodicalId":421860,"journal":{"name":"13th International Workshop on Program Comprehension (IWPC'05)","volume":"156 3 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2005-05-15","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"128746895","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
We perform knowledge discovery in software archives in order to detect refactorings on the level of classes and methods. Our REFVIS prototype finds these refactorings in CVS repositories and relates them to transactions and configurations. Additionally, REFVIS relates movements of methods to the class inheritance hierarchy of the analyzed project. Furthermore, we present our visualization technique that illustrates these refactorings. REFVIS provides both a class hierarchy layout and a package layout and uses color coding to distinguish different kinds of refactorings. Details on each can be displayed on demand using mouse-over tooltips. Finally, we demonstrate by case studies on two open source projects how REFVIS facilitates understanding of refactorings applied to a software project.
{"title":"Detecting and visualizing refactorings from software archives","authors":"C. Görg, P. Weißgerber","doi":"10.1109/WPC.2005.18","DOIUrl":"https://doi.org/10.1109/WPC.2005.18","url":null,"abstract":"We perform knowledge discovery in software archives in order to detect refactorings on the level of classes and methods. Our REFVIS prototype finds these refactorings in CVS repositories and relates them to transactions and configurations. Additionally, REFVIS relates movements of methods to the class inheritance hierarchy of the analyzed project. Furthermore, we present our visualization technique that illustrates these refactorings. REFVIS provides both a class hierarchy layout and a package layout and uses color coding to distinguish different kinds of refactorings. Details on each can be displayed on demand using mouse-over tooltips. Finally, we demonstrate by case studies on two open source projects how REFVIS facilitates understanding of refactorings applied to a software project.","PeriodicalId":421860,"journal":{"name":"13th International Workshop on Program Comprehension (IWPC'05)","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2005-05-15","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"129109064","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Very little is known about professional programmers' mental representations of variables, yet this information is vital in designing effective tools for program comprehension. In order to find out what types of information programmers have about variables and their relations, we conducted a knowledge elicitation study where professional programmers studied programs and the resulting mental representations were elicited using card sorting and interviews. The mental representations were based on fourteen principles that can be organized in four main categories: domain-based, technology-based, execution-based, and strategy-based. Most frequent information types dealt with two execution-based criteria: behavior and utilization.
{"title":"An investigation into professional programmers' mental representations of variables","authors":"J. Sajaniemi, Raquel Navarro-Prieto","doi":"10.1109/WPC.2005.8","DOIUrl":"https://doi.org/10.1109/WPC.2005.8","url":null,"abstract":"Very little is known about professional programmers' mental representations of variables, yet this information is vital in designing effective tools for program comprehension. In order to find out what types of information programmers have about variables and their relations, we conducted a knowledge elicitation study where professional programmers studied programs and the resulting mental representations were elicited using card sorting and interviews. The mental representations were based on fourteen principles that can be organized in four main categories: domain-based, technology-based, execution-based, and strategy-based. Most frequent information types dealt with two execution-based criteria: behavior and utilization.","PeriodicalId":421860,"journal":{"name":"13th International Workshop on Program Comprehension (IWPC'05)","volume":"45 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2005-05-15","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"123085820","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}