Making systems1: Fundamentals
IV   Making a system
Chapter 18   Tools

18.1 Purpose

Tools are things that people use while designing and building the system. The tools are not part of the system itself; they are not delivered to an end user. Their purpose is to help the team do their job. Each project will have its own needs for tools, so this list is meant to inspire ideas rather than prescribe what may be needed for building any specific system. There are, however, some common principles for selecting and managing tools.

This chapter brings together information about many different kinds of tools, with references to the other parts of this volume that discuss details.

Please note: I do not recommend specific tools.

18.2 General considerations

There are a few general principles that apply to selecting tools generally.

First, most tools will be used for shared work. Tools should be evaluated on how well they help the team work together. Computer-based tools that manipulate shared data, such as CAD tools, should make it easy for multiple people to access the information concurrently. They should support the project’s approach to versioning information Section 17.4.3. Physical tools should be accessible to those who need to use them. This is especially important to consider if people work in multiple physical locations.

Second, many tools require training to be used effectively and safely. The project must ensure that each person has been trained to use a tool safely before they are allowed to use it. That implies that tools should be evaluated on the quality of educational material available on how to use them.

Third, good tools are integrated so that they work together. Tools that can share information can provide greater value to the team than ones that cannot.

Next, tools should support the general life cycle and procedures the project uses. They should fit into the project’s procedures for managing artifacts, versioning them, and reviewing them.

Finally, tools should be secure. Good tools will support the project’s overall approach to security, including controlling access to information based on a person’s role in the project. This includes both electronic and physical security.

18.3 Kinds of tools

This section provides an overview of all the kinds of tools discussed elsewhere in this volume, with references to the sections that provide details. The overview can serve as a checklist for a team working out what tools they need.

18.3.1 Storing and managing artifacts

The tools for storing and managing artifacts are discussed in Section 17.4.4.

Electronic artifacts. Alternatives include:

  • Version control systems, typically used in software development systems.
  • Document control systems, used to manage general documents, typically including workflow and access control features.
  • Document control systems built into discipline-specific tools, such as CAD systems.

Hardware artifacts. These can use:

  • Storage facilities and stock rooms.
  • Inventory management systems.

18.3.2 Specification tools

As I will discuss in Part VIII, the team will develop specifications for system components. A specification defines a component’s external interfaces—in systems terms, how the component is part of functional and non-functional relationships (Section 12.2).

There are several kinds of specifications (Section 36.5), including requirements, interface definitions, and models.

Requirements (Chapter 37). Requirements provide textual statements of things that are to be true about a system or component. Requirements can be managed using:

  • Spreadsheets, which are easy to use but provide little or no automation.
  • Dedicated requirements management tools, which directly organize requirements and the traces between them.
  • UML/SysML requirements tools that use the UML diagram standard to represent requirements and the connections between them.

I list a number of considerations for selecting requirements management tools in Section 37.13.

Interface definitions (Chapter 39). Interface definitions specify how one component can interact with others. These can be written using:

  • Textual Interface Control Documents, often using a template for each document. These provide flexibility but little support for navigation and automation.
  • Interface definition languages that are part of software or communication development tools.
  • Interface definitions based on industry-specific standards. For example, the SAE J1939 standard [SAE21] defines messages that on-board automotive components can exchange, and the standard provides message definitions in a spreadsheet.
  • Project-specific interface definition tools. Several projects I have worked on have developed their own tools, which integrated with other tools the projects used.

Models (Chapter 38). Mechanical, mathematical, electronic, behavioral, and other kinds of models are used as specifications. Relevant tools include:

  • Mechanical and electronic CAD systems.
  • UML and SysML tools for modeling behaviors.
  • Symbolic math packages and notebooks or workbooks for documenting and evaluating mathematical models.

18.3.3 Design tools

A project’s design phase works out a set of designs for the system and its components that satisfy the corresponding specifications (Part IX).

A design records the structure of each component—whether a high-level, composite component or a low-level component (Chapter 11). It also records analyses that lead to designs and rationales for how a design ended up as it did.

There are two kinds of design artifacts: the breakdown structure and the designs themselves. The model in Section 11.4 has six parts to a component design: form, state, actions or behaviors, interfaces, non-functional properties, and environment.

Breakdown structure (Chapter 41). I recommend that the component designs be organized by the component breakdown structure. This structure organizes the components into a hierarchical name space, giving each one a unique identifier and showing how one component is made out of others.

On most projects, I have used a spreadsheet to list all the components, the breakdown organization, and their names. This has worked well enough, and I am not aware of tools that explicitly support such organization.

Form (Section 42.1). The form represents the aspects of a component that do not change, or only very slowly. The design of physical components is generally handled using CAD tools. These tools use notations or drawing standards appropriate to each subject.

  • Mechanical designs using CAD systems.
  • Electronic board designs using CAD systems.
  • Electronic block diagrams and circuit diagrams using CAD systems.
  • Occasional designs that are not supported by CAD systems and are drawn by hand.

State, actions, behaviors (Sections 42.2 and 42.3). This part of a design addresses the parts of a component that change readily.

  • UML and SysML tools provide diagramming notations for representing state machines and behavioral diagrams.
  • More sophisticated state and behavioral specifications, such as I/O Automata [Lynch89], typically are expressed in specialized, non-graphical languages.
  • Additional state information is typically recorded in text. This allows for state information that is not readily expressed in the formal notations a project uses.

Non-functional properties (Section 42.5). These properties change slowly and are not part of the component’s form.

  • Allocatable resources (or budgeted items) that are part of a component, such as mass, area, or energy, are often recorded in spreadsheets. A few system design tools can track how these resources have been allocated.
  • Most other properties, such as reliability measures, are recorded in text.

Environment (Section 42.6). This is the environment in which the component is expected to operate, or in which it may be stored. This is usually recorded in text.

18.3.4 Analysis tools.

These tools help the design process by providing feedback on how well a particular design works. They also are used when verifying a proposed design.

18.3.5 Build tools.

These tools help translate designs or implementations into operable components that can be integrated into a running system, or used for testing.

The built artifacts will need to be stored and tracked, as discussed above .

Physical artifacts. The building of physical artifacts is, in effect, manufacturing one or a small number of those artifacts. These can be built in multiple ways.

  • Contract manufacturing provides a building service. Once a contract is negotiated, it takes as input a design for the component to be built and delivers a physical component built to that design. Contract management tools and procedures can help a team work with a contract provider.
  • Additive (3d printing) and subtractive (milling) manufacturing tools can take in CAD designs and produce a physical product. The physical manufacturing systems usually have associated software systems that translate CAD drawings into the forms needed by the manufacturing tool.
  • Manual physical build tools. This includes a workshop of tools to shape materials and join parts. It also includes guides, forms, or jigs used make particular parts.

In-house building will require maintaining a stock of the materials used in the components. This may include a stockroom of pre-acquired parts, such as metal or plastic stock and fasteners, or suppliers that can provide the needed material quickly.

The building process should be deterministic: if the team builds multiple instances of the same component, the components should all look and behave the same way. This places constraints on whatever tools and procedures are used to build the components.

Software artifacts. Software artifacts are built by translating source code into binary and packaging it in forms that can be installed on a target system.

  • Compilers and linkers perform the translation into binary forms
  • A build environment provides a server, perhaps virtual, for running the software build tools.
  • Release management tools package the binary software for distribution, and then typically signing the packages and copying them to a distribution server.

The software build process must be repeatable: if the same software is built twice, the result should be identical in behavior (differing only in things like version numbers, timestamps, or affected signatures). This usually means that the software build tools should be under configuration management so that identical tools will be used each time.

18.3.6 Testing tools

Testing involves taking a component, or collection of components, and subjecting it to some sequence of activities to verify that the component behaves as specified.

Testing occurs at two different times during system development: as people are building parts of the system and when a component or the system is being verified for final acceptance. These two uses lead to somewhat different needs in the tools for testing.

Tests need to be accurately reproducible: someone should be able to run a test one time on one component, then run the same test later on the same component and get the same result. Of course some component behaviors are not fully deterministic, but accounting for that, one should be able to count on passing a test meaning that the component really does meet the specification being tested. If a test fails, people need to be able to reproduce what happened to understand the flaw and to determine whether a fix works.

Reproducibility places constraints on testing tools. Physical tests will need to be done in consistent environments, using control and measurement tools that can be calibrated to ensure they are behaving consistently. Software tests similarly need to be run in controlled environments.

Hardware testing. Testing hardware components can range from measurements of single components to integration tests of subsystems or even the complete system. The tools available vary widely, depending on the kind of testing being done.

All hardware testing will involve:

  • Lab space where testing can be performed safely. Lab space is often a limited shared resource, so lab space scheduling tools can be helpful.
  • Inventory management tools that will allow testers to identify which components are to be used for tests.
  • Safety equipment to contain the hardware under test. This can range from safety goggles, to greater personal protective equipment, to containment enclosures or hoods.
  • Tools to help design test sequences.
  • Tools to help people follow a testing procedure correctly, including checking off completed steps and recording information at designated points in the test sequence.
  • Tools to record the test results.

Tools that support testing electronic components can include:

  • Power supplies, possibly with remote control to turn power circuits on and off.
  • Input or signal generators. In some cases these can be sophisticated software-based systems that generate input signals following the rules of a test scenario.
  • Tools to monitor the component’s internal state and output, such as test points or ports. This information might be shown live to a tester, or recorded for later analysis.

Tools for testing mechanical components include:

  • Tools for creating the testing environment, such as a shake table, vacuum chamber, wind tunnel, or Faraday cage.
  • Supplies of consumable materials used in tests, such as gases or liquids.
  • Test controllers that can take a scenario specification or procedure and control the testing environment and system under test accordingly. This may be a set of controls that a person following a script can manipulate or a complex control system that automatically manages the test components.
  • Measurement and recording tools to determine what happened during the test. These range from recording data taken from the system to video and audio records of the test.

Integrated system testing can go well beyond the tools listed here. Flight testing a new aircraft, for example, is far more complex than suggested by these tools. I leave the design and operation of such testing to others better versed in it.

Software testing. Software testing generally involves setting up a number of test cases or scenarios, running the software being tested, and recording the results. There are many different tools that can be used, and these depend on the kind of test being performed and the environment or language being used.

Categories of tools include:

  • Languages or applications for defining test cases, including the software configuration to be tested, the inputs and events applied, and the conditions that qualify as correct.
  • Tools for simulating larger systems that are not being tested. These range from simple component mockups or scaffolds to simulated environments. Integration testing can go as far as a software-in-the-loop simulation environment.
  • Tools to run software tests, both on-demand (during development) and in batches (during continuous testing and during acceptance verification).
  • Debugging and tracing tools that can gather information about what occurred during a test and help a person understand why a test failed.
  • Tools that collect and manage results.

18.3.7 Operations tools

The team uses other kinds of information to manage its operations—about the team, about procedures, plans, and to support decision-making.

Team information (Section 17.3.2). This information is organized around the roster of who is on the team, along with their roles and authority.

This information links to other other tools, some of which are often outside a project’s scope. These include:

  • The relationship between team members and organization security, in order to manage who has physical access to buildings and electronic access to information systems.
  • The relationship between a team member’s training and certification and learning systems.
  • The relationship between the project and other organization systems, such as time billing or human resources.

These relationships get updated whenever someone joins the team, leaves the team, or their role changes. Using tools that guide people through the procedures for these updates will make the changes more accurate.

Life cycle and procedures (Chapter 20). Teams follow a project life cycle and procedures to do their work. These consist of steps that people should follow to get specific tasks done.

Workflow management tools exist to help guide people through these procedures. These tools can help by:

  • Providing a way to organize the various procedures, to help people find the procedures they need to follow.
  • Tracking the progress of specific tasks.
  • Showing each person the tasks they have ahead of them.
  • Keeping records of work that has been done, as well as reviews and approvals when needed.
  • Making records available for audit.

Plans and tasking (Section 20.6 and Section 20.7). The project maintains plans for how the system-building work will move forward and the work currently in progress. The plan records the work that the project will be doing, at varying levels of confidence and detail, while tasking tracks the specific work that people have been assigned. This information is used both to make sure that the team do the work that is needed, without important tasks getting forgotten, and for forecasting the time and resources needed to move forward.

Maintaining plans and tasking is an exercise in managing a lot of detail. Many tools are available to help with these.

In practice, many of the tools available have been designed for projects other than systems-building, and do not support systems projects well. Many project scheduling tools are based on methodologies worked out for predictable work like building construction, where the tasks can be known fairly accurately in advance. These tools often are organized around a Gantt chart of the work, prompting their users to estimate duration and make task assignments early in the project. This works poorly in systems projects that have significant uncertainty early in the project, and where the degree of certainty (or predictability) improves unevenly as time goes by. This often results in a false sense of confidence in the project’s schedule early on, and requires a lot of effort to try to keep the schedule adapted as work moves forward.

It is worth spending effort working out how a project will manage its planning and tasking, and ensure that any tools chosen will support that approach.

Support. Project operations maintains other kinds of information as well, for which tools are sometimes available. These include:

  • Budget tracking. How much money has been spent, and how much is left. This often is part of or interfaces with an organization’s financial systems.
  • Risk tracking. This tracks potential risks to the project’s operations and helps people ensure that risks are addressed.
  • Customer relations. These tools track interactions with a project’s customers.

18.4 Managing tools

Good tools can enhance a team’s performance. Poorly chosen or implemented tools can harm it. One must choose tools carefully and apply thought to how they are implemented and used.

A project’s tools are themselves systems, and should be treated with the same care as the system being built for a customer.

Each tool should have a purpose. Spending the time to work out who will benefit from a particular tool, both directly and indirectly, can provide useful guidance when choosing between options for that tool.

The engineering support tool industry has generated many products that can be used, meaning there are often many possibilities to choose from. While sometimes the team can cut a decision process short because they already have experience with one particular tool, in the other cases it is worth setting out some criteria for making the choice.

Factors that can influence the choice of tool include:

Once a tool has been chosen, it will need to be purchased or built, and deployed for the team to use. This usually requires finding space for the tool, whether that is physical space in a lab or capacity on a compute server. The acquired tool will need to be deployed and integrated into the project’s systems: adding information about the tool to an inventory database, setting up a service schedule if needed, integrating software systems with the project’s security mechanisms.

Team members will need to learn how to use new tools. For some tools, this can amount to providing a written introduction or presentation on how the tool works. More complex tools will require more formal training. If there are safety or security risks in using the tool, the project should ensure that people are required to receive training before using the tool. It is common to track formally which people have gotten this kind of safety training.

Sidebar: Summary
  • Tools support many kinds of tasks: specification, design, analysis, build, testing.
  • Other tools support operations, such as planning and task tracking.
  • Tools should match how the team works.