Software Engineering
To ensure excellent software quality, we use well-defined development processes which are based on modern and established frameworks. Using agile methodologies – like Scrum or Scaled Agile Framework (SAFe) – allows flexibility in projects, so that the end goal is moldable and becomes more clearly defined during the project. This enables efficient and easy adaptation on changing conditions and prerequisites.
Our Philosophy And Culture
Continuous attention to technical excellence and good software design
Ensure high quality – do automated testing and make it measurable
Individual responsibility and clearly defined roles
User centric approach
Transparency to the customer
Quick response time
Usage of agile processes
Continuous improvement
High Quality Standard
Continuous improvement of processes and tools speeds up the development and deployment. To be able to ensure and keep high quality standard, it is mandatory to make it measurable. Therefore we continuously use tools for static and dynamic code analysis as well as for evaluating test coverage.
The diagram below shows the timelines of test coverage and complexity of an Inaris core component (Service Manager). Although the complexity (number of conditions) is more than doubled, the condition/decision coverage of the unit test is kept on a high level – and even increased.
Software Development Tools
Our Agile Software Development Process
- Understand customer expectation
- Define project scope, goals and schedule
- Collect and analyse requirements
- Detect system / legal constraints
- Identify stakeholders
- Check customer skills
- Analyse specifications and standards
- Evaluate feasibility (rough effort estimation)
- Prioritisation of requirements (together with customer/partner)
- Detect project risks
- Define Proof of Concept (PoC)
- Create Sprint backlog or Gant chart
- More detailed effort estimation (if necessary)
- Prioritisation of working packages and tasks
- Involve the customer
- Do resource planning
Concept and Design
- Ensure specification process before implementation starts
- Double-check with customer
- Modularity to improve testability and scalability
- Portability (using HW and OS abstraction layer)
- Define usage of 3rd party stacks
- Define design patterns
Implementation and Porting
- Defined responsibilities for each SW component
- Coding standard unifies sources (tools ensure its observation)
- Get benefit of tools (Embedded Wizard, Visual Studio)
- Use simulation to reduce dependencies (e.g. reception of live-data on target)
- Porting to target platform
- Adaptation to customer MW
- Realisation/Integration in reference orexample applications
Documentation
- Continuous adaptation of descriptions and changelogs
- Tools verify completeness and conformance of in-line descriptions
- Automated generation of documentation
- Documentation generated from source code to ensure synchronicity
- How-to documents for customer side integration
- Defined responsibilities for test applications (separate from implementer)
- Automated testing established
- Regression testing on multiple platforms
- Traceability: verification based on requirements
- Continuous test improvement (code coverage, bug fix verification)
- Static code analysis
- Own test environments for GUI and C-Code
- Add 3rd party test suites (if applicable)
- Defined release process
- Packaging of Software + Documentation + Test Reports
- Fully reproducible and archived release packages
- Release usage: Examples, code snippets, reference applications
- Release notes with change log
- Dual control prior to release
- Hand over training (optional)
- One face to the customer
- Guaranteed response time
- Frequent synchronization with the customer
- Align bug tracking process
- Incremental releases
- Monthly status reports
Request more information
Get in contact with us to get detailed information and evaluation material.