The importance of systems architecture and testing
Given the countless available languages and ways of working, the world of developers is undoubtedly complex. Within this world, systems architecture and testing are particularly important. During the Codemotion Meetup event at the BBVA Innovation Center in Madrid, developers discussed testing and the possibilities of systems architecture.
An independent consultant who specializes in systems architecture, mobile development and security, Jorge Ortíz Fuentes talked about how to achieve a good systems architecture. He compared this task with the work of NASA and presented the following key ideas:
- We need to go back to using parts just like NASA engineers do.
- Missions are completed through processes: before Humankind can go to Mars, it must first go to the Moon. It's the same with systems architecture – progress is attained step by step.
- Avoid single points of failure, i.e. points that create a chain reaction when they fail.
- We need to find the source of the problem.
- Create things that last a long time; build software that can be changed without major costs.
- Arrange things so that team work is possible (beware of iOS storyboards).
- It's a lot easier to solve problems when our mission is clearly defined, i.e. when the architecture has been clearly defined.
As for the characteristics of good architecture, Jorge Ortíz said: "it must make it possible to grow quickly; be robust and reusable; and enable team work and move solutions back."
Jorge Ortíz also said that "there are other issues with architecture that need to be solved with patterns, .i.e. command patterns, template patterns or design patterns."
Pablo Guardiola, a software engineer, talked about testing, why testing is important and what types of testing there are.
With regard to why it is important to perform tests, Guardiola mentioned several reasons:
- Validate that our system works correctly.
- Check the code's coverage.
- You can do refactoring.
- Tests are the system's live documentation.
- Perform Test Drive Development (divide a complex problem into a simple problem).
- Enable customer acceptance, i.e. assure the customer that the app works.
- Carry out pair programming: work with a colleague to identify possible failures together.
Pablo Guardiola divided test types into two groups:
-Status verification: the method's internal behavior can be changed without resulting in test fail.
-Behavior: more fragile; if the method's name is changed, the test fails.
Pablo Guardiola finished by saying: "Should we worry about testing? Yes, but without going crazy. We shouldn't test just for the sake of testing. We should try to test the most critical portions of our app."