This chapter discusses a variety of issues with respect to the use of QEF when dealing with large scale or complicated projects. |
The most important principle to keep in mind when dealing with
large projects is divide and conquer.
A large scale project should just be a combination of smaller
related sub-projects.
Partitioning a project into smaller projects facilitates and improves
the overall management and development of the project.
The QEF system facilitates this partitioning through the provision of qefdirs and the ease with which projects can share configuration (e.g., qvrs files) and processing (e.g., qsg libraries) information and control. By dividing the project into smaller more manageable chunks, development can be distributed effectively, without impeding their combination. The individual developer or development team need to consider their partition only, which will usually be a single directory or a small subset of the project's sub-directories. The project manager, Q.A. team, project librarian, and release engineers deal with the total project by having a single directory to manage all of the sub-projects. Many of the problems of handling smaller projects have already been addressed in Chapter 7: Getting Started Really. This chapter discusses issues of project architecture and control that should be considered when re-engineering a project to be managed and constructed using the QEF system.
|
The major objectives of the application of QEF to a project
should be to:
|
Chapter 1.6: An Example Process briefly described a possible model
of the development process and change control using QEF.
The described approach is dependent on the Version/Revision
control system being used.
The QEF system does not require the organization to adhere to any
specific software process, although the view pathing mechanism does
encourage the separation of master source, source being changed,
and the object tree.
Furthermore the version system being used may have limitations that
restrict those separations.
Basically the approach to development and change control should:
|
The overall project architecture does depend on the interdependence
of the project's components.
However, there are some guidelines
that should be followed:
|
The objective stated at the end of the previous section can largely be
achieved through adherence to what we call the principle of locality.
Within any sub-product:
|
A major objective of the QEF system is to provide the mechanisms
whereby a product is maintained in constant readiness to be released
on demand.
An important attribute of release readiness is the assurance that the product, as built, released, and shipped today, can be reproduced exactly in the future by simply extracting the appropriate source files from the version system archives and rebuilding the product in its entirety. The use of incremental builds, as supported by mimk and make, can be an impediment to achieving this goal, as the product as built today might make use of intermediate files that will not be built due to missed inconsistencies or changes to the build environment. While the QEF system does go a long way in ensuring the consistency of the product, further care and maintenance is required to guarantee release readiness. Proper use of the separation of the baseline and working source trees, and diligence in ensuring that the product is regularly built from the baseline source will help to maintain a product in a state of readiness for release. Occasionally a bare-metal-build (see Section 6) should be performed to ensure that circular-dependencies have not been introduced into the product. A file system integrity check (see Chapter 10) should be performed on a regular basis, particularly after a bare-metal-build, to ensure that the completed product is well understood, that all the required sources exist and are registered. |
Part of the process of rolling-release-engineering is the testing of
the ability to rebuild the product from the baseline source and only
that source.
Due to possible circular-dependencies or the existence of obsolete files in the product directory, the ability to reproduce the product incrementally does not guarantee the ability to produce it from the source. Many situations can arise whereby inconsistencies between the product as it currently exists and the product as it would be reproduced from source can be introduced during normal development. The costs of creating a consistency mechanism that would check inter-directory circular dependencies are largely prohibitive, thus one has to resort to testing to ensure that the product can be reproduced. The test to be performed is referred to as a bare-metal-build. That is, the product is produced on a raw machine, one on which the product and intermediate files either do not exist or are not visible, i.e., the machine is reduced to its bare-metal. Most organizations cannot afford to have such machines available, thus bare-metal-builds will have to be simulated as follows:
|
In Chapter 8.5: The Qvrs Files and Their Processing Order,
the sixth item refers to the optional project/platform specific
qvrs file p_sysvrs.vrs,
usually stored in the QefAdm/confvrs directory.
These files are used to contain settings that might be required
by the project on specific platforms.
Typically in small projects there will be few such settings and they
might be contained in the top level tree.vrs file using
a switch statement, as in:
switch @System[SysVrs] case sun* ... case * ... endswitchHowever, for large projects that require many settings, such as the directories or tools of third party software or capability flags, one should probably set up project/system QefAdm/confvrs/p_sysvrs.vrs files. The actual value of sysvrs may be retrieved using: % system -v or % qvrs @System\[SysVrs]
|
The vci tool is an interface to the version system
named by the @VCSys variable in the root.vrs file.
vci is actually just a variant of qsg which uses
the vci qsg library and the qsg library named by the @VCSys
variable.
The standard QEF product provides libraries for SCCS,
RCS, CVS, and perforce.
Others will be provided as created, either by QEF support or
their clients.
The use of vci is optional. The QEF system does not require its use, however, it does provide a convenient mechanism whereby the complexities of using a working tree process is greatly simplified. The file arguments to vci interfaces are just the base names. Furthermore, the vci commands can be used in the object tree. The vci interface provides the directory names as required. Normally the vci interface just provides the basic version system interfaces -- see list below -- as would be needed by a developer. vci is not intended to replace the version systems administration tools, although some organizations have supplemented their vci libraries to provide administration functions. To create a vci library, start by extracting the modules of the RCS library into an empty directory. To get a list of the rcs library modules use: % vci -s rcs -X changed tell what files have been changed (RCS) ci check in the argument files (RCS) co check out the argument files (RCS) diff run rcsdiff on the g-file and the v-file (RCS) lock lock the argument files (RCS) new create new administration files (RCS) novfiles list source files without v-files (RCS) rlog output the history of the argument file (RCS) tell tell what files are being edited (RCS) unget unget the argument files (RCS) vdiff run qgdiff on the gfile and the vfile (RCS)To extract the code, in an empty directory, run: % qsgdump -l-N -lrcs -E Each script should then be modified to replace the RCS commands and their set-up by the appropriate code for the new version system. The qeffile to create and install the library will be: set Suffixes qsg Begin mkqsglib -n<name> -vThe default installation directory for the above will be @_DestDir_/lib/qsg. To access this directory you will have to add: addpath QsgLib ProductDir/lib/qsgto the tree.vrs or project/platform sysvrs file. Alternatively, you could install this library in <qtree>/lib/qsg, which would make the library accessible to all projects. If this approach is adopted, care should be taken to protect the library when or if the QEF product is re-installed -- see Appendix A: WARNING With Respect To Re-installation.
|
Throughout this guide there have been references to the @QefAdm
directory.
In addition to the standard QEF functions it is recommended that directories to do source reconciliation, project distribution, product packaging, remote updates, project auditing, project backups, etc. be created in this directory to facilitate their invocation and to standardize their functionality. Examples of such functions can be found in the dtree qsg library. See x-qsg reconcile, updsite, and newmnfdb for examples or possible prototypes. Note that all of these functions are usually run in the baseline or source tree itself. Normally qef will abort if run in a source or baseline tree. To permit qef to be run in such a tree, the qeffile should contain: set PermitQef some non-empty valueNormally these directories should not be created in the object tree or working trees. To indicate to treedirs that a directory is not to be created in object and working trees, create a suppress.vrs file in the directory to be suppressed. A prototype suppress.vrs file is provided by x-qefeg. To use this prototype, run: % x-qefeg -M suppress-eg > suppress.vrsThe file's contents are irrelevant except as documentation -- the file's existence is all that is checked.
|
Most readers have or want to have the ISO900[0-4] certification.
This requires, in part, usable and accessible documentation
that describes the day-to-day activities and frequently
used procedures (i.e., how to check out a file).
In fact having such documentation is a good idea even if ISO9000
certification is not sought.
To facilitate the creation of such documentation QEF provides a prototype x_db database called x-qproc to document such procedures and provide how-to notes. To get a list of the current x-qproc entries, use: % x-qproc -L x-qproc : software process procedures eXplanatory D.B. qproc-intro : introduction to the qproc database new-qproc : creating a company specific qproc database BMprocs : Build Master procedures bm1 : creating a new baseline tree bm2 : comparing the repository to current baseline bm3 : updating a baseline tree with changes in repository ... bm15 : creating/using/saving a source configuration file DVprocs : Developer procedures dv1 : creating a working tree dv2 : creating an object tree dv3 : configuring the object tree dv4 : creating working and object tree sub-trees dv5 : checking out files for modification ... dv16 : removing treesNote the item new-qproc. To create an x_qproc database that is specific to your organization and version system, see the new-qproc item, as in: % x-qproc new-qproc new-qproc : creating a company specific qproc database This item describes creating a new project or company specific version of this database. ...Basically one extracts the source for the current x-qproc database, saving it in a file called proc.xdb in a sub-directory of the qefsupp project's tree -- see Section 11. The name is changed to avoid conflicting with the <qtree> version. This file is modified as required to reflect the organization's procedures and then installed using the qeffile: set Suffixes xdb Begin commands @argvWhen qef is run, <qefsupp>/bin/Xdb.dir/proc.xo will be installed and a copy of or link to <qtree>/bin/x_db called x-proc will be created in the <qefsupp>/bin. |
As mentioned in previous sections, some organizations set up
a project, sometimes called qefsupp,
to hold supplementary QEF files such as:
Given that the qefsupp directory constitutes important aspects of the build environment, it is crucial that it is managed using a version system and that appropriate measures are taken to record the revision of qefsupp used for any released product. |
The primary author and creator of the QEF system has long appreciated the comments, questions, and suggestions of his users as they have often led to significant improvements to the system. QEF Inc. is therefore happy to receive comments, complaints, questions, and suggestions regarding this guide, other documentation, and the software. We are also happy to incorporate changes that you find necessary, such as new qsg scripts and vci interfaces, so that subsequent QEF product releases will contain your changes. |
c135.qh - 9.3 - 03/10/22 |