On Posteriori Integration of Software Tools Dick Schefstrom TeleLOGIC AB, Allrorum 1,951 75 Lulea, Sweden. Abstract. This paper tries to define and exampJify the concept of "integration" in the context of soflware develop- ment support environments. TIle benefits of tight integration are discussed, together with different ap- proaches on how to achieve this properlY under the constraint of having to include existing software components and tools. The paper finally reports on the initial experience gained in building an Ada pro- • gramming support environment according to those principles. ( 1. The Role of Integration Much hope is today focussed on the use of tools as a way increasing productivity in software development, shown, for example, by the rapidly growing activity under the label "CASE". While a substantial market of tools, supporting various parts of the software lifecycle, indeed exist, few people would claim that a corresponding major productivity breakthrough has occurred. In this paper, we will focus on what might be the major obstacle before substantial gains can be shown - the lack' Of integration. The basic argument is that the semantic loss and over- head imposed by moving between tools that don't know about, and contribute to, each other, is so big that it cannot be bypassed. Another aspect of the problem is that the tasks perfonned during software development never are so phased and isolated from each other, as the body of existing tools seem to imply. Infact, software development is never is truly "automatic", and the role of tools is therefore most often in providing the user with the infonnation he needs, and doing so WiUl short response time and without requiring him to engage in errorprone or context breaking dialogues with different other tools. The infonnation needed often spans over phases, obvious examples being the need for accessing requirements documents, and design descriptions, in direct con- nection to programming and maintenance. In building support systems, the approach has often been to concentrate on selecting the "right" functions, quite independently of each other. While this decomposition-oricnted approach is easier to deal with, both from a teclmical and project administrative point of view, it usually fails to recognize tile large potential of cross-service cooperation, and the obvious fact that the value and usefulness of a service always is relative to its cost, tile latter which has tluec components: (I) The cost of activating a service in tcnns of finding it and providing tile light parameters. (2) The cost, in waiting time, for tile user while the computer is working. (3) The cost of finally"utilizing and assimilating the result of the service in tile context where the user needs it. We call the sum of those costs the tl4rnaround time, and the purpose of our work is to minimize it. Observe that we discuss not only the turnaround time of currenUy identified atomic ser- vices, but Ule minimization of the cost for any typical pattern of work. For example, if the looking up of an imported interface is a common task, one could expect its turnaround time to be large in a traditional environment since it probably involves leaving an editor to go out in a file system, explicitly locating a file holding the interface, studying the interface and remember- ing it, and then returning to the first point of editing without any oUler result than what could be memorized during the break. Given the above view of the goal, it is clear Ulat imegratioll is a a key issue. The first and third components of the turnaround cost can obviously be very effectively attacked by util- izing context information - making one tool explicitly utilize knowledge about the detailed state ( and context of the other tool. As will be described later, it also turns out that much less CPU- cycles are consumed in a carefully built integrated system, making it effective in reducing even the second cost component. ( 1.1. A Definition of Integration Despite Um fact that integration is often mentioned as a highly desirable property of sup- port environments, it still lacks a more precise cOlnmonly agreed on definition, and most publi- cations never even try to be more explicit on the nature and meaning of the concept. However, as a concluding remark on the subject of integration, we propose the following: In Ule context of software development environments, we discuss integration in terms of three characterizing properties of tools: IIIlijonllity, communicational ability, and openlless of representation. Each of UlOse are explained below together with examplcs. 1.1.1. Uniformity. Measures the degree to which different tools behave in a similar way in similar situations. This spans from reusing Ule same abstract concepts whcnever possible, to the unification of syntactical aspects of the user interface. The word external imegratioll has frequenUy been used to denote the latter part of this spectrum. Examples: * Use of Ule same command language and line editing conventions. * Use of the same conventions for managing windows and menues. * Use of the same user interaction style, such as pointing-at-object, iconization, parameter defaults, and command result reporting. * Use of the same editing, viewing, and searching tool for all texts. * Use of the same conceptual model for representation of data. In a Entity-Relationship- Attribute based environment it would be natural to view most data in terms of typed, attributed, directed graphs. Other environments present other conceptual models, like strings, lists, and (mathematical) relations. * Use of similar operations on diffcrent data represented using the same model. * Use of Ule same definitions of concepts; such as version, configuration, dependency, inheritance, relation, access privilege, transaction, icon, data key, Iype, etc. 1.1.2. Communicational ability. Measures the degree to which a tool communicates its findings and actions to other tools, and the degree to which it provides means for other tools to initiate communication with it. This includes the temporal aspect of immediate notification, the selective aspect of communication with a particular '001, and the granularity aspect of communicating changed circumstances with high ptecision. .This may be achieved either by tools explicitly addressing each other, or by means of a "notify" mechanism provided by the object management system. It also includes the ability to (possibly dynamically) compose tools into larger aggregates. Examples: * The notification of a tool presenting a view of a database when the underlying data is ( changed. * The notification of the editor when the size of the window is changed. * • Passing of context established in a browser, (pointing to a particular "current" object), to the editor or other more or less independent tools. * Immediate passing of result of an operation to a (set 01) tool. * Notification of the user, (or the tool he is currently using), when the mail program receives a message to that user. * Activation of, and passing of context to, the debugger when an exceptional condition occurs. * Communication from the editor to the compiler, or other processing tool, that the user changed a module, or with higher precision, a particular part of it. * Notification of involved users when the configuration management tool establishes a new version of an object for public use. 1.1.3. Openness of representation. Measures the degree to which the data generated by one tool, or data otherwise in its domain, is made accessible for use by other tools. The openness of representation provides for successive growth of the set of integrated tools. As new tools are 'built, or old tools are modified, the information utilization and availa- bility will increase as a consequence of tool builders taking advantage of data defined by other tools this far. Examples: * The representation of data from the Pert chart tool in a form such that it can be used by the project tracking tool. * The representation of persOlmel, their abilities and availability, in a fonn such as it can be used by tile Pert chart project planning tool. * The representation of the language directed cditors internal working format in a way such tllat it can be used by the compiler, cross-referencer, data flow or complexity analyzer, etc. * The representation of tile Ada program library in a form such tlmt it can be used by tile configuration control tool, thc graphic browser, etc. * Representation of botll program code and documents in a form such that tlley can be related to each otller by means of a single mechanism. * Representation of any tools data within Ule agreed upon datamodel, so that all tools and operations assuming that datamodel may be immediatelly applicable. 2. Approaches to Building Development Environments The total effort that seem to have been invested in attempting to build development environments over the last decade is impressing. Many of those projects have been highly cooperative, involving participants and tools from several countries and companies. This may have been especially true at the European scene, including projects within the ESPRIT pro- gramme, such as PCTE/PACT, (pCfE 1986, PACT 1986, PACT 1988), and within the Eureka cooperation, such as ESF, (Fernstrom et ai, 1988), togeUler with national programmes in most countries. An example from Ule US is (Blumberg et a1 1988). A complete reference list over projects in tlJis area could in fact span'several pages, and several new ones are in an initial phase. The creation of such an environment is however a major undertaking, comparable to the development of a new operating system, showing tlle same need for perfonnance and over all quality before the results could really be used. Consequently, there has been a hope that the environment could be built by putting togeUler existing tools, since developing Ulem again would not be feasible. This approach also builds on the strategy to benefit from a large market of existing software tools, and a desire to be equally open to every tool and teclmology. On the otller hand, the whole idea of building an integrated system out of existing tools is an inherent paradox, at least if we are expected to accept tllOse tools as they are. If tlle benefits of integration are to be exploited, the illlegration must be quite tight, and utilize every chance of catching infonnation in one tool which might be of use in another place. Integration also seems to stand in conflict with tlle desire to be equally open to every tool, since very little can be achieved in tenn& of integration if not quite far reaching assumptions about involved tools are allowed. To support the opinion one could obselve Ule international scene where few, if any, environment products of the first kind have evolved. Instead, tllere is an emerging set of what might be called integration frameworks, examples of which are PCTE, (Emeraude 1987), and Software Backplane, (Atherton 1987). Those products are usually not immediatelly useful as end user products, but represent semi-fabricates on top of which tool manufacturers are expected to build their products. When it comes to ambitious environment products providing tightly integrated end user functionality, examples of which are Ule Interlisp, (Teitelman & Masinter 1984), Smalltalk, (Goldberg 1984), and the Rational Ada Environment, (Archer & Devlin, Rational 1986, Mor- gan 1988), we see tlmt they are not built out of existing tools. Instead, tlley are carefully crafted togeUler from pieces built wiUI a single purpose: to fit into tlte environment and contri- bute to its high levcl of integration. To conclude, we observe Ulat it is hard to sec any successful attempts on building a com- petitive environment out of existing tools. 2.1. Another Approach We have noted two ,existing approachcs: (I) Build the environment out of existing tools purchased on the market. We consider Ulis approach unsound in that it can be shown to ruin the major beneficial characteristic of the next generation envirolUuents: the high level of integration. (2) Build the environment frolll scratch to ensure a high level of integration. Although this approach has been shown feasible in some cases. it has the drawback of soaking up resources into development of basic capabilities and "tool kernels" which have no real relationship to the original reason for starting from scratch: improving the integra- tion. As an obvious alternative, we propose an approach which takes the best aspects out of the previous proposals: Take existing tools, over which we have full technical alld cOllunercial comrol, and modify them into a high level of integration. Both Witll respect to each other, and wiU, respect to a possible "integration framework" on top of which the environment is built. The idea sounds simple and obvious: instead of writing all those tools from Ule begin- ning. we modify our existing ones whenever necessary. In this way we can achieve the high level of integration and productivity associated with the second approach. for a price that is ( closer to the first approach. Furthermore. since the software to use for the environment con- struction is assumed to be known by in house engineers, there can be a fast start and high speed of progress. However, few organizations have Ule necessary control over a sufficienUy interesting and complete set of software tools. For a successful project, Ule following criteria must therefore be met by the involved organizations: * They must have full technical and commercial control over significant software tools. * They must have the willingness to modify UlOse tools to meet the requirements of the integrated environment. * They must be ready to commit to certain tools, and therefore to a particular technology and philosophy of integration. The rest of this paper reports on the applying of this philosophy in one particular context - the Ada product development efforts as carried out within the companies TeleLOGIC and TeleSoft. The necessary prerequisites seemed to be Ulere in that it included full control over a pro- duction quality Ada compilation system and a debugger. (TeleSoft 1988), and a set of pro- grammer support tools as collected wiUtin the Arcs system. (Ada editor, browser, recompilation tools. teamwork support, configuration control, program library manipulation. query tools, etc). (Schefstrom 1988). What is discussed here is Ulerefore probably best described as Ule second, and maybe definitive. step in the development of Arcs, (Schefstrom 1988, Schefstrom 1987, Schefstrom 1986a, Schefstrom 1986b, Schcfstrom 1986c, Narfelt & Schefstrom 1985, Narfelt & Schefstrom 1984). 3. An Overview of Arcs AlUlOugh integration takes away many of the traditional distinctions between tools, one could divide Arcs into Ule following components: * Ada oriented editor. * Compiler & Binder. * Library database browser. * Debugger. * "Integration framework", which includes program library database. query and command languagc. common internal datastructures, (such as Graphs (Schefstrom 1988», and win- dowing system and associated VI toolkit. * Teamwork support and configuration management, which includes multiple user coordina- tion, project control, and version management in the program library database. . The primary and most ambitious versions of the software are being built to take advan- tage of hardware configurations of Ule category "network of powerful workstations". The pur- ( pose is simple: create a significant reduction in programming turnaround time. While not all of the components have reached the stage of a stable released product. prototypes exist and are in use internally. Some of the components above, togeUler WiUl the philosophy of the integration frame- ( work, have been described in earlier publications, (see references at end of chapter I). How- ever, to make the presentation reasonably complete, we include a short summary of the integra- tion framework. 4. Integration Framework The Arcs environment is in many rcspects centered around Ule Ada program library. [n our case this program library is much more general than is sllicUy required by the Ada LRM, (Narfelt & Schefstrom 1984, Narfelt & Schefstrom 1985). Rather than being tailored to only solving the Ada library problem. as initiaUy perceived, it supports a network, or graph-. oriented datamodel. Arbitrary nodes may be introduced, which are connected by arbitrary rela- tionships. Both nodes and relationships may have attribllles. and also have a type. or a category. This is used by the compiler to represent Ada compilation units and their interrela- tionships, as well by other tools to include non-Ada code or other information. Another usage is to impose a mcta structure, subsystems, on top of the oUlerwise flat namespace of Ule Ada library. Included in this ffalnework is also a query and manipulation language based upon an extended relational algebra. Results of such queries are called graphs and nodelists, and all tools arc made to accept such objects as their input, and produce their output in the same way. This acts as one important integrating factor in Arcs. ( The library database is distributed in the scnse that a single database is construCted out of arbitrary physically separate parts. This acts both as a means for distribution, sharing. view creation, and version managcmcnt. All this is described in more dctail in Ule references above. The similarity in conccpts with efforts like PCTE/PACT, (PCTE 1986, PACT 1988), and CA[S, (CA[S 1988), should be noled. Similar ideas, and similar problems, seem to evolve out of the work around Hypertext systems, (CACM 1988). 5. Ada oriented editor The language oriented editor is probably the most established and well-known component in modem programming environments, (programming environment workshop 1986, ACM 1984). It is a key component for reasons that will be explained. Nevertheless, different editors that all are called language-oriented differ dramatically in capabilities, and are often talked about interchangeably in a way that is not reasonable. Therefore, let us distinguish between two elasses of such editors: .. Syntax-directed editors, which know about the syntax of the programming language, but not about the semantics. All of them can check the edited text for syntactic correctness; most of them allow the user to initially produce the text in terms of "syntactic categories"; some of them allow changes to take place in terms of "syntactic categories". .. Semantics-directed editors have, usually, all the syntax directed capabilities as a subset. In addition, they check and utilize typing information. This allows them to provide the prob- • ably more important extra benefits of type checking, interactive cross-reference, semantic completion, and browsing between modules in a system. ( The Arcs editor belongs to tile second, semantics-oriented, category. Since the services we want to provide are based on that syntactic or semantic information is available immediatelly during editing, it usually implies that this information must be main- tained incrementally. In the semantics case, in combination with a language like Ada which inlposes a Sb'ong type checking among separately compiled units, one must also integrate the editor with the program library, since littie can be said semantically about a compilation unit in isolation. The intermediate representation used by the editor must tilen, for tilings to actually work, be tile same as for the batch compiler and code generators. AltilOugh the above renections are at least partially known from a number of language editor projects, (Reps 84, Kaiser, Kaplan, & Micallef 1987), one could from a general software engineering standpoint observe that not many have a fair chance of actually building a seman- tic Ada oriented editor, since it requires very close coordination WiUl a complete compilation system and its program library database. When starting the work described here, we had already inlplemented an editor supporting syntactic support and hierarchical structuring, (Stromfors 1981, Stromfors 1986), as well as certain semantic services like interactive cross referencing of (batch) compiled units. These ser- vices utilized the internal form generated by the compiler, and tilereby already showed a degree of integration with the compilers internal form and tile program library. This was very useful for static inspection and understanding of a large system, and as a nice interface to the debugger. However, when changing tile unit in the editor most of tile semantic capabilities had to be turned off and the editor fell back to supporting mainly syntax. This because the semantic aspects of the internal form were not incrementally maintained, and must be updated in batch. However, closer investigation of tile problem revcaled that more could be achieved without prohibitive costs, a large part of which can be attributed to a tight integration with the existing compiler. The compiler used, (TeleSoft 1988), is structured into three phascs, a Front-End, a Middle-Pass, and Code Gcncrators. The Front-End includes all tilC routines for checking thc type correctness of a program, and its purposc in tilC translation process is to producc an intcr- nal represcntation of th~ ,compiled unit, which can then be used as input to tilC Middlc-Pass. The Front-End is well separatcd from othcr parts, and is nm complctely before starting later phases of the translation process. Because of this property, it was possible to import the Front-End software into Ule editor, and using it for very quick type-checking and internal-fonn generation. When the user needs to execute his program, the environment checks for which units only Ule Front-End has been run, and when necessary runs the Middle-Pass and Code Generator. As is discussed in the next sec- tion, Ule importing of all those compiler modules into Ule editor gives furUler substantial contri- butions to decreasing turnaround time. Further improvements of Ule editor are underway, including finer incrementality as a way of optimizing Ule generation of Ule internal fonn. Quite naturally, those opportunities are most obvious when a change is limited in scope or is in statements, (as opposed to in declarations). 6. Compiler and Linker The compiler is the most obvious and basic of tools in Ule environment, and a rich source of productivity enhancing integration opportunities. To achieve Ule high goals, Ule viewpoint must however be much more towards Ule compiler as one of many cooperating components. The structure of a compiler, to be possible to use in a high-integration environment, must be ( such that the parts can be used and called quite independenUy of each other. Different parts must be possible to recombine in new ways, and be possible to call independenUy and in different orders. Finally, it must be possible to activate routines in many states, such as in a partially completed syntactic or semantic analysis. The compiler used in this project had those properties to a quite high degree, and made it possible to for a relatively low cost collect what we believe are Ule major benefits of tight integration. Although incremental update of Ule internal fonn, during editing, proved to be economic in many cases, the major benefit of Ule integration seems to come simply by avoid- ing to throwaway computation results by repeatedly recompute datastructures from more basic forms. Given the current operating system and language teclmology, this seems to be closely related to whether one can keep datastructures in main memory and let tools eoooperate through those, as opposed to repeatedly converting between this fonn and Ule (usually different) fonnat Utat has to be used when communication Uuough fIles. This seemingly una- voidable loss in both structural and semantic contents has been noted before, and is also developed in an excellent"paper by R. Balzer, (Balzer 87). So, a conclusion is Ulat major gains can be achieved just by allowing tools to communi- cate in the more precise way that is possible by sharing all datastructures in a single virtual memory space. This opens up new possiblilities, and creates new ways of Ulinking about tool cooperation Ulan are available when being contstrained to combine tools by pipes or reading ( each others output liles. It also seems like Ada compilers are unusually rewarding to build this way, due to Ule dependency on a context of previously compiled units as provided in the program library. Any non-integrated Ada compiler must at every invocation open and read the program library, often doing certain conversions of an externally stored fonn to a more suitable internal fonn, fol- lowed by a tennination where all those internal datastructures are lost. At the next invocation, Ule same datastmclures are created again, just to be thrown away yet another time. Initial performance results are very encouraging, showing a 75 percent gain in compila- tion speed at medium sized modules, (400 lines). The results are even beller wilh smaller modules, as well as in cases when errors are detected. The laller is due to that in case of errors, no phase beyond semantics is nm, making the (alternative) batch startup overhead relatively higher. Detailed results do of course depend on the characteristics of the actual com- piler technology used, but we see no factors that would dramatically change the tendency. The tight integration also makes it easy and obvious to provide more end user services. Examples of such are fast semantic error feedback to the editor, and quick response and sug- gested recompilation orderings in case modules have been compiled in wrong order. Another nice example is the direCt' communication with the browser, which makes it possible to directly update graphical presentations whenever a compilation, (or editing session), causes a structural change. Finally, any Ada linker must check that the modules linked togetller have been compiled in the correct order. In the integrated compiler, all the necessary datastructures are immedi- atelly available making this operation much less costly. ( 7. Library Browser In modem programming environments, which are often based on a complex and highly structured "database", the tools for searching and presenting data are of great importance. The most important such tool is usually called the "browser". In our most basic case, the database contains an Ada program whose development the environment is intended to support. The role of the browser is then to visualize that program to the user, and allow him to move around among the packages, changing view and level of abstraction. The browser also establishes a default context, and provides a means for changing from typing characters into pointing at desired objects. All this immediatelly extends into han- dling any types of objects, and is therefore the most visible manifestation of the "seamless sys- tem". The browser in Arcs provides a number of different views and modes, and utilizes type information to present library database structures in the most appropriate way. When presenting nodes and relationships that can be identified as Ada modules and their interrelationships, Ada specific knowledge is used to group nodes and select icons as to emphasize that what is viewed is indeed an Ada program. Examples includes hiding bodies and subunits under specification nodes, and grouping together such units that arc in the same subsystem. The browser is tightly integrated WiUl Ule rest of Arcs, some examples of which are tlle following: • When a unit is recompiled, replaced, deleted, or a new unit included into Ule scope of the current library, this immediatelly affects the view presented by the browser. • The result of operations using tlle query and manipulation language are reported in terms of objects, called "graph variables". Those are in fact tlle variables of the query language, and the browser, as any tool in Arcs, takes such variables as input. • The unit clicked on using the browser is automatically made the default unit for any other command in Arcs. • The browser reads its information from exactly tlle same source, tlle program library data- base, as is used by evcry otller tool. This means that graphical pictures presented by the browser are always correct and up to datc in the sense tllat what is seen is always exactly tlle software that would execute if the linker was called and tllC resulting program was started. . The browser was however created specifically for Arcs, and did not exist on beforehand. 8. Debugger Debugging is closely coupled to Ule inspection and browsing of programs. Therefore, tools like the browser and Ule editor, with its interactive cross reference ability, fit extremely well in Uus context. If such tools are immediatelly available in close connection to the debug- ging session, they not only provide their original seIVice of ovelView and aiding understanding of the program, but provides Ule context and presentation mechanisms for the pure debugger activities. In fact, browser and "semantic" editor togeUler makes up a main part of the debuggers user interface. Reusing those components in this new context furUler strengthens the users feeling of system unifonnity. The tight integration here also shows the usual benefits of sharing internal datastructures. The internal fonns used by Ule compiler in doing typechecking and managing separate compi- lation, and by the semantic Ada editor to provide interactive cross referencing and semantic completion, is of course also used by the debugger. The immediate availablility of those datas- tructures, togeUler WiUI the resulting very short debugger initialization time and freedom of context change, furUler contributes to minimizing turnaround time. The debugger existed on beforehand as a separate tool WiUI its own user interface and own management of internal datastruetures. 9. Teamwork Support and Configuration Control In practice we seldom work alone, but are members of a team of programmers which concurrenUy modifies and updates different parts of the same program system. Any sel;ous enviromnent must allow for Ulis dynamic process of continuous change to proceed, without resorting to extensive manual work, recompilations, or purely administrative solutions. This is, however, one of Ule major challenges in building an Ada development system. Not very surprisingly, Ule design of Ule program library database is a very central issue here. In Arcs, we approach Ulis area in tenns of three aspects: (I) First, different users must be able to have differellt views of UlC same system under development. While Ule largest part of Ule program library is common to Ule program- mers of a project, Uley must be able to specify arbitrary individual variations. One pro- grammer might be updating one unit, in his view, while another one need to see Ule older stable version while testing still anoUler unit. This independence must be provided while not forcing duplication of parts that don't need to be so. (2) Second, partly as a consequence of the first requirement, it must be possible to have IlI/iI- tiple versiolls of the same unit in the program library. The first requirement could infact be approached as a question of allowing multiple versions, and allowing different people denote different versions as the default. The related concept of a configuration must then be introduced. (3) Finally, but very important and sometimes forgotten, Ulere must be good support for the work process. The configuration control scheme must be built for an interactive, dynamic, changing, and sometimes inconsistent, environment. We have found this last aspect, of hardening Ule configuration control system Witil respect to frequent change, as most fruit- ful and rewarding to work wiUl. Arcs, together with the TeleGen2 program library on top of which it is built, meets those requirements to a very high degree. In our case, an Ada program library is defined by composing a list of sublibraries, each containing an arbitrary set of compilation units. Sublibraries are independent entities, and may be combined completely freely to construct full libraries; it is just that certain combinations of sublibraries will make Arcs generate more complaints about recompilation needs and missing units than others. This property, independence of sublibraries, infact showed to be mOl:e important and useful than we fully foresaw when designing it. The scheme is very general, and can be used in many ways. However, Ule method dis- cussed here might be called "incremental baseline update", and builds on Ulat a given set of sublibraries are said to represent the most recent stable state of the project, in other words, a "baseline". Worl< then proceeds by programmers reserving units in a baseline sublibrary, tran- sefering them to a private sublibrary for modification and test. When finished, Ule unit can be moved back to Ule origin sublibrary, but maybe more typically to an intended Next Version of the Baseline sublibrary, ~\)1ce other people may not want to see the change immediatelly. The following shows a typical such sublibrary list: ( Typical sublibrary list: • 3. Standard_Sublibrary Showing Next Version sublibrary: 1. Programmers_Private 3. Standard_Sublibrary At some suitable point in time the configuration manager then decides to establish a new Baseline, and the point here is that Ulis can be done witil a single command, in a slruclurcd and highly automatic way given the information in the Baseline and Next Version sublibraries. The following summarizes the basic cycle: (I) Get a unit from Baseline sublibrary inlo a private sublibrary. (2) Modify and test tile unit in private area without disturbing others. (3) Return the unit 10 Next Version baseline sublibrary when finished. (4) Generate new baseline from old Baseline and Next Version sublibraries. Going into Ule details of this kind of multiple version, multiple people environment, reveals a large number of questions and special cases. However, most of them can be handled using this basic structure. Let liS consider some examples: Assume now that other people have updated and returned units, and you want to make those visible in your view for testing against, and you don't want to wait until a complete new baseline makes it visible. To solve this problem, tile RESYNC command can be used, which synchronizes the local view WiOl what has been released as Next Versions. This is done by giving the user local versions of tile Next Version units he doesn't already have. As anotller example, consider what happens if you you have reserved and changed a cen- tral spec, and therefore need to recompile many depending units, many of which currently are in the baseline, (and therefore are shared between many people). This problem is directly solved by the COMPILE command, which computes tile neces- sary recompilations, and makes sure that tltis takes place only in tile local view. Finally, consider tile case that one want to reserve a mtit for update, but there is a newer one than the Baseline version. The answer is that the GET command will automatically select the newest version, (if it is not reserved, in which case reselvation is denied). Similar schemes for doing configuration control and coordination of project groups have been presented within NSE, (Sun Microsystems 1988) and Eclipse, (pierce 1987). What ( differs Arcs from those systems is the high level of integration in Arcs, between tile tools and subsystems mentioned above, tile program library database, and tile characteristics of the Ada language. In that sense it is similar to the Rational environment, (Morgan 1988). The most important component, the Ada program library, existed on beforehand. How- ever, Arcs teamwork support and configuration management could never have been built, as is true for all of the services presented, without the unrestricted access to internal interfaces. 10. Experience AIl parts of what IS' described above have been developed at least to the stage of proto- types stable enough for internal use. A subset of tile functionality is currently offered, and has been delivered, as a product to external customers, and over the next year tile externally avail- able functionality will be successively increased. However, tltis means tilat tile major experi- ence tllis far comes from the internal use, and tile following comments are based on this fact. 10.1. User Illterface Arcs was originally built in a bottom-up philosophy, emphasizing basic primitives and combinational ability. The quite large body of functionality was provided by memlS of basic building blocks, which could tllen be combined into different more elaborate services. As an example of tllis approach, consider the often wanted service of iterating through all places in a system where a particular procedure is called. In a large system, this obviously involves searching through many modules. According to the building block approach, the basic service of stepping through units was made extremely simple: The command Arcs> ixref init just causes tile given to be searched. However, the problem of creating that list of compilation units, containing all tllOse units where it could be meaningrul to search for calls of tile given procedure, is not part or the "ixref' command. Instead, the generally available pro- gram library database query language should be used ror this task, utilizing the fact that Ihc only units that could pOssibly contain a call to a given procedure are those that 1) directly "withs", or 2) are secondary units, to the unit in which the procedure is declared. The Arcs command language allows such queries to be expressed direcUy at the same command line. This kind of generality provided a lot of power, and created numerous unexpected new usages and combination opportunities. However, only for U,e expert user. Experienced people having the necessary curiosity, and time to invest, find it very powerful, while oU,er people. have found Ute generality overwhelming and even disturbing. As a result of U,is experience, we are now working on providing more prepacked serviccs corresponding to often wanted patterns of combinations of basic functions. The trick here is to do Utis while keeping U,e combinational abilities and avoiding to create an ever more complex system. ( 10.2. Tile editor • While the Ada oriented editor provide a substantial body of well appreciated functionality not available oUterwise, Ute mere introduction of another editor is an obstacle in many cases. Despite the fact Utat most people learn the editor in less than a day, U,e intrusion into what is in some cases considered to be the programmers innermost privacy - U,e editor - is creating much discussion. The opinion has been that one should fmd a way of providing all the serviccs while letting the user still use standard "vi", for example. However, the previous discussion in this paper, together with several investigations dedi- cated to the editor problem, seem to show U,at accepting U,e limitations of not having "admin- istrative and teclmical control" over the editor would be too hard. So, instead of trying to util- ize an arbitrary editor, we invest more, and extend, the one Utat is built into Arcs. The development goes along two lines: I) we create a number of special versions of the built in editor to make it appear like different popular editors. 2) We introduce even more functionality dedicated to software development, to further motivate the change to a new editor. 10.3. Configuration cOll/rol The configuration control in Arcs, or as it also is called, "Teamwork support", is an example of functionality that successively grew out of the need and experience of the work in the developmcnt group. Different specifications were written and evaluated, but it was not until we had used Ada for a large system, with multiple people, for a longer time, that we could develop a functionality that was really felt helpful. The reason it took time before reaching a matured standpoint in Utis subject is probably just that it is a complex area where fcw well known principal results are available. It is furU,ermore an area where the semantics of modem separate compilation languages like Ada interact WiOl thc environment in a very elaborate way. This inherent complexity, together with U,e fact that many people, just as in U,e case with the editor, already have some own way of working, makes lilis part of Arcs into one of thc most difficult to explain. However, oncc the problem is understood, and UlC Arcs configuration control functionality has becn in use for a while, the service turns out to be among thc most valuable and appreciated. 11. Acknowledgements The ideas and results reportcd hcre are part of what has been discussed, argucd about, and worked on ovcr U,C ycars at onc of U,e most creativc places I know: The Ada Devclop- ment Environments conidor at TelcLOGIC/Lulea. Mikael Backinan, Nils Livingstonc, Hans Ohman. Ola Stromfors. and Johnny Widen, are all responsible for any good ideas presented in ~tis paper. 12. References ACM (1984). Proceedillgs of tile ACM SIGSOFT/SIGPLAN Software Ellgilleerillg Symposium 011 Prac- tical Software Developmellt Ellvirollmellts, Peler Henderson, cd., Pittsburgh Pennsyl- vartia, April 1984. Archer & Devlin Ratiollal's Experiellce usillg Ada for Very Large Systems, "White Paper". Rational, 1501 Salado Drive. Mountain View. CA 94043. Atherton (1987), Tile Software Backplalle. Product description material, Atherton Technology, 1333 Bor- deaux Drive, Sunnyvale, CA. ( Balzer (1987), Livillg ill tile Next-Gelleratioll Operatillg System, in (IEEE Software 1987). Barstow, et ai, (1984), Imeractive Programmillg Ellvirollmellts, Barstow, Shrobe, & Sandewall. McGraw-Hill 1984. Blumberg et aI (1988). NASA Software Support ellvironmellt: COllfigurillg all Ellvironment for Ada Desigll, Blumberg, Cantor, McNickle, and Reedy. in "Ada in Industry", Proceedings of the 1988 Ada-Europe Conference, Munich. Cambridge University Press. CACM (1988), Communicatiolls of tile ACM - SpeciallsSlle 011 Hypertext, July 1988. CAIS (1988), Military Stalldard Commoll APSE lllterface Set (CAlS). Proposed Military Standard, US Dep of Defellse. Carr et aI (1987), Implemelltatioll of a Prototype CAIS Ellvironmellt, in ACM Ada Letters, Volume VII, number 2, March,April 1987. Emeraude (1987), Emeraude PCTE Gelleral Preselltatioll, Product Description Material, G.I.E. Emeraudc, 38, bd H.-SeUier. 92154 Suresnes Cedex, France. Fersnstrom et al (1988). Eureka Software Factory Desigll Guidelines and Arcilitecture, Fernstrom, Narfell, Rccn- skaug, Schaefer, and Weber. ESF consortia 1988. Gallo, Minot, & Thomas (1986), Tile Object Managemellt System of PCTE as a Software Ellgilleerillg Database Manage- mellt System, in Proceedings of tile ACM SIGSOFT/SIGPLAN Software Enginccring Symposium on Practical Software Development Environments, Palo Allo, Cal, Dce 1986. Goldberg (1984), Tile Illfluellce of all Object-Oriented Lallguage 011 tile Programming Environment, in (Ballitow 1984). IEEE Computer (1987), IEEE Computer, Nov 1987, Special issue on programming environments. IEEE Software (1987), lEEE Software, Nov 1987, Special issue on programming environments. Kaiser, Kaplan, & Micallef, Multil/ser, DistribllJed Lallgl/age-Based Ellvirollmems, lEEE Software, November 1987. Morgan (1988), COllfigllratioll Managemellt alld Versioll Comrol ill tire Ratiollal Programmillg Ellviroll- mem, in "Ada in Industry", proceedings of the 1988 Ada-Europe Conference, Munich, Cambridge Univelliity Press. Narfelt & Schefstrom (1984), Towards a KAPSE Database, in Proceedings of the 1984 lEEE Conference on Ada • Applications and Environments, StPaul, Mirmesota 1984. Narfelt & Schefslrom (1985), ( Extelldillg tire Scope of tire Program Library, in 1985 International ACM Ada Confer- ence, Paris 1985. Programming Environment Workshop, (1986), Proceedillgs from [mernatiollal Workslrop 011 Advallced Programmillg EllvironmenlS, Trondheim, Norway, June 1986. PCTE (1986), A Basis for a Portable Commoll Tool Ellvirollmem, Functional Specification. European Strategic Programme for Research and Development in Information Technology. PACT (1986), PACT Gelleral Descriptioll, Bull SA Louvecielmes, France, 1986. PACT (1988), PACT Commioll Services - C Lallgl/age, Bull S.A. Louveciennes, France, 1988. Pierce (1987) ECLIPSE - All APSE Based 011 PCTE, in Proceedings of the Ada-Europe International Conference, Stockholm, May 1987. Reps (1984), Gelleratillg Lallgl/age-Based ellvirollmems, MIT Press, Cambridge, Mass. Software Sciences (1987), Eclipse Overview, Software Scienccs Ltd, UK, OClober 1987. Rational (1986), Applicatioll of tire ratiollal EllvirOlUllem to Lifecycle Software Development, "Whilc Paper", Rational, 1501 Salado Drive, Mountain View, CA 94043. Tei LeIman & Masinter (1984), Tire [Ilterlisp Programmillg Ellvironmem, in (Ballitow 1984). TeleSoft (1988), TeleGell2 - Tire TeleSoft Second Gelleratioll Ada Developmellt System, User's GI/ide. TeleSoft, 5959 Cornellitone Court West, San Diego, 92024 California Schefslrom (l986a) [megralillg an Ada.. Library Syslem inlo lire Unix Configuratioll Management Toolset. 2:nd IEEE Conference on Ada Applications and Enviroruncnts, Miami Beach, Aplil 1986. Schefstrom (l986b), Integratillg Ada ill all Existillg Ellvirollmem - the Arcs Example, 1986 ACM Ada Confer- ence, Edinburgh, May 1986. Schefstrom (l986c), Project Support Buildillg all the Ada Program Library, in Proceedings of Mll..COMP-86, London, September 1986. Schefstrom (1987), The System-Oriemed Editor - A Tool for Mallagillg Large Software Systems, 1987 ACM SIGAda Conference, Boston, Dec 1987. Schefstrom (1988), Programmillg-ill-the-Large with the System-Oriellted Editor, -1988 AdaEurope Confer- ence, Munich, Germany, june 1988. Stromfors (1981), The Implemelltatioll alld Experiellces of a Strtlclllre-Oriemed Text Editor, in Proceedings of ACM SIGPLAN/SIGOA Symposium on Text Manipulation, SIGPLAN Notices, vol 19, no 6, 1981. Stromfors (1986), Editillg Large Programs Usillg a Strtlctllre-Oriellted Text-Editor, Ola Stromfors, Linkop- ing University. In (p.rogramming Envirorunent Workshop, 1986). Sun Microsystems (1988), _ Illtroduction to NSE, March 1988. (