Automotive Testing Technology International speaks to mobility software development company Bamboo Apps’ CEO Anatoly Spirkov, head of strategic delivery and operations Alexander Antonuk and CTO Maxim Leykin about how automotive companies can adapt and thrive in the software-defined vehicle landscape
It has been said that many automotive manufacturers still lag behind when it comes to their software engineering practices. Would you agree?
Spirkov: It is no secret that the automotive industry is currently undergoing a major transformation, with software engineering practices becoming increasingly important as vehicles become more complex and connected. However, it is also true that many traditional automotive manufacturers still lag behind in their adoption of these new practices.
The main issue for these OEMs is the legacy systems they rely on, which can often be slow, inflexible and difficult to update. This can make it challenging to incorporate new software into existing vehicle platforms and can even make it prohibitively expensive to do so. In contrast, newer market entrants have the advantage of starting with a clean slate, allowing them to build their vehicles’ architecture from scratch and fully integrate the latest software and technology.
This can be seen in the success of companies such as Tesla, which has built its entire brand around the concept of software-defined vehicles. Tesla’s vehicles are designed to be updated over the air, with new features and functionality added continuously throughout the vehicle’s lifespan. This level of flexibility and adaptability is simply not possible with traditional automotive manufacturing methods.
Of course, not all established auto makers are struggling with software engineering practices. Some, such as BMW and Audi, have invested heavily in software development and are making significant progress in this area. However, for many others, the process of modernizing their systems and operations can be slow and challenging.
In some ways, it is easier and cheaper for newer OEMs to develop their vehicles’ architecture from scratch than to redevelop the entire production conveyor of the vehicle platform for traditional OEMs. This is because they can build their software systems and hardware components to work seamlessly together, without having to worry about integrating them with legacy systems. However, it is important to note that this approach is not without its challenges, including the need to build a brand from scratch and the lack of existing infrastructure and supply chain relationships.
Overall, it is clear that software engineering practices will play an increasingly important role in the future of the automotive industry. While some traditional OEMs may struggle with the transition, others will adapt and thrive, creating a more connected, software-defined vehicle landscape for drivers around the world.
How can companies ensure Agile practices, continuous integration and automated testing?
Antonuk: They should start by changing their approach to software development. Long development iterations, similar to component development, should be replaced by short iterations, during which they can make quick releases, receive prompt feedback from customers, and make further product improvements based on that feedback. The best place to start applying Agile practices is with small software teams that are involved in developing software that is less demanding in terms of security requirements. Adapt these Agile practices to the needs of the organization, and then gradually scale them to other parts of the company using scalable Agile methodologies.
Leykin: Continuous integration is important and often underrated. Establishing a proper CI/CD process from the very beginning of the project significantly improves quality and maintainability, increases release rate and simplifies fault isolation.
For example, if there are many commits to the integration branch and as a result of all these commits and merges the build gets broken (a fairly common situation), properly configured CI will provide exhaustive information about the issue immediately and automatically, whereas investigating the issue without CI can take several hours of work.
Automated tests, in turn, are an important part of the CI chain. They are developed once they are executed after each commit. Such frequency just can’t be achieved with manual testing. And again, this aligns well with iterative processes and Agile practices.
How can Bamboo Apps help in this respect?
Antonuk: If customers come with a superficial understanding of what kind of product they want, we work through the vision and functionality for their product together with them in design thinking sessions. Together with the client, we go through the product definition and ideation phases and prototype a future solution based on that. We create a roadmap based on user personas and their requests.
If the project has many unknowns and some technologies need to be researched, we conduct a discovery phase. That’s when we do the research on the selected technologies and create a proof of concept. If we and the client are satisfied with the results, we move on and start the development of the complete product based on them.
We always encourage the use of Agile approaches and are ready to help the client understand them. At the same time, we realize that using the Agile framework in its pure form may not suit all companies. Therefore, we offer to combine and take the best of both worlds by using elements of both Agile and Waterfall methods in development.
On the technical side, we help select the optimal technology stack for the project and design its architecture. Then, we work with our client to build and adapt the development process to their requirements. As the current industry demands flexibility, we apply Agile methodologies that adapt to different client needs and team sizes. We also advise the client on CI/CD approaches to software development and help them with project customization. This, in turn, enables us to promptly deliver new builds and collect feedback from users.
When it comes to software development, how can companies cut complexity and increase efficiency?
Antonuk: On the process side, Agile practices will help. The implementation of Agile approaches will increase the efficiency of communication, increase the speed of interaction and work on the principle of continuous improvement. Using Agile frameworks such as Scrum will enable you to break down large chunks of work into iterations (sprints), during which you will be able to get a finished result in a short amount of time. You will have iterations in regular intervals, which will allow you to prioritize functionality and determine in advance what will be implemented in the next iteration. When it comes to developing large systems with different dependencies and multiple teams, scaled Agile frameworks such as Scrum of Scrums or the more systematic SAFe will work. Such frameworks allow you to combine and coordinate a large number of Scrum teams. Different teams will be focused on tasks that belong to the same functionality, allowing everyone to get the results they need in a timely manner.
Leykin: On the technical side, there is no silver bullet besides the one already mentioned: modern and thoroughly designed layered architecture, plus following the SOLID principles, especially code decoupling. To increase efficiency, sometimes it can be beneficial to find and use an appropriate third-party library instead of implementing something from scratch. To cut complexity, it can be reasonable to order the whole scope of work by importance and split it into several releases.
What testing do you do at Bamboo Apps?
Leykin: We do all the main types of testing (functional, integration, regression, smoke, security, etc), mixing them depending on the project and common sense. We also try to cover as much code as possible with automated tests. Automotive applications bring additional complexity here, because we need to arrange a field test process as well – i.e. to check how the software behaves on particular car models and while driving. To achieve this, we have three options:
- Build emulation stands using additional hardware such as Raspberry Pi;
- Use rented/shared cars whenever possible;
- Involve third-party partners that offer distributed automotive field testing.
How can companies decouple hardware and software development? How easy is this to do?
Leykin: Decoupling is a very powerful principle in general, because it allows modern hardware and software to remain maintainable despite high complexity. It is not always easy, but it is really worth doing. The key idea behind decoupling is to follow the single responsibility principle as much as possible and to have well-defined interfaces between the interacting components.
Specifically, decoupling between hardware and software is typically achieved through two mechanisms:
- Mapping of function blocks to different devices;
- Association of symbolic links to the device’s I/O.
System architect starts by defining application(s) logic without caring much about the way it will be distributed/executed on the different devices. Then it is necessary to select the devices and map the execution logic (function blocks) to them. The program automatically calculates the information that needs to be exchanged between the devices. Finally, we need to associate the symbolic links from the logic to the I/Os. If you want to change the hardware device, you simply have to repeat this process again on the new hardware.
How does one proactively reveal looming software issues with time, cost and quality?
Antonuk: It is important to involve the testing team not at the end of the project, but throughout the entire development process. This is required to make the testing process continuous and ongoing. Each iteration is accompanied by the development of new functionality and testing. Thus, with each iteration we produce a new piece of tested functionality.
For an in-depth investigation of the latest in software testing featuring Bamboo Apps and others, see the June 2023 issue of ATTI