ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/doc/html/requirements.html
Revision: 1.2
Committed: Wed Apr 21 12:26:30 1999 UTC (26 years ago) by williamc
Content type: text/html
Branch: MAIN
CVS Tags: ProtoEnd
Branch point for: V0_9branch
Changes since 1.1: +7 -6 lines
Log Message:
Change SRT to SCRAM

File Contents

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