Over the holidays, we will repost the top ten most popular blog posts of the year. This is one:
Imagine a road network such as the one illustrated here. This system becomes more complex as new roads are built. In order to be useful for users, the system requires maps (i.e. models). Otherwise, its value decreases since users are not able to know how to reach their destinations from their source points (unless they have indeterminate time to experiment without taking care about efficiency).
The same happens in information systems. Any activity aimed at adding value by improving the system’s quality (testing, maintenance, evolution, process reengineering, etc.) requires knowing the functional requirements of the system. This is the reason why structured thinking and analysis are key skills in software engineering. In contexts in which there is no documentation on such requirements or it is not available, structured thinking is even more critical, especially when reverse engineering needs to be performed.
Conceptual modeling is an essential technique to support knowledge management. Take a look around. In many technical and scientific areas, humans usually use models to structure thinking: We use maps (i.e. models) when we travel abroad; we cannot imagine constructing a building without blueprints and plans (i.e. models); scientists are trying to find out the map (i.e. the model) of the human genome; weathermen simulate (i.e. they model) the expected weather behavior; industrial processes are modeled and automated to guarantee quality results, etc.
As testers we also need to continuously managing knowledge about the functional requirements of a system. As we perform testing activities, we continuously think about implicit models of the expected behavior, although sometimes these models only persist (for some time) in our minds. Otherwise, we would not be able to perform quality testing, because we need to know what behavior needs to be checked. And in order to check the behavior, we need to find out what is the expected behavior (i.e the requirements).
Making models explicit is pointed out as a necessity each time that, for example, testers write down on their own sketches to improve their understanding of the system under test. However, in contrast with other traditional disciplines, software engineering contexts suffer a lack of tools, methods and case studies to support conceptual modeling. “The shoemaker’s son always goes barefoot”…
Models always exist, but in different levels of formalism: from those that are only implicit in the mind of each professional to those that are explicitly specified in some accessible and persistent support (in the form of informal sketches, natural language documents or explicit models specified in a conceptual-oriented language). When models are explicitly specified in a structured language, then, knowledge management capabilities can be automatically supported if adequate tools are available. In testing, the benefits are great if we achieve the last situation, because the better we know the system, the better we perform testing.
Over the last decades, software has become an intrinsic part of business and society in a wide diversity of domains and, consequently, software errors have great impact on economy. As systems become more complex, assisted and structured modeling for improving our quality services is a near-future investment in order to reduce risks such as rethinking, reworking, requirements conflicts and loss of knowledge. The more explicit and structured are our models, the more opportunities to validate, share and reuse the functional knowledge of systems are possible. When we model, we are forced to think in a less-ambiguous way. And if something remains non-clear, the necessary questions arise because of the necessity of completing the model. Investigation, requirements discovery, clarification of uncertain situations,… are also, in fact, main tasks of testers that conceptual modeling may help to improve.
A particular application of conceptual modeling is the assisted generation of functional models and documentation within the testing process. In Sogeti Spain we are working on this aim since testers use systems by experimentation every day and, by the way, they incrementally find out the functional requirements of the system under test. Generating functional models within the testing process allows to automatically obtain documentation that can be used by project stakeholders (including the testers) because a knowledge repository (continuously validated and evolved) about the system becomes available. The aim is not only performing more testing, but also performing better testing.
It’s time to contribute to the challenge of providing better integrations of modeling in our quality services and to provide facilities to put them into practice. In testing, modeling reveals that from errors we learn, and by learning we find more errors. Testers are experts in both errors and learning. Therefore, dear testers: Yes, we model!