Our Approach

We provide services that cover all aspects of software development. We can fulfil the complete lifecycle for a system, or undertake a specific aspect or phase of a project.

When engaging with a client we agree a set of objectives and outcomes for each stage of the project. These will include all the required evidence to meet certification standards including DO-178B/C, EN- 50128 and IEC-61508.

Using this approach means the software we construct is reliable and easy to maintain. But just as importantly it enables objectives to be delivered within their planned timescales, keeping project costs under control.


Software Design and Implementation

Having an accurate design of a system provides a common understanding between ourselves and the client. This improves dialogue and ensures that the requirements and functionality a client requires are those that will be delivered.

We construct software models and designs using the standard design languages UML and HOOD. These can be developed from a set of requirements, or ‘reverse engineered’ from existing software.

Implementation remains an essential skill in the construction of complex software, and it is one of our core services. Our implementation skills are focused on the main languages used in high integrity and embedded systems:


Software Testing

We can undertake all levels of testing, from unit and integration testing, through to full scale acceptance testing. All testing is run in conjunction with a standard test framework (e.g. AUnit or Ahven), or using a third party tool of a client’s choice.

We design test cases to exercise the functionality of specific software requirements and use cases. This provides direct traceability from the requirements and design to the individual test cases, making tests more maintainable and aiding software certification.


Legacy Systems Development

Legacy systems with little or no documentation are common, even within the domain of safety critical software. In order to update these systems it is necessary to fully understand all aspects of the software before changes can be undertaken.

By fully evaluating these systems we can determine the best route to improve the quality of the software and to produce the documentation required for certification. This includes the creation of formal designs, adding requirements traces to existing software, and generation of regression tests.

Once the software has been analysed, it is then possible to continue the development of the system in the knowledge that the effects of future changes will be understood and predictable.