Los requisitos funcionales de un software se pueden definir como la lista de todas las tareas que el software debe realizar, y se representan en UML mediante el diagrama de casos de uso. Cada caso de uso representa una funcionalidad del software, y se puede descomponer en subcasos de uso más detallados si es necesario. Los requisitos no funcionales, por otro lado, son aquellos que no se relacionan directamente con las funciones del software, sino con aspectos como la fiabilidad, el rendimiento, la usabilidad, etc. En UML, los requisitos no funcionales se representan mediante el diagrama de estados.
Para representar un requisito funcional en UML, se utiliza el caso de uso. Se trata de una notación gráfica que permite representar una interacción entre un actor y el sistema. El caso de uso describe una secuencia de pasos que el actor realiza para llevar a cabo una tarea, y el sistema responde de acuerdo con una serie de reglas preestablecidas. En la figura se muestra un ejemplo de un caso de uso.
Para representar un requisito no funcional en UML, se utiliza el diagrama de estados. Este diagrama permite representar el comportamiento de un objeto a lo largo de su vida, en función de los estados en los que se encuentra. Un estado puede ser una condición transitoria o permanente, y el cambio de un estado a otro se produce en función de una serie de eventos. En la figura se muestra un ejemplo de un diagrama de estados.