Tipos de software: quais as suas diferenças e funcionalidades?