Cuando se va a desarrollar un software es esencial estudiar y analizar el problema que se desea resolver. Este problema puede estar enfocado por ejemplo a la automatización de un proceso de negocio de alguna empresa. El software a desarrollar seguramente permitirá registrar información que necesite el proceso de negocio y generar resultados de valor para sus usuarios. También deberá permitir validar o hacer cumplir muchas reglas de negocio. Por lo tanto, los ingenieros de software necesitan usar algunas técnicas que les ayuden a entender mejor la problemática que están analizando antes de iniciar con la implementación del software.