ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/doc/html/requirements.html
Revision: 1.5
Committed: Fri Jul 20 12:21:28 2001 UTC (23 years, 9 months ago) by sashby
Content type: text/html
Branch: MAIN
CVS Tags: V0_19_6, V0_19_6p1, V0_19_5, SFATEST, V0_19_4, V0_19_4_pre3, V0_19_4_pre2, V0_19_4_pre1, V0_19_3, V0_19_2, V0_19_1, V0_19_0
Branch point for: V0_19_4_B
Changes since 1.4: +3 -3 lines
Log Message:
Updated documentation.

File Contents

# User Rev Content
1 williamc 1.1 <! Style Sheet Header>
2     <html>
3     <head>
4     <title>Requirements.html</title>
5     <body bgcolor="beige">
6     <! End Style Sheet Header -----------Insert Text Here --------------------->
7     <center>
8     <H1>SCRAM</H1>
9     <font color=red>S</font>oftware <font color=red>C</font>onfiguration,
10     <font color=red>R</font>elease <font color=red>A</font>nd
11     <font color=red>M</font>anagement
12     </center>
13     <hr>
14     This is the orignal list of functional requirements that the SCRAM project
15     is supposed to
16     address, along with the current status as regards implementation.
17     <p>
18     <table border=1>
19     <tr>
20     <th>
21     Requirement
22     </th>
23     <th>
24     Implementation Status
25     </th>
26     </tr>
27     <tr>
28     <td>
29     <li>Support Any Project Configuration
30     </td>
31     <td>
32     SCRAM provides a background functionality with a project interface. The
33     project interface allows tailoring the system to a wide range of project
34     structures through the use of SCRAM project classes.
35     Project classes are implemented currently as GNUmakefiles and are expected
36     to differ between projects. They are stored in the project, not in SCRAM.
37     </td>
38     </tr>
39     <tr>
40     <td>
41     <li>
42     Shall be easy to use. The user/developer should have
43     a very simple easily learnt interface.
44     </td>
45     <td>
46     Most frontline scram functionality is reached through the <b>scram</b> command.
47     Online help makes it easy to find out what commands are available and how
48     to use them. The exact functionality of some of the commands are somewhat
49     dependent on the project configuration. There is currently no easy way of
50     providing online help as to exactly what this is without relying on the
51     project administrator to document it carefully.
52     </td>
53     </tr>
54     <tr>
55     <td>
56     <li>
57     Shall provide an easy to use mechanism to select specific versions
58     of any build objects<p>
59     <li>
60     Shall obtain build objects from all available resources
61     transparently (e.g Local installation, Central Installation,
62     ftp archive etc. etc.)
63     </td>
64     <td>
65     SCRAM uses the popular idea of developer and common build areas. Selection
66     of specific files etc. is left to the projects versioning system (e.g. CVS).
67     <p>
68     Setting up specific external products etc. is handled with a special mechanism.
69     Every product has a special SCRAM description file which specifies such things
70     as library configurations, standard locations, environment requirements etc.
71     Once such a file exists then a <em>'scram setup url'</em> command
72     will download it into your development space and
73     set it up for your environment ready for use. <br>
74     Once it is tested and the tool is to be made available to the entire project,
75     its name/url should be added to the 'project requirements' file via the
76     &lt;Require > tag.<br>
77     <p>
78     Specifying a product to be used once its installed can be done via the
79 williamc 1.4 BuildFile and a special &lt;External name=<em>toolname</em>> tag.
80 williamc 1.1 </td>
81     </tr>
82     <tr>
83     <td>
84     <li>
85 williamc 1.2 Shall obtain required build objects in the most efficient manner
86 williamc 1.1 </td>
87     <td>
88     This requirement really
89     was designed to consider wether it would be quicker to build a local copy than
90     wait for a slow network connection when working against a central
91     installation. As yet no such intelligence is used - a local copy is always
92     assumed for the developers and a full build is required for any setup of a
93     remote development site.
94     </td>
95     </tr>
96     <tr>
97     <td>
98     <li>
99     Linking against central installations and external software shall
100     be transparent to the user.
101     </td>
102     <td>
103     Fully implemented.
104     </td>
105     </tr>
106     <tr>
107     <td>
108     <li>
109     A mechanism should be provided to allow a user to override default
110     build instructions. (e.g. Build a shared rather than an archive library
111     for a specific package and/or domain, try out new tools etc.)
112     </td>
113     <td>
114     All libraries and binaries can be built in debug, optimised or Insure++ modes.
115     This can be done in parrallel - no need for seperate development areas.
116     Which of these are to be built by default is specified in the project level
117     setup.
118     In the
119     directory corresponding to the library, overriding the default is simply a
120     matter of specifying the appropriate
121     <em>lib, lib_debug, lib_insure</em> arguments to the 'scram build' command.
122     Similarly for the binaries with <em>bin, bin_debug, bin_insure</em>.
123     <p>
124     Building from the top level, overriding defaults gets clumsy.
125     Things here need to be improved to provide a consistent interface.
126     </td>
127     </tr>
128     <tr>
129     <td>
130     <li>
131     Support builds on multiple "platforms" with multiple compilers and QA-tools
132     <p>
133     <li>
134     Shall be easily extendible to include new "Object Validation"
135     tools and SW process support tools
136     </td>
137     <td>
138     Multiple platforms are supported. Choice of compilers etc. is made at the
139 williamc 1.4 project level. Compiler types/QA tools can be included with a Tool description
140     file.
141 williamc 1.1 </td>
142     </tr>
143     <tr>
144     <td>
145     <li>
146     shall allow for bug-fixing of major releases.
147     <p>
148     <li>
149     Shall support releases of movable "Taggged Objects"
150     (e.g. alpha beta etc.) i.e tags that can indicate different objects
151     with time.
152     <p>
153     <li>
154     support "Tagged Objects" with major, minor and
155     bug-fix versions
156     </td>
157     <td>
158     Any development area can be turned into a central release by the
159     co-ordinator with the <em>scram install</em> command. For each release
160     a 'requirements document' and 'Bootstrap file' are required to allow the
161     specify external requirements, environment, appropriate versions and
162     automated dowload/setup information.
163     <p>
164     SCRAM does not interfere in any way with the version control system and so
165     any tagging allowed by the system is allowed in SCRAM.
166     <br>
167     Currently the process of creating/validating these files is not yet automated.
168     </td>
169     </tr>
170     <tr>
171     <td>
172     <li>
173     Provide build support for the different levels of testing.
174     </td>
175     <td>
176     SCRAM does not dirrectly provide this, however it does allow the project to
177     be configured to allow this by defining its own test classes and how such
178     classes are called.
179     </td>
180     </tr>
181     <tr>
182     <td>
183     <li>
184     support multiple "release" types
185     (e.g user release, developer release) defined by the project
186     configuration.
187     </td>
188     <td>
189     This can be achieved through seperate combinations of
190     'BootStrap' and 'Requirements' files. It is envisioned that a better
191     mechanism than this will be developed.
192     </td>
193     </tr>
194     <tr>
195     <td>
196     <li>
197     All build objects in a public release must be made available to be
198     picked up by remote sites - i.e need a "distribution system"
199     </td>
200     <td>
201     Partially implemented, through the BootStrap file. Automated downloading
202     of binaries/libs etc is not yet implemented. Src code is available from
203     the version control system - automatically directed by the BootStrapFile.
204     </td>
205     </tr>
206     <tr>
207     <td>
208     <li>
209     provide automated release documentation
210     </td>
211     <td>
212     Partially Implemented. SGML documents are required to give functionality,
213     in particular in regards to the release is the Requirements Document. Converting
214     to HTML or other format would certianly be possible although not yet
215     implemented. Release logging is also intended although not yet implemented.
216     </td>
217     </tr>
218     <tr>
219     <td>
220     <li>
221     shall be time-efficiency optimised for the work of the
222     release manager.
223     </td>
224     <td>
225     SCRAM reduces the work of the release manager in a number of ways.
226     <p>
227     e.g. The build environment has to be stated explicitly in the SCRAM project
228     files - no more hunting down special features of some developers environment.
229     <p>
230     Works directly from the src tree as seen in the versioning system. No need
231     to create special units for each individual package.
232     <p>
233     Coming - automated BootStrap file generation and documentation
234     to describe the release.
235     </td>
236     </tr>
237     <tr>
238     <td>
239     <li>
240     shall allow a public release to be compiled for many different
241     platforms from a single platform. (e.g. the use of architecture
242     specific/Backward compatability switches in compilers)
243     </td>
244     <td>
245     Not yet. You still have to log onto each seperate machine and 'scram build'.
246     </td>
247     </tr>
248     <tr>
249     <td>
250     <li>
251     shall support arbitrary naming for sub-directories containing
252     header files
253     </td>
254     <td>
255     SCRAM does not place any limitations. This is defined at the project level.
256     </td>
257     </tr>
258     <tr>
259     <td>
260     <li>
261     shall support arbitrary combinations of extensions for header
262     and source files
263     </td>
264     <td>
265     SCRAM however has hardoded some extensions to match certain operations
266     (e.g .cc .C .cpp all mean C++ src code).
267     As the file extensions etc. are decided at the project level there is
268     not problem with the project level configuration files converting these
269     extensions to those required by scram with a little fancy GNUmakefile.
270     </td>
271     </tr>
272     <tr>
273     <td>
274     <li>
275     shall be independent of the subsystem/package structure
276     <p>
277     <li>
278     shall support a directory structure of at least two levels
279     </td>
280     <td>
281     All defined at the project level. SCRAM makes no limitations.
282     </td>
283     </tr>
284     <tr>
285     <td>
286     <li>
287     shall be able to handle O(1000) packages in a user friendly manner
288     </td>
289     <td>
290     No limitations provided by SCRAM although the tools scram uses
291     (e.g. compilers) may cause a problem.
292     </td>
293     </tr>
294     <tr>
295     <td>
296     <li>
297     Maintenance of the "central installation" should be automated as much
298     as possible
299     </td>
300     <td>
301     Download is a matter of clicking on a link in a web page with SCRAM.<br>
302     It then can then be installed with a single command. Removal is not fully
303     supported as yet (the SCRAM database needs updating automatically)
304     , although 'rm' wont hurt!
305     </td>
306     </tr>
307     <tr>
308     <td>
309     <li>
310     must produce executables with built in version (tag) information
311     </td>
312     <td>
313     Not yet
314     </td>
315     </tr>
316     <tr>
317     <td>
318     <li>
319     shall support Objectivity, and provide easy mechanisms to
320     accommodate developments of this technology
321     </td>
322     <td>
323     An Objectivity tool description file does exist for linking with libraries etc.
324     Although full Objectivity functionality is not yet provided, this file
325     is the place to develop it.
326     </td>
327     </tr>
328     <tr>
329     <td>
330     <li>
331     shall place libraries in a common directory
332     </td>
333     <td>
334     Yes
335     </td>
336     </tr>
337     <tr>
338     <td>
339     <li>
340     shall provide the means to use a mix of programming languages
341     </td>
342     <td>
343     A combination of file extensions and tool files should do the trick.
344     Currently only fortran and C++ supported though
345     </td>
346     </tr>
347     <tr>
348     <td>
349     <li>
350     shall provide switches to use QA tools such as static code
351     analysers, and run-time debuggers
352     </td>
353     <td>
354     Ultimately these will be automatically generated (and documented)
355     in accordance to the tool description file for that product. At the moment they
356     have to be hard coded in.
357     </td>
358     </tr>
359     <tr>
360     <td>
361     <li>
362 williamc 1.2 More than one version of SCRAM must be able to reside on any given
363 williamc 1.1 "site" at the same time.
364     </td>
365     <td>
366     Yes - currently controlled through the SCRAM_HOME variable.
367     <p>
368     Developments will allow a project to specify that it requires a specific scram version, which will be automatically acquired (if not already available)
369     and set up for use.
370     </td>
371     </tr>
372     <tr>
373     <td>
374     <li>
375     An automatic installation procedure
376     </td>
377     <td>
378     Yes, although will be improved (See previous entry).
379     </td>
380     </tr>
381     <tr>
382     <td>
383     <li>
384     shall be configurable, such that different "tools" in the same
385     class can be easily interchanged. (e.g repository management software)
386     <p>
387     <li>
388 williamc 1.2 SCRAM shall have "project" specific selection of any "tools"
389 williamc 1.1 and "external software" (including version specification).
390 williamc 1.2 (e.g. Compilers, Package Management, libraries, repository,
391     SCRAM Version)
392 williamc 1.1 </td>
393     <td>
394     Yes with tool description files/ project files and no dependence on any
395     particular source code management system SCRAM is highly configurable.
396     </td>
397     </tr>
398     <tr>
399     <td>
400     <li>
401     provide an automatic installation procedure for any
402 williamc 1.2 SCRAM maintained project
403 williamc 1.1 </td>
404     <td>
405     Just click on a web page to install the project!
406     <p>
407     If you have things in non standard places you may be asked a few questions as to where things are.
408     </td>
409     </tr>
410     <tr>
411     <td>
412     <li>
413     All "project" specific information is to be maintained in the
414     "project" repository
415     </td>
416     <td>
417     Yes. (with the exception of groups which are currently hardcoded).
418     </td>
419     </tr>
420     <tr>
421     <td>
422     <li>
423     SCRAM shall be easily portable to new "platforms"
424     </td>
425     <td>
426     SCRAM is written in Perl5, and does not invoke system calls directly except for
427     gmake. As such it should be runnable anywhere that Perl5 and gmake
428     is available. By
429     removing the hard coded compiler descriptions and replacing them with
430     tool files will aid porting futher.
431     </td>
432     </tr>
433     <tr>
434     <td>
435     <li>
436     shall not rely on "platform"/"tool" dependent features
437     </td>
438     <td>
439     SCRAM BuildFiles simply require you to describe what, not how to make
440     something. Thus the logical build is seperated from the physical implementation
441     details. Its then a question of providing the right tool to perform the function
442     requested in the BuildFile.
443     </td>
444     </tr>
445     <tr>
446     <td>
447     <li>
448     Locations of external software must be specified solely at the site of
449     installation.
450     <p>
451     <li>
452     Specification of "external software" locations shall be automated as
453     much as possible. The user must be informed clearly of any missing
454     product information.
455     </td>
456     <td>
457     Setup of tools will match the current system to the toolfile requirements.
458     Where automation fails the user will be asked where a product is installed
459     </td>
460     </tr>
461     <tr>
462     <td>
463     <li>
464 williamc 1.2 SCRAM must provide a mechanism to specify "external software"
465 williamc 1.1 requirements and default configurations.
466     <p>
467     <li>
468     A project must explicity specify all external requirements for any
469     given "platform", for any given "release"
470     </td>
471     <td>
472     Yes through the requirements document
473     </td>
474     </tr>
475     <tr>
476     <td>
477     <li>
478     must be able to support multiple "projects" on the same machine
479     </td>
480     <td>
481     Yes - individual projects are self contained.
482     </td>
483     </tr>
484 williamc 1.3 <tr>
485     <td>
486     User must be able to see the project resources made available
487     through SCRAM
488     </td>
489     <td>
490     Once a project is installed it is entered into a SCRAM database. The
491     <em>scram list</em> command will show all the available projects installed
492     which are available to the user. SCRAM also allows database linking so that
493     scram project installations on remote sites can
494     also be made available over a shared file system.
495     </td>
496     </tr>
497 williamc 1.1 </table>
498    
499     <! Style Sheet Footer ---------------Do not change anything after this line-->
500     <hr>
501     <table border=1 width=100%>
502     <td align=left>
503 sashby 1.5 <a href=mailto:Shaun.Ashby@cern.ch
504     >Shaun Ashby</a>
505 williamc 1.1 </td>
506     <td align=center>
507 sashby 1.5 <SCRIPT LANGUAGE="JAVASCRIPT">document.write("Last Updated "+ document.lastModified );</SCRIPT>
508 williamc 1.1 </td>
509     <td align=right><a href=/cgi-cmc/pagestat>Show Stats</a>
510     </td>
511     </table>
512     </body> </html>
513     <! End Style Sheet Footer>