Facilitating process prototyping by controlling the impact of change

J. Wileden, L. Clarke, A. Wolf
{"title":"Facilitating process prototyping by controlling the impact of change","authors":"J. Wileden, L. Clarke, A. Wolf","doi":"10.1145/75110.75142","DOIUrl":null,"url":null,"abstract":"The UMass Software Development Laboratory (SDL), in collaboration with our colleagues in the Arcadia consortium [7], is working toward the development of advanced software environments. An important goal of this work is to support research on software processes. It is increasingly clear that such research must be based on experimental, exploratory, prototyping activities. It is equally clear that process prototyping will require a corresponding ability to rapidly produce and easily modify prototype software environments. As a result, one important element of SDL's environment research has been the development of appropriate tools and techniques to facilitate environment prototyping.\nAn application-oriented notation and a software reuse capability are two frequently proposed approaches for supporting software prototyping in many traditional application areas. Another common approach is the use of a high-level language that is interpreted rather than compiled. Often the language is weakly typed, or typeless, and any type checking that it might provide is done at run time rather than statically. For certain well-understood applications, the language may be application-oriented. More often it is a general-purpose language such as LISP. Such languages facilitate rapid development and easy modification in part because avoiding the time required to compile or type check reduces development and modification time.\nWhile these approaches are beneficial for rapid creation of a software system, they are not as valuable for supporting the easy modification that is required in experimental situations. This is particularly true if the prototype system being modified is large and complex. Realistic process experimentation will require the use of full-fledged software environment prototypes. Such prototypes are by nature large, complex and highly interrelated collections of components. Those components include tools, such as editors, compilers, testing and debugging support systems and the like, and also data objects, such as source text, abstract syntax trees, object modules, symbol tables, test data sets, test results and many others. The components are highly interrelated in that a typical activity by an environment user will involve coordinated actions by several tools affecting several (typically shared) data objects. These characteristics of environment prototypes have led us to conclude that tools and techniques for controlling the impact of change are of primary importance for facilitating the prototyping of environments.\nControlling the impact of change in environment prototyping is intimately related to the information visible through the interfaces of environment components. A change to an environment component can only have an impact on another component if that other component can observe the change. Thus, the more that a component's interface conceals information about aspects of the component that may change, the less chance there is for a change to have an impact on other components, in particular on components not interested in the change. One class of approaches to controlling the impact of change, therefore, heavily restricts the information content of components' interfaces. An alternative is to provide information-rich interfaces, but carefully control which other components are allowed to observe (some or all of) the information in a given component's interface. We have found that these two classes of approaches, and variants within them, offer different advantages and disadvantages.\nTo date, we have explored three particular approaches that fall within these classes. The three approaches can be characterized as follows:Externally-interpreted descriptions. An environment component's interface reveals little or nothing about the component's properties. Instead, descriptive information about the component is encoded in a data structure, possibly within the component itself. Other environment components seeking to use the data object must interpret the description at run time. Access to the description and to the component is through a general purpose (i.e., information-poor) interface.\nInternally-interpreted descriptions. An environment component's interface reveals little or nothing about the component's properties. Instead, descriptive information about the component is procedurally encoded in the bodies of the component's access routines. Other environment components seeking to use the component must make appropriately parameterized requests on the access routines via the component's general purpose (i.e., information-poor) interface. The routines determine the acceptability of those requests at run time.\nPrecise interface control. Descriptive information about a component (e.g., the kinds of information contained in a data object) is explicitly presented in the component's interface. Visibility of that information is explicitly controlled so that only those other environment components interested in some aspect of the information are able to observe it.\n\nSpecifically, in our work on environment prototyping, we have been using three tools that illustrate these three approaches. They are:IRIS, a graph-based scheme for representing the static semantics of computer programs [1,6];\nGRAPHITE, an abstract data type generator for user-specified classes of graphs [2]; and\nPIC, a language framework and analysis technique for precisely describing and analyzing module interfaces [10,11].\n\nA more complete discussion of the three approaches, the tools, and our experiences with them appears in [9].\nOther researchers have implemented and used tools and techniques for controlling the impact of change in prototyping situations. Examples include innumerable users of LISP or PROLOG, as well as such software engineering efforts as GANDALF [3], Infuse [4], the Cornell Synthesizer Generator [5], “smart recompilation” [8] and others. In general, however, these efforts have employed just one approach to controlling the impact of change, whether one of the ones described here, a hybrid approach or some other point on the continuum implied by the three we have discussed. Our work is unusual in that we have implemented and explored three quite different points within that continuum.\nOur conclusion, based upon our experience with these three tools, is that all three of the approaches that we have used are well suited for facilitating environment prototyping by helping to control the impact of change. Their appropriate uses differ somewhat, however. The IRIS approach is well suited for its originally intended purpose, namely to facilitate change to a language's semantic definition (e.g., adding new primitive operators). It is not as appropriate for use in other prototype change situations, such as adding a new analysis tool. In such situations, the decentralized dynamic type-checking and the complexity involved in determining which components are interested in the change make changing the prototype too difficult and error prone. We are planning to develop a GRAPHITE implementation of IRIS precisely so that both kinds of change will be supported with appropriate impact control techniques available for each.\nIn other situations, information-rich interfaces seem preferable to the information-poor interfaces of the IRIS and GRAPHITE approaches. There also seem to be cases where different components should be able to observe different aspects of an interface, whether information-rich or information-poor. Obviously, in such cases, the PIC approach seems the best choice. We are currently considering merging the PIC capabilities with either or both of the other two approaches. Such a synthesis could offer advantages over all of the approaches that we have explored thus far.","PeriodicalId":414925,"journal":{"name":"International Software Process Workshop","volume":"111 1","pages":"0"},"PeriodicalIF":0.0000,"publicationDate":"1988-04-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":"0","resultStr":null,"platform":"Semanticscholar","paperid":null,"PeriodicalName":"International Software Process Workshop","FirstCategoryId":"1085","ListUrlMain":"https://doi.org/10.1145/75110.75142","RegionNum":0,"RegionCategory":null,"ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":null,"EPubDate":"","PubModel":"","JCR":"","JCRName":"","Score":null,"Total":0}
引用次数: 0

Abstract

The UMass Software Development Laboratory (SDL), in collaboration with our colleagues in the Arcadia consortium [7], is working toward the development of advanced software environments. An important goal of this work is to support research on software processes. It is increasingly clear that such research must be based on experimental, exploratory, prototyping activities. It is equally clear that process prototyping will require a corresponding ability to rapidly produce and easily modify prototype software environments. As a result, one important element of SDL's environment research has been the development of appropriate tools and techniques to facilitate environment prototyping. An application-oriented notation and a software reuse capability are two frequently proposed approaches for supporting software prototyping in many traditional application areas. Another common approach is the use of a high-level language that is interpreted rather than compiled. Often the language is weakly typed, or typeless, and any type checking that it might provide is done at run time rather than statically. For certain well-understood applications, the language may be application-oriented. More often it is a general-purpose language such as LISP. Such languages facilitate rapid development and easy modification in part because avoiding the time required to compile or type check reduces development and modification time. While these approaches are beneficial for rapid creation of a software system, they are not as valuable for supporting the easy modification that is required in experimental situations. This is particularly true if the prototype system being modified is large and complex. Realistic process experimentation will require the use of full-fledged software environment prototypes. Such prototypes are by nature large, complex and highly interrelated collections of components. Those components include tools, such as editors, compilers, testing and debugging support systems and the like, and also data objects, such as source text, abstract syntax trees, object modules, symbol tables, test data sets, test results and many others. The components are highly interrelated in that a typical activity by an environment user will involve coordinated actions by several tools affecting several (typically shared) data objects. These characteristics of environment prototypes have led us to conclude that tools and techniques for controlling the impact of change are of primary importance for facilitating the prototyping of environments. Controlling the impact of change in environment prototyping is intimately related to the information visible through the interfaces of environment components. A change to an environment component can only have an impact on another component if that other component can observe the change. Thus, the more that a component's interface conceals information about aspects of the component that may change, the less chance there is for a change to have an impact on other components, in particular on components not interested in the change. One class of approaches to controlling the impact of change, therefore, heavily restricts the information content of components' interfaces. An alternative is to provide information-rich interfaces, but carefully control which other components are allowed to observe (some or all of) the information in a given component's interface. We have found that these two classes of approaches, and variants within them, offer different advantages and disadvantages. To date, we have explored three particular approaches that fall within these classes. The three approaches can be characterized as follows:Externally-interpreted descriptions. An environment component's interface reveals little or nothing about the component's properties. Instead, descriptive information about the component is encoded in a data structure, possibly within the component itself. Other environment components seeking to use the data object must interpret the description at run time. Access to the description and to the component is through a general purpose (i.e., information-poor) interface. Internally-interpreted descriptions. An environment component's interface reveals little or nothing about the component's properties. Instead, descriptive information about the component is procedurally encoded in the bodies of the component's access routines. Other environment components seeking to use the component must make appropriately parameterized requests on the access routines via the component's general purpose (i.e., information-poor) interface. The routines determine the acceptability of those requests at run time. Precise interface control. Descriptive information about a component (e.g., the kinds of information contained in a data object) is explicitly presented in the component's interface. Visibility of that information is explicitly controlled so that only those other environment components interested in some aspect of the information are able to observe it. Specifically, in our work on environment prototyping, we have been using three tools that illustrate these three approaches. They are:IRIS, a graph-based scheme for representing the static semantics of computer programs [1,6]; GRAPHITE, an abstract data type generator for user-specified classes of graphs [2]; and PIC, a language framework and analysis technique for precisely describing and analyzing module interfaces [10,11]. A more complete discussion of the three approaches, the tools, and our experiences with them appears in [9]. Other researchers have implemented and used tools and techniques for controlling the impact of change in prototyping situations. Examples include innumerable users of LISP or PROLOG, as well as such software engineering efforts as GANDALF [3], Infuse [4], the Cornell Synthesizer Generator [5], “smart recompilation” [8] and others. In general, however, these efforts have employed just one approach to controlling the impact of change, whether one of the ones described here, a hybrid approach or some other point on the continuum implied by the three we have discussed. Our work is unusual in that we have implemented and explored three quite different points within that continuum. Our conclusion, based upon our experience with these three tools, is that all three of the approaches that we have used are well suited for facilitating environment prototyping by helping to control the impact of change. Their appropriate uses differ somewhat, however. The IRIS approach is well suited for its originally intended purpose, namely to facilitate change to a language's semantic definition (e.g., adding new primitive operators). It is not as appropriate for use in other prototype change situations, such as adding a new analysis tool. In such situations, the decentralized dynamic type-checking and the complexity involved in determining which components are interested in the change make changing the prototype too difficult and error prone. We are planning to develop a GRAPHITE implementation of IRIS precisely so that both kinds of change will be supported with appropriate impact control techniques available for each. In other situations, information-rich interfaces seem preferable to the information-poor interfaces of the IRIS and GRAPHITE approaches. There also seem to be cases where different components should be able to observe different aspects of an interface, whether information-rich or information-poor. Obviously, in such cases, the PIC approach seems the best choice. We are currently considering merging the PIC capabilities with either or both of the other two approaches. Such a synthesis could offer advantages over all of the approaches that we have explored thus far.
通过控制变更的影响来促进过程原型
马萨诸塞大学软件开发实验室(SDL)与我们在Arcadia联盟[7]的同事合作,正在朝着开发高级软件环境的方向努力。这项工作的一个重要目标是支持对软件过程的研究。越来越清楚的是,这种研究必须以实验性、探索性和原型活动为基础。同样清楚的是,过程原型将需要相应的能力来快速生成和容易地修改原型软件环境。因此,SDL环境研究的一个重要元素是开发适当的工具和技术来促进环境原型。面向应用程序的符号和软件重用能力是在许多传统应用领域支持软件原型的两种常用方法。另一种常见的方法是使用解释性而非编译性的高级语言。通常,该语言是弱类型的或无类型的,它可能提供的任何类型检查都是在运行时完成的,而不是静态的。对于某些易于理解的应用程序,语言可能是面向应用程序的。更常见的是,它是一种通用语言,如LISP。这种语言促进了快速开发和易于修改,部分原因是避免了编译或类型检查所需的时间,减少了开发和修改时间。虽然这些方法对于软件系统的快速创建是有益的,但是它们对于支持实验环境中所需的简单修改是没有价值的。如果要修改的原型系统又大又复杂,这一点尤其正确。实际的过程实验将需要使用成熟的软件环境原型。这样的原型本质上是庞大、复杂和高度相关的组件集合。这些组件包括工具,如编辑器、编译器、测试和调试支持系统等,也包括数据对象,如源文本、抽象语法树、对象模块、符号表、测试数据集、测试结果等。这些组件是高度相关的,因为环境用户的典型活动将涉及影响多个(通常是共享的)数据对象的多个工具的协调操作。环境原型的这些特征使我们得出这样的结论:用于控制变化影响的工具和技术对于促进环境原型是至关重要的。控制环境原型变更的影响与通过环境组件的接口可见的信息密切相关。对环境组件的更改只有在其他组件可以观察到更改的情况下才能对其他组件产生影响。因此,组件的接口对可能发生更改的组件方面的信息隐藏得越多,更改对其他组件(特别是对更改不感兴趣的组件)产生影响的可能性就越小。因此,控制变更影响的一类方法严重限制了组件接口的信息内容。另一种方法是提供信息丰富的接口,但要仔细控制哪些其他组件可以在给定组件的接口中观察(部分或全部)信息。我们发现这两类方法及其变体具有不同的优点和缺点。到目前为止,我们已经探索了属于这些类别的三种特定方法。这三种方法的特点如下:外部解释的描述。环境组件的接口很少或根本不显示组件的属性。相反,有关组件的描述性信息编码在数据结构中,可能在组件本身中。寻求使用该数据对象的其他环境组件必须在运行时解释该描述。对描述和组件的访问是通过通用接口(即缺乏信息的接口)进行的。Internally-interpreted描述。环境组件的接口很少或根本不显示组件的属性。相反,有关组件的描述性信息是在组件访问例程的主体中按程序编码的。寻求使用该组件的其他环境组件必须通过该组件的通用(即缺乏信息)接口对访问例程发出适当的参数化请求。例程在运行时确定这些请求的可接受性。精确的界面控制。关于组件的描述性信息(例如,数据对象中包含的信息种类)显式地呈现在组件的接口中。 该信息的可见性受到显式控制,因此只有对信息的某些方面感兴趣的其他环境组件才能观察到它。具体来说,在我们的环境原型工作中,我们使用了三个工具来说明这三种方法。它们是:IRIS,用于表示计算机程序的静态语义的基于图形的方案[1,6];GRAPHITE,用于用户指定的图形类的抽象数据类型生成器[2];pic是一种用于精确描述和分析模块接口的语言框架和分析技术[10,11]。关于这三种方法、工具和我们使用它们的经验的更完整的讨论出现在[9]中。其他研究人员已经实现并使用了工具和技术来控制原型情况中变化的影响。例子包括LISP或PROLOG的无数用户,以及诸如GANDALF[3]、Infuse[4]、Cornell Synthesizer Generator[5]、“智能重新编译”[8]等软件工程方面的努力。然而,总的来说,这些努力只采用了一种方法来控制变化的影响,无论是这里描述的方法之一,混合方法还是我们讨论过的三种方法所暗示的连续统一体中的其他点。我们的工作是不寻常的,因为我们在这个连续体中实施和探索了三个完全不同的点。基于我们使用这三种工具的经验,我们的结论是,我们所使用的所有三种方法都非常适合通过帮助控制变更的影响来促进环境原型。然而,它们的正确用法有所不同。IRIS方法非常适合其最初的预期目的,即方便更改语言的语义定义(例如,添加新的原语操作符)。它不适合用于其他原型更改情况,例如添加新的分析工具。在这种情况下,分散的动态类型检查以及确定哪些组件对更改感兴趣所涉及的复杂性使得更改原型过于困难且容易出错。我们正计划精确地开发IRIS的石墨实现,以便这两种变化都能得到相应的影响控制技术的支持。在其他情况下,信息丰富的接口似乎比IRIS和石墨方法的信息贫乏的接口更可取。似乎在某些情况下,不同的组件应该能够观察接口的不同方面,无论信息丰富还是缺乏信息。显然,在这种情况下,PIC方法似乎是最好的选择。我们目前正在考虑将PIC功能与其他两种方法中的一种或两种合并。这种综合可能比我们迄今为止探索的所有方法都有优势。
本文章由计算机程序翻译,如有差异,请以英文原文为准。
求助全文
约1分钟内获得全文 求助全文
来源期刊
自引率
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学术文献互助群
群 号:481959085
Book学术官方微信