In order to achieve this, it is not enough for the person or company assigned with the development of the software to have the necessary fundamental skills.In regards to development methods and tools, they must also understand the basics of their customer's fields of activity.
The following sections introduce some of the tools and techniques that we have established over the years to help us deliver the quality software we proudly call our trademark.
Best Tool For the Job
"If all you have is a hammer, everything looks like a nail."
Even if a solution is technically perfect, it's not worth a thing if it doesn't integrate well with your system.
At Kreios, we take pride in maintaining a large toolbox that contains more than just a hammer.
We support our people in sharing their experiences and in building up a broad base of technical, as well as industry-related knowledge. Our experience with numerous development tools and approaches provides us with the flexibility to choose the tools and technologies for your project. Based on your needs rather than our habits, and we are happy to include you in these decisions.
We put the "custom" back in "custom development"!
Short feedback cycles are important in every step of the development process.
In turn, this usually requires the frequent execution of repetitive tasks that provide the necessary feedback, such as executing tests or building the system. This kind of tasks however is perfectly suited for automation.
With us, every piece of code has to pass a series of automatic and semi-automatic verification before being integrated into a system's "public" code base:
- A continuous integration demon builds the software ...
- ... runs the tests ...
- ... and performs the static code analysis.
- Then the system asks a second team member to review the checked-in code.
Automating repetitive tasks comes with several advantages concurrently: It ensures that these tedious tasks are executed more frequently than would be possible if done by humans. It significantly reduces the number of errors that can sneak in during execution. In addition, continuous integration allows us to put collaborating components or parallel processes together very early in the process, which reduces compatibility issues and drastically simplifies the integration of the various system modules.
The reason Kreios strongly promote automated testing is because it's about more than just testing.
It's also about increasing efficiency, about enabling flexibility and about focusing on what's important.
The cost of fixing defects in software increases significantly the further down the line errors are found; both in terms of project delays and unexpected extra effort put into the project. Therefore, it is crucial to find an economic method of detecting bugs as early as possible during the development process.
Additionally, tests form an always up-to-date documentation of the system they were created for, representing an invaluable source of knowledge and flexibility for developers during production as well as maintenance. It is only natural that some requirements change as the project matures and the consequences of each decision become more evident than before. However, these late changes are frequently not reflected by the specification documents, because the specification phase is perceived as completed as soon as the implementation begins. In effect, the implementation will begin to diverge from the specification documents.
We implement tests that automatically check for the systems' desired behavior. We make sure that the system always behaves the way it is supposed to, even as the definition of this changes over the course of the project. By automatically running the tests after every change, we can also be sure never to break any existing functionality. This makes it much easier to introduce changes in later stages of the project.
Test-driven development takes this approach one step further by writing the tests, even before the code. Doing this makes it easier to create a modular system with exchangeable parts, because it helps us to look at each part of the system the same way a user or caller would. The test-driven development leads to more intuitive interfaces without hidden dependencies or other unexpected quirks. At the same time, it ensures that we only create code that is needed in order to satisfy the system requirements.
Static Code Analysis
Static code analysis refers to inspecting code without executing it, e.g. by spotting weaknesses and by generating metrics that help to determine the quality of the code.
Code reviews serve multiple purposes:
Four eyes rather than two reduces the risk of having a bug leaking into the code-base. Code reviews ensure knowledge transfer within the team.
At Kreios, the review process is seamlessly integrated into the internal collaboration environment. Any change to the code must be reviewed by a second team member. The change becomes reworked until the reviewer accepts the code and officially clears it for submission.