Banner
[ MAIN | DARTS |DSHELL |ROAMS |DSENDS |SimScape |GNEIMO |Dspace |YaM |SOA |References |]

YaM provides a framework and supporting toolkit for the rapid and concurrent development of software.

While smooth, rapid, concurrent development is a much sought-after dream of software development, it is rarely achieved in practice and is certainly not for the faint-hearted. This failure stems from the lack of a framework and methodology to handle the significant challenges of rapid concurrent development. These issues are further compounded when the goal is to not simply develop software but to develop reusable software to support a software "product-line". These challenges which go well beyond the scope of traditional configuration management and include:

Instability:
By its very nature, the s/w development process involves immature code and fast and iterative changes. This mix in the context of concurrent development can cause developers to break each others' code, causing frustration and a breakdown of the development process.
Monolithic code:
Multiple s/w configurations are needed to support multi-platform, testbed, subsystem, debugging etc. development needs, but are rarely supported adequately because of the focus on the final delivered product. This lack of s/w configurability creates a drag on the development process with developers left to fend for their own day to day development needs.
Scaffolding cost:
Typically, individual developments focus on specific areas of the overall code at any given time. However, the remainder code is needed as scaffolding to support this development. As the size of the code grows, the scaffolding setup and maintenance can add significant cost and slow down the development pace, and can also lead to a forking of the development process with expensive sync up costs. As a consequence one typically ends up with code development that is time consuming, expensive, and with an end-product of marginal quality that is tuned to the specific project needs with little inherent reusability.
YaM has been designed to meet Challenges head-on and embrace these and other challenges of rapid, concurrent development that are essential for reusable software development. Such a framework can have a significant beneficial impact on the code development practices and also can help promote the much sought-after goal of reusable software.

Modules serve as the units which can be used to assemble new systems (packages), build scaffolding, Modules and packages reuse across multiple systems (configurability), expand by adding new pieces (modules) and so on. The key components of YaM which include the CVS source repository, a module release area, and user sandboxes.

All development software is organized into a collection of "modules". YaM "packages" are defined as sub-collections of the available modules. Developers can set up private sandboxes for module/package development. All module/package development takes place on private CVS branches. High level YaM commands support the setup, update and release of modules and packages. Released and pre-built versions of modules are available to developers. Developers can tailor the source/link module mix for their sandboxes so that new sandboxes (even large ones) can be built up easily and quickly by pointing to pre-existing module releases. All inter-module interfaces are publicly exported via links. A minimal, but uniform, convention is used for building modules.

Architecture YaM is written in Perl and is organized as a set of utilities on top of the public domain CVS software version control package.

Key design elements of YaM are:

  • YaM is written in Perl and is organized as a set of utilities on top of the public domain CVS software version control package.
  • All development software is organized into a collection of "modules".
  • YaM "packages" are defined as sub-collections of the available modules.
  • Developers can set up private sandboxes for module/package development.
  • All module/package development takes place on private CVS branches. High level YaM commands support the setup, update and release of modules and packages.
  • Released and pre-built versions of modules are available to developers.
  • Developers can tailor the source/link module mix for their sandboxes so that new sandboxes (even large ones) can be built up easily and quickly by pointing to pre-existing module releases.
  • All inter-module interfaces are publicly exported via links.
  • A minimal, but uniform, convention is used for building modules.

Problems being solved:

  • By its very nature, the s/w development process involves immature code and fast and iterative changes. This mix in the context of concurrent development can cause developers to break each others' code, causing frustration and instability in the development process.
  • Typically, individual developments focus on specific areas of the overall code at any given time. However, the remainder code is needed as scaffolding to support this development. As the size of the code grows, the scaffolding setup and maintenance can add significant cost and slow down the development pace, and can at times lead to a forking of the development process with expensive sync up costs.
  • Multiple s/w configurations are needed to support multi-platform, testbed, subsystem, debugging etc. development needs, but are rarely supported adequately because of the focus on the final delivered product. This lack of s/w configurability creates a drag on the development process with developers left to fend for their own day to day development configurations.

Advantages:

  • The use of private CVS branches allows the isolated development of immature code and helps avoid premature interactions and instability. YaM Releases provides a higher level layer to simplify the use of branches and hides messy details from the user. The main trunk is used for releases while branches are used for development. YaM's simple interface to the management of branches helps keep them short-lived and avoids the difficulties that arise when users directly work with CVS branches.
  • YaM supports a module release area so that new sandboxes (even large ones) can be built up easily and quickly by pointing to pre-built module releases. Thus the developer need only checkout source code for the Link modules modules under development, while the scaffolding can be quickly generated by pointing to pre-built released versions of the remaining modules. This saves considerable time, eases the creation of sandboxes, enforces the clear definition of inter-module interfaces and promotes code reusability.
  • YaM makes co-developers into users of one's code, so that there is continual I&T during the development process rather than relying on expensive, system level I&T efforts. It promotes the "grass grows taller as it is grazed" principle or software development. It helps catch problems and bugs early in the development process.
  • YaM promotes a "release early, release often" style of development without jeopardizing development stability.
  • Besides supporting the day to day needs of developers, YaM also supports the versioning and configuration management needs of I&T.
  • YaM encourages a clear and public declaration of inter-module interfaces and dependencies, which is essential for minimizing hidden interactions that are difficult to debug and isolate.
  • The package concept inherently relies on module re-use. Thus code reusability is an essential feature of the YaM development process.
  • YaM provides much greater visibility into the functional breakdown and organization of the software.
  • YaM provides ways to generate quick sandboxes for testing, training and demonstration purposes.
  • YaM supports multi-site, multi-platform builds, and provides a clean interface for using third party tools.
  • YaM's use of Perl and CVS simplifies porting to multiple platforms (Unix and non-Unix).
For additional details please see the YaM - A Framework for Rapid Software Development publication and visit the YaM Wiki.