5 Principles of Software Engineering
26 JULY 2023 | Sorana Stan
5 Principles of Software Engineering
26 JULY 2023 | Sorana Stan
1. Failure is Not an Option: Building fault-tolerant software
It is a lot of work to get something to the Moon and back. Therefore, the first crucial design principle is to construct a robust robot. The Zebro should be able to survive the harsh conditions of the lunar surface, including the extremely low temperatures, the moon dust, and the intense radiation.
How can the team achieve this goal and what actions must be taken? The first step is to make sure the system has no central weak spot from the very beginning of the design process. This ensures that the rover will continue to function and relay data to Earth even if a single component fails.
2. Step by Step: Going Up the Testing Levels
Testing is of great importance to ensure that every line of code is performing as expected. It is especially essential in a student project like Lunar Zebro, as learning is just as important as developing a fully functional rover.
In Lunar Zebro, we use a technique known as a V-model to ensure thorough testing of all layers of complexity. This means that we start with low-level testing and go up to more complex tests as needed. While the software is being produced, it is subjected to a series of tests known as unit tests. Since it does not take much effort and provides a foundation for additional testing, this is done as frequently as possible. More complicated tests are conducted at higher tiers of the V-model. Integration tests are another name for these kinds of higher-tier tests. The software development team uses integration tests to verify the functionality of sensors like the radiation sensor. This is less common because it requires more effort; however, it can be worthwhile as it provides the team with the assurance that the entire system is operating as expected.
3. Good Documentation
Software developers may not particularly enjoy writing documentation, and many outsiders may view such efforts as useless or unnecessary. In fact, the opposite is true. Good documentation is essential to guiding a team to a satisfying and productive outcome.
In a big team, such as Lunar Zebro, it should be very clear to the team what direction they should take. This is especially important given the complexity of the system, which encompasses many different branches of engineering and many different teams with constantly rotating members. Since all information and choices are handed around in the form of documentation, project structure and organization are inextricably linked to documentation. Lack of documentation has the greatest impact on a team when people leave, and new students must take over the workload. When there is no record of earlier efforts, it is difficult to determine whether or not any mistakes were made, which can affect further developments of Zebro.
4. Scrum and Sprint
Being organised in a big team is always a challenge! The scrum process allows us not only to share ideas with the team but also to detect issues and adapt to them during the project. The team works in sprints, which are time periods of one week to complete a certain feature or task.
An adoption of Scrum is used within the Software department of Lunar Zebro to incrementally build software. Weekly Scrum meetings make sure that all students can
show off any progress made, point out topics to be discussed, such as design choices, as well as inform if they are blocked by a third party (such as being in need of a hardware component).
ALTEN, an international technology and IT consultancy company provided Scrum training as well as Test Driven Development (TDD) and Behavioral Driven Development (BDD) training which helps the team to stay up to date with the development tools and techniques out there.
5. Enjoying the Process and its Challenges
So far, we have only talked about challenges and how we overcome them, but what about having fun? In a team composed primarily of students who are doing the work voluntarily, having the opportunity to get hands–on experience while also enjoying what you are doing is necessary. The team puts a lot of effort into the project every day, and we are always happy to learn that the excitement translates to some of our partners, such as Arjan Smit from ALTEN: “As an ALTEN consultant, I get a lot of energy from sharing my experience and knowledge with the students and team members. The project members don’t just tap into the experience but also challenge ideas and proposals making it also for a seasoned engineer a learning experience and very interesting.“
In conclusion, building fault-tolerant software in Lunar Zebro is a complex task that requires robust design, thorough testing, good documentation, and effective organizational practices. By embracing these principles, our team of enthusiastic students makes progress every day while also having fun and enjoying the process and its challenges!