Software Engineering


Software engineering is the study and an application of engineering to the design, development and maintenance of software.


My main research in this field is related to robotics, and how to apply software engineering methodologies to improve the software design process for complex autonomous robots.

The way to improve this kind of software is using new techniques involved in the standardized process of developing software in industries. Some of these techniques are: design patterns, agile development, continuous integration, and testing.

A design pattern is a general reusable solution to a commonly occurring problem within a given context in software design. There are many of them, but I have studied that bla, bla and bla are the mos useful for robotics.

Agile Software Development (Figure 1) is a set of software development methods in which requirements and solutions evolve through collaboration between self-organizing, cross-functional teams.

<b><i>Figure 1</i></b>. Agile Software Development process.
Figure 1. Agile Software Development process.

Continuous integration (CI) (Figure 2) is the practice of merging all developer working copies to a shared mainline several times a day. I am mostly interested in Jenkins and Travis, which are used in ROS.

<b><i>Figure 2</i></b>. Jenkins is an open source continuous integration tool.
Figure 2. Jenkins is an open source continuous integration tool.

Software testing (Figure 3) is an investigation conducted to provide stakeholders with information about the quality of the product or service under test.

<b><i>Figure 3</i></b>. The process of testing usually consists in bugs discovery.
Figure 3. The process of testing usually consists in bugs discovery.


Personal website of Raúl Pérula-Martínez, Software Engineer and Roboticist. He works at the Robotronica division at Juguetronica Inc., Madrid, Spain.

Raúl has a more than 8-year R&D experience in software and robotics development, working with the most advanced social and humanoid robots out there. He is mainly working on software engineering and machine learning applied to service robotics. His deep knowledge of many programming languages as well as machine learning framework has been mainly used for project management, robotics architecture development, and artificial intelligence.