3.2 Organizing Components

After you map your system architecture to an initial set of components and determine which projects will access those components, refine your plan by performing the following tasks:

Deciding How Many VOBs to Use

ClearCase lets you store multiple components in a VOB. If your project uses a small number of components, you may want to use one VOB per component. However, if your project uses many components, you may want to store multiple components in several VOBs. A VOB can store many versions of many elements. It is inefficient to use a VOB to store one small component.

Keep in mind the following restrictions:

Figure 10 Storing Multiple Components in a VOB

Identifying Additional Components

Although you should be able to identify nearly all necessary components by examining your system architecture, you may overlook a few. For example:

System component

It is a good idea to designate one component for storing system-level files. These items include project plans, requirements documents, and system model files and other architecture documents.

Project baseline component

If you plan to use a composite baseline that selects baselines from all of the project's components, we recommend that you store the composite baseline in its own component. See Identifying a Project Baseline for details.

Testing component

Consider using a separate component for storing files related to testing the system. This component includes files such as test scripts, test results and logs, and test documentation.

Deployment component

At the end of a development cycle, you need a separate component to store the generated files that you plan to ship with the system or deploy inhouse. These files include executable files, libraries, interfaces, and user documentation.

Tools component

In addition to placing source files under version control, it is a good idea to place your team's developer tools, such as compilers, and system header files under version control.

Defining the Directory Structure

After you complete your list of components, you need to define the directory structures within those components. We recommend that you start with a directory structure similar to the one shown in Table 1; then modify the structure to suit your system's needs.

In Table 1, Component_1 through Component_n refers to the components that map to the set of logical packages in your system architecture.

Table 1 Recommended Directory Structure for Components


Component

Directories

Typical contents

System



plans


Project plans, mission statement, and so on


requirements


Requirements documents


models


Rose files, other architecture documents


documentation


System documentation


Component_1 through Component_n



requirements


Component requirements


models


Component model files


source


Source files for this component


interfaces


Component public interfaces


binaries


Executable and other binary files for this component


libraries


Libraries used by this component


tests


Test scripts and related documents for this component


Test



scripts


Test scripts


results


Test results and logs


documentation


Test documentation


Deployment



binaries


Deployed executable files


libraries


Deployed libraries


interfaces


Deployed interfaces


documentation


User documentation


Tools



compilers


Developer tools such as Visual InterDev and Rational Rose


headers


System header files


Project baseline


none


Composite baseline that selects baselines from all components in the project

Identifying Read-Only Components

When you create a project, you must indicate whether each component is modifiable in the context of that project. In most cases, you make them modifiable. However, in some cases you want to make a component read-only, which prevents project team members from changing its elements. Components can be used in multiple projects. Therefore, one project team may be responsible for maintaining a component, and another project team may use that component to build other components.

For example, in Figure 11, Project A team members maintain a set of library files. Project B team members reference some of those libraries when they build their components. In Project A, the cm_libs component is modifiable. In Project B, the same component is read-only. With respect to the cm_libs component, Project A and Project B have a producer-consumer relationship.

Figure 11 Using a Read-Only Component