Technical Rules

As set out in Title 11 of the Internal Rules, these Technical Rules govern the development of software within OpenWIS® Projects.

Overview

Scope

Governance

Roles in the Develpment Process

Patch Management of OpenWIS Software

Patch Mangement, which is part of the Lifecycle Management, is ultimately how we can demonstrate Patchability. To be “patchable” means that corrections to software can be applied to the software without altering the expected application behavior or performance. The OpenWIS application is most certainly “patchable”. The entire development process and Continuous Integration environment contributes to the application’s “patchability”.

Software Quality

OpenWIS follows an Agile Development Model and supports a full Continuous Integration Environment. The code resides on GitHub and follows the traditional GitHub revision process. The Continuous Integration Environment performs automated Testing using Jenkins and Cloudbees tooling.

Code Style

C/C++ bute to the community, providing technical leadership, coaching and mentoring the team, promoting knowledge sharing and adoption of good practicepractices

Use the following exact form for include guards. GCC, and clang, recognize this idiom and avoid re-reading headers that use it. To avoid confusing GCC’s and clang’s header optimization, do not include any code before or after the include guards (comments and whitespace are OK). Do not combine any other preprocessor checks in the #ifndef expression.

#ifndef <guard>
#define <guard>
... All code ...
#endif // <guard>

JavaScript practices

Java practices

Python practices

Error handling

Check for errors early and often You need to do this even if you know that call will never fail. Why?

Also, when you make a new function which is failable (i.e. it will return a nsresult or a bool that may indicate an error), you should explicitly mark the return value should always be checked.

C++ strings

Use the Auto form of strings for local values

When declaring a local, short-lived nsString class, always use nsAutoString or nsAutoCString. These pre-allocate a 64-byte buffer on the stack, and avoid fragmenting the heap. Don’t do this:

nsresult
foo()
{
  nsCString bar;
  ..
}

instead:

nsresult
foo()
{
  nsAutoCString bar;
  ..
}

Java Code (Old version)

Test Coverage

Contributing Changes Back To The Central Repository

Documentation

Wiki

Website

General

Release

Contributing To Third Party Projects