工作会议:低级工件的识别

G. Antoniol, G. Casazza, E. Merlo
{"title":"工作会议:低级工件的识别","authors":"G. Antoniol, G. Casazza, E. Merlo","doi":"10.1109/WPC.2000.852502","DOIUrl":null,"url":null,"abstract":"When programmers approach the task of maintaining a software system to modify existing code to correct errors, to add new functionalities or to upgrade it, often their first activity is to build a mental model of the system being studied. In order to understand the organization of a system at different levels of abstractions, maintenance requires the identification of sub-systems, of their functionalities, of their interactions, and of their relation with the different software artifacts. Unfortunately, documentation is often scarce or not up-to-date. Furthermore, since outsourcing has been widely adopted as common practice, people who wrote or maintained a system may no longer be available. Hence, the only reliable source of information about a program is often the program itself.Different approaches and tools have been proposed to help people in building conceptual models of existing systems either at the architectural level or at the code level. The architectural level relies on tools and technologies to extract lower-level artifacts from code and abstract architectural properties from them. To be effective, a fundamental requirement of any approach based on source code analysis is its ability to successfully deal with the full spectrum of a programming language syntax and semantics. However, many widely used modern programming languages, as C/C++, Pascal, Ada, etc. contain features such as structures, pointers, function pointers, polymorphism, inheritance, subtyping, and so on, which, while they augment a language expressivity and offer greater implementation flexibility to software developers, they also make the process of recovering even elementary information such as the call graph or the dependency graph harder.Pointer analysis algorithms provide programmers with a representation of the references between memory locations. The result is a useful view in itself, but is also a preliminary requirement for subsequent computations. Once language features are dealt with, two main categories of approaches can be conceived depending on whether or not we explicitly know what we are seeking. The first category comprises library-based approaches such as clone detection, clich based approaches, plan recognition, design pattern recovery and more generally approaches exploiting a set of ?examples?. The second category exploits the idea of clustering entities with similar or desired properties into abstract data types, into objects and into more general new structures such as domain or application specific patterns. Concept analysis is probably the most widely known approach adopted for this category of problems.Still the entire ?weaponry? requires underling sophisticated technologies, highly trained people, and adequate hardware resources. It is not clear how the lab approaches may be effectively exported into the every-day industrial practice. That is: 1. Do we really need all this stuff?2. Do we know companies who are willing to apply or who are currently applying these approaches?3. What step forward is required to bring into effectiveness the lab technologies?4. What obstacles should be removed to bring into effectiveness the lab technologies?5. How can we avoid technology being used as a surrogate of management responsibilities? i.e., how to avoid the dictatorship of tools? how can we avoid that if a tool says something, then it must be so?6. How can technology transfer be accomplished?","PeriodicalId":448149,"journal":{"name":"Proceedings IWPC 2000. 8th International Workshop on Program Comprehension","volume":"1 1","pages":"0"},"PeriodicalIF":0.0000,"publicationDate":"2000-06-10","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":"0","resultStr":"{\"title\":\"Working session: identification of lower-level artifacts\",\"authors\":\"G. Antoniol, G. Casazza, E. Merlo\",\"doi\":\"10.1109/WPC.2000.852502\",\"DOIUrl\":null,\"url\":null,\"abstract\":\"When programmers approach the task of maintaining a software system to modify existing code to correct errors, to add new functionalities or to upgrade it, often their first activity is to build a mental model of the system being studied. In order to understand the organization of a system at different levels of abstractions, maintenance requires the identification of sub-systems, of their functionalities, of their interactions, and of their relation with the different software artifacts. Unfortunately, documentation is often scarce or not up-to-date. Furthermore, since outsourcing has been widely adopted as common practice, people who wrote or maintained a system may no longer be available. Hence, the only reliable source of information about a program is often the program itself.Different approaches and tools have been proposed to help people in building conceptual models of existing systems either at the architectural level or at the code level. The architectural level relies on tools and technologies to extract lower-level artifacts from code and abstract architectural properties from them. To be effective, a fundamental requirement of any approach based on source code analysis is its ability to successfully deal with the full spectrum of a programming language syntax and semantics. However, many widely used modern programming languages, as C/C++, Pascal, Ada, etc. contain features such as structures, pointers, function pointers, polymorphism, inheritance, subtyping, and so on, which, while they augment a language expressivity and offer greater implementation flexibility to software developers, they also make the process of recovering even elementary information such as the call graph or the dependency graph harder.Pointer analysis algorithms provide programmers with a representation of the references between memory locations. The result is a useful view in itself, but is also a preliminary requirement for subsequent computations. Once language features are dealt with, two main categories of approaches can be conceived depending on whether or not we explicitly know what we are seeking. The first category comprises library-based approaches such as clone detection, clich based approaches, plan recognition, design pattern recovery and more generally approaches exploiting a set of ?examples?. The second category exploits the idea of clustering entities with similar or desired properties into abstract data types, into objects and into more general new structures such as domain or application specific patterns. Concept analysis is probably the most widely known approach adopted for this category of problems.Still the entire ?weaponry? requires underling sophisticated technologies, highly trained people, and adequate hardware resources. It is not clear how the lab approaches may be effectively exported into the every-day industrial practice. That is: 1. Do we really need all this stuff?2. Do we know companies who are willing to apply or who are currently applying these approaches?3. What step forward is required to bring into effectiveness the lab technologies?4. What obstacles should be removed to bring into effectiveness the lab technologies?5. How can we avoid technology being used as a surrogate of management responsibilities? i.e., how to avoid the dictatorship of tools? how can we avoid that if a tool says something, then it must be so?6. How can technology transfer be accomplished?\",\"PeriodicalId\":448149,\"journal\":{\"name\":\"Proceedings IWPC 2000. 8th International Workshop on Program Comprehension\",\"volume\":\"1 1\",\"pages\":\"0\"},\"PeriodicalIF\":0.0000,\"publicationDate\":\"2000-06-10\",\"publicationTypes\":\"Journal Article\",\"fieldsOfStudy\":null,\"isOpenAccess\":false,\"openAccessPdf\":\"\",\"citationCount\":\"0\",\"resultStr\":null,\"platform\":\"Semanticscholar\",\"paperid\":null,\"PeriodicalName\":\"Proceedings IWPC 2000. 8th International Workshop on Program Comprehension\",\"FirstCategoryId\":\"1085\",\"ListUrlMain\":\"https://doi.org/10.1109/WPC.2000.852502\",\"RegionNum\":0,\"RegionCategory\":null,\"ArticlePicture\":[],\"TitleCN\":null,\"AbstractTextCN\":null,\"PMCID\":null,\"EPubDate\":\"\",\"PubModel\":\"\",\"JCR\":\"\",\"JCRName\":\"\",\"Score\":null,\"Total\":0}","platform":"Semanticscholar","paperid":null,"PeriodicalName":"Proceedings IWPC 2000. 8th International Workshop on Program Comprehension","FirstCategoryId":"1085","ListUrlMain":"https://doi.org/10.1109/WPC.2000.852502","RegionNum":0,"RegionCategory":null,"ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":null,"EPubDate":"","PubModel":"","JCR":"","JCRName":"","Score":null,"Total":0}
引用次数: 0

摘要

当程序员处理维护软件系统的任务,修改现有代码以纠正错误,添加新功能或升级它时,通常他们的第一个活动是构建正在研究的系统的心理模型。为了在不同的抽象层次上理解系统的组织,维护需要识别子系统、它们的功能、它们的交互以及它们与不同软件工件的关系。不幸的是,文档通常很少或者不是最新的。此外,由于外包已被广泛采用,编写或维护系统的人员可能不再可用。因此,关于程序的唯一可靠的信息来源通常是程序本身。已经提出了不同的方法和工具来帮助人们在体系结构级别或代码级别构建现有系统的概念模型。体系结构级别依赖于工具和技术从代码中提取低级工件,并从中抽象体系结构属性。为了有效,任何基于源代码分析的方法的一个基本要求是它能够成功地处理编程语言的全部语法和语义。然而,许多广泛使用的现代编程语言,如C/ c++、Pascal、Ada等,都包含结构、指针、函数指针、多态性、继承、子类型等特性,这些特性虽然增强了语言的表达能力,并为软件开发人员提供了更大的实现灵活性,但也使恢复基本信息(如调用图或依赖图)的过程变得更加困难。指针分析算法为程序员提供了内存位置之间引用的表示。结果本身是一个有用的视图,但也是后续计算的初步要求。一旦处理了语言特征,根据我们是否明确地知道我们在寻找什么,就可以设想出两种主要的方法。第一类包括基于库的方法,如克隆检测、基于陈词滥调的方法、计划识别、设计模式恢复以及利用一组“示例”的更一般的方法。第二类利用了将具有相似或所需属性的实体聚类为抽象数据类型、对象和更一般的新结构(如领域或特定于应用程序的模式)的思想。概念分析可能是这类问题采用的最广为人知的方法。还是所有的武器?需要先进的技术、训练有素的人员和足够的硬件资源。目前尚不清楚如何将实验室方法有效地推广到日常工业实践中。那就是:1。我们真的需要这些东西吗?我们知道哪些公司愿意或正在应用这些方法吗?要使实验室技术发挥作用,需要向前迈出哪些步骤?要使实验室技术发挥作用,应该消除哪些障碍?我们怎样才能避免技术被用作管理责任的替代品呢?也就是说,如何避免工具的专政?如果一个工具说了什么,那么它一定是这样的,我们怎么能避免呢?如何完成技术转让?
本文章由计算机程序翻译,如有差异,请以英文原文为准。
Working session: identification of lower-level artifacts
When programmers approach the task of maintaining a software system to modify existing code to correct errors, to add new functionalities or to upgrade it, often their first activity is to build a mental model of the system being studied. In order to understand the organization of a system at different levels of abstractions, maintenance requires the identification of sub-systems, of their functionalities, of their interactions, and of their relation with the different software artifacts. Unfortunately, documentation is often scarce or not up-to-date. Furthermore, since outsourcing has been widely adopted as common practice, people who wrote or maintained a system may no longer be available. Hence, the only reliable source of information about a program is often the program itself.Different approaches and tools have been proposed to help people in building conceptual models of existing systems either at the architectural level or at the code level. The architectural level relies on tools and technologies to extract lower-level artifacts from code and abstract architectural properties from them. To be effective, a fundamental requirement of any approach based on source code analysis is its ability to successfully deal with the full spectrum of a programming language syntax and semantics. However, many widely used modern programming languages, as C/C++, Pascal, Ada, etc. contain features such as structures, pointers, function pointers, polymorphism, inheritance, subtyping, and so on, which, while they augment a language expressivity and offer greater implementation flexibility to software developers, they also make the process of recovering even elementary information such as the call graph or the dependency graph harder.Pointer analysis algorithms provide programmers with a representation of the references between memory locations. The result is a useful view in itself, but is also a preliminary requirement for subsequent computations. Once language features are dealt with, two main categories of approaches can be conceived depending on whether or not we explicitly know what we are seeking. The first category comprises library-based approaches such as clone detection, clich based approaches, plan recognition, design pattern recovery and more generally approaches exploiting a set of ?examples?. The second category exploits the idea of clustering entities with similar or desired properties into abstract data types, into objects and into more general new structures such as domain or application specific patterns. Concept analysis is probably the most widely known approach adopted for this category of problems.Still the entire ?weaponry? requires underling sophisticated technologies, highly trained people, and adequate hardware resources. It is not clear how the lab approaches may be effectively exported into the every-day industrial practice. That is: 1. Do we really need all this stuff?2. Do we know companies who are willing to apply or who are currently applying these approaches?3. What step forward is required to bring into effectiveness the lab technologies?4. What obstacles should be removed to bring into effectiveness the lab technologies?5. How can we avoid technology being used as a surrogate of management responsibilities? i.e., how to avoid the dictatorship of tools? how can we avoid that if a tool says something, then it must be so?6. How can technology transfer be accomplished?
求助全文
通过发布文献求助,成功后即可免费获取论文全文。 去求助
来源期刊
自引率
0.00%
发文量
0
×
引用
GB/T 7714-2015
复制
MLA
复制
APA
复制
导出至
BibTeX EndNote RefMan NoteFirst NoteExpress
×
提示
您的信息不完整,为了账户安全,请先补充。
现在去补充
×
提示
您因"违规操作"
具体请查看互助需知
我知道了
×
提示
确定
请完成安全验证×
copy
已复制链接
快去分享给好友吧!
我知道了
右上角分享
点击右上角分享
0
联系我们:info@booksci.cn Book学术提供免费学术资源搜索服务,方便国内外学者检索中英文文献。致力于提供最便捷和优质的服务体验。 Copyright © 2023 布克学术 All rights reserved.
京ICP备2023020795号-1
ghs 京公网安备 11010802042870号
Book学术文献互助
Book学术文献互助群
群 号:604180095
Book学术官方微信