Baixe o app para aproveitar ainda mais
Prévia do material em texto
CAPÍTULO 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 5.1 Modelos de contexto 5.2 Modelos de interação 5.3 Modelos estruturais 5.4 Modelos comportamentais 5.5 Engenharia dirigida a modelos Co nt eú do Modelagem de sistemas Objetivos O objetivo deste capítulo é apresentar alguns tipos de modelos de sistema que podem ser desenvolvidos como parte dos processos de engenharia de requisitos e de projeto de sistema. Com a leitura deste capítulo você: • compreenderá como os modelos gráficos podem ser usados para representar sistemas de software; • compreenderá por que diferentes tipos de modelo são necessá- rios e as perspectivas fundamentais de modelagem de sistema de contexto, interação, estrutura e comportamento; • terá sido apresentado a alguns dos tipos de diagramas da Unified Modeling Language (UML), e como eles podem ser usados na mo- delagem de sistema; • estará ciente das ideias subjacentes à engenharia dirigida a mo- delos, com a qual um sistema é gerado automaticamente a partir de modelos estruturais e comportamentais. Modelagem de sistema é o processo de desenvolvimento de modelos abstratos de um sistema, em que cada mo-delo apresenta uma visão ou perspectiva, diferente do sistema. A modelagem de sistema geralmente representa o sistema com algum tipo de notação gráfica, que, atualmente, quase sempre é baseada em notações de UML (linguagem de modelagem unificada, do inglês Unified Modeling Language). No entanto, também é possível desenvolver modelos (ma- temáticos) formais de um sistema, normalmente como uma especificação detalhada do sistema. Neste capítulo, escrevo sobre a modelagem gráfica usando a UML, e no Capítulo 12, escrevo sobre a modelagem formal. Os modelos são usados durante o processo de engenharia de requisitos para ajudar a extrair os requisitos do sistema; durante o processo de projeto, são usados para descrever o sistema para os engenheiros que o implementam; e, após isso, são usados para documentar a estrutura e a operação do sistema. Você pode desenvolver modelos do sistema existente e do sistema a ser desenvolvido: 1. Modelos do sistema existente são usados durante a engenharia de requisitos. Eles ajudam a esclarecer o que o sistema existente faz e podem ser usados como ponto de partida para discutir seus pontos fortes e fracos. Levam, então, os requisitos para o novo sistema. 2. Modelos do novo sistema são usados durante a engenharia de requisitos para ajudar a explicar os requisitos pro- postos para outros stakeholders do sistema. Os engenheiros usam esses modelos para discutir propostas de projeto e documentar o sistema para a implementação. Em um processo de engenharia dirigida a modelos, é possível gerar uma implementação completa ou parcial do sistema a partir do modelo de sistema. Sommerville_Cap_05.indd 82 31/05/2011 15:07:28 83Capítulo 5 Modelagem de sistemas O aspecto mais importante de um modelo de sistema é que ele deixa de fora os detalhes. Um modelo é uma abs- tração do sistema a ser estudado, e não uma representação alternativa dele. Idealmente, uma representação de um sistema deve manter todas as informações sobre a entidade representada. Uma abstração deliberadamente simplifica e seleciona as características mais salientes. Por exemplo, no caso muito improvável de este livro ser publicado por capítulos, em um jornal, a apresentação seria uma abstração dos pontos-chave do livro. Ao ser traduzido do inglês para outro idioma, teremos uma representação alternativa. A intenção do tradutor é manter toda a informação como ela foi apresentada em inglês. A partir de perspecitvas diferentes, você pode desenvolver diversos modelos para representar o sistema. Por exemplo: 1. Uma perspectiva externa, em que você modela o contexto ou o ambiente do sistema. 2. Uma perspectiva de interação, em que você modela as interações entre um sistema e seu ambiente, ou entre os componentes de um sistema. 3. Uma perspectiva estrutural, em que você modela a organização de um sistema ou a estrutura dos dados proces- sados pelo sistema. 4. Uma perspectiva comportamental, em que você modela o comportamento dinâmico do sistema e como ele reage aos eventos. Essas perspectivas têm muito em comum com a visão 4 + 1, de Kruchten, da arquitetura do sistema (KRUCHTEN, 1995), na qual ele sugere que você deve documentar a arquitetura e organização de um sistema por perspectivas diferentes. No Capítulo 6, discuto a abordagem 4 + 1. Neste capítulo, uso diagramas definidos em UML (BOOCH et al., 2005; RUMBAUGH et al., 2004), que se tornou uma linguagem de modelagem padrão para modelagem orientada a objetos. A UML tem muitos tipos de diagramas e, dessa forma, apoia a criação de muitos tipos de diferentes modelos de sistema. No entanto, uma pesquisa em 2007 (ERICKSON e SIAU, 2007) mostrou que a maioria dos usuários de UML acredita que cinco tipos de diagramas podem representar a essência de um sistema: 1. Diagramas de atividades, que mostram as atividades envolvidas em um processo ou no processamento de dados. 2. Diagramas de casos de uso, que mostram as interações entre um sistema e seu ambiente. 3. Diagramas de sequência, que mostram as interações entre os atores e o sistema, e entre os componentes do sistema. 4. Diagramas de classe, que mostram as classes de objeto no sistema e as associações entre elas. 5. Diagramas de estado, que mostram como o sistema reage aos eventos internos e externos. Como não tenho espaço para discutir todos os tipos de diagramas UML, concentro-me em como esses cinco tipos principais são usados na modelagem de sistema. Ao desenvolver modelos de sistema, muitas vezes você pode ser flexível no uso da notação gráfica. Você não precisa se ater rigidamente aos detalhes de uma notação. O detalhe e o rigor de um modelo dependem de como você pretende usá-lo. Os modelos gráficos são comumente usados de três formas: 1. Como forma de facilitar a discussão sobre um sistema existente ou proposto. 2. Como forma de documentar um sistema já existente. 3. Como uma descrição detalhada de um sistema, que pode ser usada para gerar uma implementação do sistema. No primeiro caso, o objetivo do modelo é estimular a discussão entre os engenheiros de software envolvidos no desenvolvimento do sistema. Os modelos podem ser incompletos (contanto que cubram os pontos essenciais da dis- cussão) e podem usar a notação de modelagem informalmente. É assim que os modelos são normalmente usados na chamada ‘modelagem ágil’ (AMBLER e JEFFRIES, 2002). Quando os modelos são usados como documentação, não precisam ser completos, pois você pode querer desenvolver modelos apenas para algumas partes de um sistema. No entanto, esses modelos precisam ser corretos; eles devem usar a notação de forma correta e apresentar uma descrição precisa do sistema. No terceiro caso, em que os modelos são usados como parte de um processo de desenvolvimento dirigido a modelos, os modelos de sistema precisam ser completos e corretos. A razão para isso é que eles são usados como uma base para gerar o código-fonte do sistema. Portanto, você precisa ter muito cuidado para não confundir símbolos semelhantes, como setas de ponta e blocos, cujos significados são diferentes. Sommerville_Cap_05.indd 83 31/05/2011 15:07:28 84 Engenharia de software 5.1 Modelos de contexto Em um estágio inicial da especificação de um sistema, você deve decidir os limites do sistema. Isso envolve trabalhar com os stakeholders do sistema para decidir qual funcionalidade deve ser incluída no sistema e o que é fornecido pelo ambiente do sistema. Você pode decidir que o apoio automatizado para alguns processos de ne- gócio deve ser implementado, mas outros processos devem ser manuais ou apoiados por sistemas diferentes. Em termos de funcionalidade, você deve olhar para as possíveis sobreposições aos sistemas existentes e decidir onde a nova funcionalidade deve ser implementada. Essas decisões devem surgir no início do processo para limitar os custose o tempo necessário para compreender os requisitos e o projeto do sistema. Em alguns casos, a fronteira entre um sistema e seu ambiente é relativamente clara. Por exemplo, quando um sistema automatizado está substituindo um sistema já existente, manual ou informatizado, o ambiente do novo sistema é, geralmente, o mesmo do sistema existente. Em outros casos, existe mais flexibilidade, e, durante o pro- cesso de engenharia de requisitos, você decide o que constitui a fronteira entre o sistema e seu ambiente. Por exemplo, digamos que você esteja desenvolvendo a especificação para o sistema de informação de pa- cientes para a área da saúde mental. Esse sistema destina-se a gerenciar informações sobre os pacientes que procuram clínicas de saúde mental e os tratamentos prescritos. Ao desenvolver a especificação para esse sistema, é preciso decidir se ele deve se concentrar exclusivamente em coletar informações sobre as consultas (usando outros sistemas para coletar informações pessoais sobre os pacientes) ou se deve também coletar informações pessoais dos pacientes. A vantagem de se basear em outros sistemas de informação de pacientes é que você evita a duplicação de dados. A maior desvantagem, entretanto, é que o uso de outros sistemas pode torná-lo mais lento para o acesso a informações. Se esses sistemas não estão disponíveis, então o MHC-PMS não pode ser usado. A definição do limite do sistema não é livre de juízos de valor. Interesses sociais e organizacionais podem sig- nificar que a posição de limite do sistema pode ser determinada por fatores não técnicos. Por exemplo, um limite do sistema pode ser deliberadamente posicionado de modo que o processo de análise possa ocorrer em um site, pode ser escolhido de forma que um gerente particularmente difícil não precise ser consultado, pode ser posicio- nado de modo que o custo do sistema seja maior e a equipe de desenvolvimento do sistema necessite expandir-se para projetar e implementar o sistema. Depois de tomadas algumas decisões a respeito dos limites do sistema, parte da atividade de análise é a defi- nição desse contexto e das dependências que o sistema tem em seu ambiente. Normalmente, a produção de um modelo de arquitetura simples é o primeiro passo para essa atividade. A Figura 5.1 é um modelo de contexto simples que mostra o sistema de informação de pacientes e os outros sistemas em seu ambiente. A partir da Figura 5.1, você pode ver que o MHC-PMS é conectado a um sistema mais geral de agendamentos e a um sistema de registro de pacientes com o qual compartilha os dados. O sistema também está conectado a sistemas para gerenciamento de relatórios e de alocação de leitos hospitalares e a um Figura 5.1 O contexto do MHC-PMS «sistema» MHC-PMS «sistema» Sistema de registro de pacientes «sistema» Sistema de agendamentos «sistema» Sistema de admissões «sistema» Sistema de gerenciamento de relatórios «sistema» Sistema de prescrições «sistema» Sistema de estatísticas Sommerville_Cap_05.indd 84 31/05/2011 15:07:29 85Capítulo 5 Modelagem de sistemas sistema de estatísticas que coleta informações para a pesquisa. Por fim, faz uso de um sistema de prescrições para gerar receitas para a medicação dos pacientes. Geralmente, os modelos de contexto mostram que o ambiente inclui vários outros sistemas automatizados. No entanto, eles não mostram os tipos de relacionamentos entre os sistemas no ambiente e o sistema que está sendo especificado. Os sistemas externos podem produzir dados para o sistema ou consumir dados deste. Eles podem compartilhar dados com o sistema, podem ser conectados diretamente, por meio de uma rede, ou não ser conec- tados a coisa alguma. Podem estar fisicamente no mesmo local ou localizados em prédios separados. Todas essas relações podem afetar os requisitos e o projeto do sistema a ser definido e devem ser levadas em conta. Portanto, os modelos de contexto simples são usados com outros modelos, como modelos de processos de negócio. Estes descrevem os processos humanos e automatizados em que os sistemas de software específicos são usados. A Figura 5.2 é um modelo de um importante processo de sistema que mostra os processos em que o MHC-PMS é usado. Às vezes, os pacientes que sofrem de problemas de saúde mental podem ser um perigo para os outros e/ou para eles mesmos. Portanto, pode acontecer de serem internados contra a vontade, em um hospital, para re- ceberem tratamento. Essa internação é sujeita a severas salvaguardas jurídicas, por exemplo, a decisão de internar um paciente deve ser regularmente revista para que as pessoas não sejam internadas indefinidamente, sem uma boa razão. Uma das funções do MHC-PMS é garantir que essas salvaguardas sejam implementadas. A Figura 5.2 é um diagrama de atividades da UML. Os diagramas de atividades são destinados a mostrar as atividades que compõem um processo de sistema e o fluxo de controle de uma atividade para a outra. O início de um processo é indicado por um círculo preenchido; o fim, por um círculo preenchido dentro de outro círcu- lo. Os retângulos com cantos arredondados representam atividades, ou seja, os subprocessos específicos que devem ser realizados. Você pode incluir objetos em diagramas de atividades. Na Figura 5.2, mostrei os sistemas usados para apoiar processos diferentes. Indiquei que esses são sistemas separados usando o recurso de este- reótipo da UML. Em um diagrama de atividades da UML, as setas representam o fluxo de trabalho de uma atividade para outra. Uma barra sólida é usada para indicar coordenação de atividades. Quando o fluxo de mais de uma atividade leva a uma barra sólida, todas essas atividades devem ser concluídas antes de o progresso ser possível. Quando o fluxo de uma barra sólida leva a uma série de atividades, elas podem ser executadas em paralelo. Portanto, na Figura 5.2, as atividades de informar a assistência social e os parentes próximos do paciente podem ser concorrentes à atualização do registo de internação. As setas podem ser anotadas com guardas que indicam a condição de quando o fluxo é tomado. Na Figura 5.2, você pode ver os guardas que mostram os fluxos para pacientes perigosos e não perigosos para a sociedade. Os Figura 5.2 Modelo de processos de internação involuntária Con�rmar decisão de internação Encontrar local seguro Admitir no hospital Transferir para delegacia de polícia Transferir para hospital seguro «sistema» Sistema de admissões Informar parentes próximos Informar assistência social Atualizar registro «sistema» MHC-PMS «sistema» MHC-PMS Informar paciente dos direitos Registrar decisão de internação [Perigoso] [Não disponível] [Não perigoso] [Disponível] Sommerville_Cap_05.indd 85 31/05/2011 15:07:29 86 Engenharia de software pacientes perigosos para a sociedade devem ser internados em uma instalação segura. No entanto, os pacientes suicidas e, portanto, perigosos para eles mesmos, podem ser internados em uma enfermaria apropriada de um hospital. 5.2 Modelos de interação Todos os sistemas envolvem algum tipo de interação. Pode-se ter interação do usuário, que envolve entradas e saídas, interação entre o sistema que está em desenvolvimento e outros sistemas, ou interação entre os compo- nentes do sistema. A modelagem da interação do usuário é importante, pois ajuda a identificar os requisitos do usuário. O sistema de modelagem da interação do sistema destaca os problemas de comunicação que podem surgir. A modelagem da interação nos ajuda a compreender se a estrutura proposta para o sistema é suscetível de produzir o desempenho e a confiança requerida do sistema. Nesta seção, trato de duas abordagens relacionadas à mode- lagem da interação: 1. Modelagem de caso de uso, usada principalmente para modelar interações entre um sistema e atores externos (usuários ou outros sistemas). 2. Diagramas de sequência, usados para modelar interações entre os componentes do sistema, embora os agen- tes externostambém possam ser incluídos. Os modelos de caso de uso e diagramas de sequência apresentam interações em diferentes níveis de detalha- mento e, assim, podem ser usados juntos. Os detalhes das interações envolvidas em um caso de uso de alto nível podem ser documentados em um diagrama de sequência. A UML inclui diagramas de comunicação que podem ser usados para modelar as interações. Como eles são uma representação alternativa de diagramas de sequência, eu não os discuto neste momento. De fato, algumas ferramentas podem gerar um diagrama de comunicação a partir de um diagrama de sequência. 5.2.1 Modelagem de caso de uso A modelagem de caso de uso foi originalmente desenvolvida por Jacobson et al. (1993) na década de 1990, e foi incorporada ao primeiro release da UML (RUMBAUGH et al., 1999). Como discutido no Capítulo 4, a modelagem de caso de uso é amplamente usada para apoiar a elicitação de requisitos. Um caso de uso pode ser tomado como um cenário simples que descreve o que o usuário espera de um sistema. Cada caso de uso representa uma tarefa discreta que envolve a interação externa com um sistema. Em sua forma mais simples, um caso de uso é mostrado como uma elipse, com os atores envolvidos representados por figuras-palito. A Figura 5.3 mostra um caso de uso do MHC-PMS que representa a tarefa de carregar os dados do MHC-PMS para um sistema mais geral de registro de pacientes. Esse sistema mais geral mantém um resumo dos dados do paciente, em vez de manter os dados sobre cada consulta, que são registrados no MHC-PMS. Observe que existem dois atores nesse caso de uso: o operador que transfere os dados e o sistema de registro de pacientes. A notação da figura-palito foi originalmente desenvolvida para cobrir a interação humana, mas tam- bém é usada para representar outros sistemas externos e hardware. Formalmente, os diagramas de caso de uso devem usar linhas sem setas, pois na UML as setas indicam a direção do fluxo de mensagens. Certamente, em um caso de uso, as mensagens seguem nas duas direções. No entanto, as setas na Figura 5.3 são usadas informalmen- te para indicar que a(o) recepcionista do médico inicia a operação e os dados são transferidos para o sistema de registro de pacientes. Figura 5.3 Caso de uso de transferência de dados. Recepcionista do médico Sistema de registro de pacientes Transferir dados Sommerville_Cap_05.indd 86 31/05/2011 15:07:30 87Capítulo 5 Modelagem de sistemas Diagramas de casos de uso dão uma visão simples de uma interação. Logo, é necessário fornecer mais detalhes para entender o que está envolvido. Esses detalhes podem ser uma simples descrição textual, uma descrição estrutu- rada em uma tabela ou um diagrama de sequência, como discutido a seguir. Você deve escolher o formato mais ade- quado, dependendo do caso de uso, e o nível de detalhamento que você acredita ser necessário no modelo. Para mim, o formato-padrão de tabela é o mais útil. A Tabela 5.1 mostra uma descrição tabular do caso de uso ‘Transferir dados’. Como já discutido no Capítulo 4, diagramas compostos de casos de uso mostram situações diferentes. Às ve- zes, todas as possíveis interações de um sistema são incluídas em um único diagrama composto de casos de uso. No entanto, isso pode não ser possível, conforme o número de casos de uso. Nesses casos, você pode desenvolver vários diagramas, cada um mostrando casos de uso relacionados. Por exemplo, a Figura 5.4 mostra todos os casos de uso no MHC-PMS em que o ator ‘recepcionista do médico’ está envolvido. 5.2.2 Diagramas de sequência Os diagramas de sequência em UML são usados, principalmente, para modelar as interações entre os atores e os objetos em um sistema e as interações entre os próprios objetos. A UML tem uma sintaxe rica para diagramas de sequência, que permite a modelagem de vários tipos de interação. Como não tenho espaço para cobrir todas as possibilidades aqui, concentro-me nos fundamentos desse tipo de diagrama. Como o nome indica, um diagrama de sequência mostra a sequência de interações que ocorrem durante um caso de uso em particular ou em uma instância de caso de uso. A Figura 5.5 é um exemplo de diagrama de sequên- cia que ilustra os conceitos básicos da notação. Esse diagrama modela as interações envolvidas no caso de uso ‘Ver informações de pacientes’, em que a recepcionista do médico pode ver algumas informações sobre o paciente. Os objetos e atores envolvidos estão listados na parte superior do diagrama, com uma linha tracejada verti- calmente a partir deles. Interações entre objetos são indicadas por setas anotadas. O retângulo na linha tracejada indica a linha da vida do objeto em questão (ou seja, o tempo em que a instância do objeto está envolvida no processamento). Deve-se ler a sequência de interações de cima para baixo. As anotações sobre as setas indicam as chamadas para os objetos, seus parâmetros e os valores de retorno. Nesse exemplo, também mostro a notação para designar as alternativas. Uma caixa nomeada ‘alt’ é usada com as condições indicadas entre colchetes. Você pode ler a Figura 5.5 da seguinte maneira: 1. A recepcionista do médico aciona o método VerInfo em uma instância P da classe de objeto InfoPaciente, for- necendo o identificador do paciente (PID, do inglês patient’s identifier). P é um objeto de interface do usuário, exibido como um formulário que mostra os dados do paciente. 2. A instância P chama o banco de dados para retornar as informações necessárias, fornecendo o identificador da recepcionista, que permite a verificação de proteção (nessa fase, não importa de onde vem esse UID — do inglês, user´s identifier). 3. O banco de dados verifica, com um sistema de autorização, que o usuário está autorizado a essa ação. 4. Se autorizado, as informações de pacientes são retornadas, e um formulário é preenchido na tela do usuário. Se falhar a autorização, aparece uma mensagem de erro. Tabela 5.1 Descrição tabular do caso de uso ‘Transferir dados’ Atores Recepcionista do médico, sistema de registros de pacientes (PRS, do inglês patient records system) Descrição Uma recepcionista pode transferir dados do MHC-PMS para um banco de dados geral de registros de pacientes mantido por uma autoridade de saúde. As informações transferidas podem ser atualizadas com as informações pessoais (endereço, telefone etc.) ou com um resumo do diagnóstico e tratamento do paciente. Dados Informações pessoais do paciente, resumo do tratamento. Estímulos Comando de usuário emitido pela recepcionista do médico. Resposta Confirmação de que o PRS foi atualizado. Comentários A recepcionista deve ter permissões de proteção adequadas para acessar as informações do paciente e o PRS. Sommerville_Cap_05.indd 87 31/05/2011 15:07:30 88 Engenharia de software A Figura 5.6 é um segundo exemplo de diagrama de sequência do mesmo sistema, que ilustra duas caracte- rísticas adicionais. Estas são a comunicação direta entre os atores do sistema e a criação de objetos como parte de uma sequência de operações. Nesse exemplo, um objeto do tipo Sumário é criado para armazenar os dados de resumo que serão enviados para o PRS. Você pode ler esse diagrama da seguinte maneira: 1. A recepcionista inicia sessão (login) no PRS. 2. Existem duas opções disponíveis. Elas permitem a transferência direta de informações atualizadas de pacientes para o PRS e a transferência de dados do sumário de saúde do MHC-PMS para o PRS. 3. Em cada caso, as permissões da recepcionista são verificadas por meio do sistema de autorização. 4. As informações pessoais podem ser transferidas diretamente do objeto de interface de usuário para o PRS. Como alternativa, um registro do sumário pode ser criado a partir do banco de dados e, então, o registro é transferido. 5. Após concluir a transferência, o PRS emite uma mensagem de status e o usuário fecha a sessão (logoff ). Figura 5.5 Diagrama de sequência para ‘Ver informações de pacientes’ P: InfoPaciente VerInfo (PID) Relatório (Info, PID,UID) Autorizar (Info, UID) Informações de pacientes D: MHCPMS-DB AS: Autorização Autorização Erro (sem acesso) [Autorização OK] [Falha de autorização] Recepcionista do médico Alt Figura 5.4 Casos de uso envolvendo o papel da ‘recepcionista do médico’ Recepcionista do médico Registrar pacientes Transferir dados Contatar pacientes Ver informações de pacientes Não registrar pacientes Sommerville_Cap_05.indd 88 31/05/2011 15:07:31 89Capítulo 5 Modelagem de sistemas A menos que você esteja usando diagramas de sequência para geração de código ou documentação detalha- da, você não precisa incluir todas as interações nesses diagramas. Se você desenvolver modelos de sistemas no início do processo de desenvolvimento para dar apoio à engenharia de requisitos e projeto de alto nível, aconte- cerão muitas interações que dependem de decisões de implementação. Por exemplo, na Figura 5.6, a decisão de como obter o identificador de usuário para verificação de autorização pode ser adiada. Em uma implementação, isso pode envolver a interação com um objeto Usuário, mas, nesse momento, essa decisão não é importante e, por isso, não deve ser incluída no diagrama de sequência. 5.3 Modelos estruturais Os modelos estruturais de softwares exibem a organização de um sistema em termos de seus componentes e seus relacionamentos. Os modelos estruturais podem ser modelos estáticos, que mostram a estrutura do projeto do sistema, ou modelos dinâmicos, que mostram a organização do sistema quando ele está em execução. Essas são duas características distintas — a organização da dinâmica de um sistema, como um conjunto de threads (pequenos processos) que interagem entre si pode ser muito diferente de um modelo estático de componentes do sistema. Figura 5.6 Diagrama de sequência para ‘Transferir dados’ Autorização Autorizar (TF, UID) P: InfoPaciente Login ( ) D: MHCPMS-DB AS: Autorização [EnviarInfo] [EnviarSumário] Recepcionista do médico PRS OK AtualizarInfo( ) Atualizar PRS (UID) Atualizar (PID) Atualização OK Mensagem (OK) Resumir (UID) Autorização Autorizar (TF, UID) :Sumário Atualizar (PID) AtualizarSumário( ) Logout ( ) Atualização OK Mensagem (OK) Alt Sommerville_Cap_05.indd 89 31/05/2011 15:07:32 90 Engenharia de software É possível criar modelos estruturais de um sistema quando se está discutindo e projetando sua arquitetura. O projeto de arquitetura é um tema particularmente importante na engenharia de software, e componentes, paco- tes e diagramas de implantação da UML podem ser usados quando da apresentação dos modelos de arquitetura. Nos capítulos 6, 18 e 19, vários aspectos da arquitetura de software e modelagem de arquitetura serão discutidos. Nesta seção, focalizo o uso de diagramas de classe para modelar a estrutura estática das classes de objeto em um sistema de software. 5.3.1 Diagramas de classe Os diagramas de classe são usados no desenvolvimento de um modelo de sistema orientado a objetos para mostrar as classes de um sistema e as associações entre essas classes. Em poucas palavras, uma classe de objeto pode ser pensada como uma definição geral de um tipo de objeto do sistema. Uma associação é um link entre classes que indica algum relacionamento entre essas classes. Consequentemente, cada classe pode precisar de algum conhecimento sobre sua classe associada. Quando você está desenvolvendo modelos, durante os estágios iniciais do processo de engenharia de software, os objetos representam algo no mundo real, como um paciente, uma receita médica, um médico etc. Enquanto uma aplicação é desenvolvida, geralmente é necessário definir objetos adicionais de implementação que são usa- dos para fornecer a funcionalidade requerida do sistema. Aqui, vou me concentrar na modelagem de objetos do mundo real, como parte dos requisitos ou processos iniciais de projeto de software. Os diagramas de classe em UML podem ser expressos em diferentes níveis de detalhamento. Quando você está desenvolvendo um modelo, o primeiro estágio geralmente é o de olhar para o mundo, identificar os objetos essenciais e representá-los como classes. A maneira mais simples de fazer isso é escrever o nome da classe em uma caixa. Você também pode simplesmente observar a existência de uma associação, traçando uma linha entre as classes. Por exemplo, a Figura 5.7 é um diagrama de classes simples, mostrando duas classes — ‘Paciente’ e ‘Registro de paciente’ — com uma associação entre elas. Na Figura 5.7, vemos outra característica dos diagramas de classe: a capacidade de mostrar quantos objetos estão envolvidos na associação. Nesse exemplo, cada extremidade da associação é anotada com um 1, o que significa que existe um relacionamento 1:1 entre objetos dessas classes. Ou seja, cada paciente tem exatamente um registro, e cada registro mantém informações sobre um mesmo paciente. Como você poderá ver, mais tarde, em exemplos, outras multiplicidades são possíveis. Você pode definir o número exato de objetos envolvidos ou, usando um *, conforme a Figura 5.8, indicar que há um número indefinido de objetos envolvidos na associação. A Figura 5.8 desenvolve esse tipo de diagrama de classe para mostrar que os objetos da classe Paciente tam- bém estão envolvidos em relacionamentos com uma série de outras classes. Nesse exemplo, vou mostrar que é possível nomear as associações para dar ao leitor uma indicação do tipo de relacionamento que pode existir. A UML também permite a especificação do papel dos objetos participantes na associação. Nesse nível de detalhamento, os diagramas de classe são parecidos com modelos semânticos de dados. Mo- delos semânticos de dados são usados no projeto de banco de dados. Eles mostram as entidades dos dados, seus atributos associados e as relações entre essas entidades. Essa abordagem de modelagem foi proposta pela primei- ra vez em meados da década de 1970, por Chen (1976); desde então, diversas variantes têm sido desenvolvidas (CODD, 1979; HAMMER e McLEOD, 1981; HULL e KING, 1987), todas com a mesma forma básica. A UML não inclui uma notação específica para essa modelagem de banco de dados, pois supõe um processo de desenvolvimento orientado a objetos e modela dados usando objetos e seus relacionamentos. No entanto, pode-se usar a UML para representar um modelo semântico de dados. Sob um modelo semântico de dados, po- demos pensar em entidades como classes de objetos simplificados (não possuem operações), em atributos como atributos da classe de objetos e em relações como as associações nomeadas entre classes de objetos. Figura 5.7 Classes e associação em UML Paciente Registro de paciente 1 1 Sommerville_Cap_05.indd 90 31/05/2011 15:07:32 91Capítulo 5 Modelagem de sistemas Ao mostrar as associações entre classes, é conveniente representar essas classes da maneira mais simples pos- sível. Para defini-las com mais detalhes, você adiciona informações sobre seus atributos (características de um objeto) e operações (as coisas que você pode pedir a um objeto). Por exemplo, um objeto Paciente terá o atributo Endereço, e você pode incluir uma operação chamada MudarEndereço, que é chamada quando um paciente in- dica ter mudado de endereço. Na UML, você mostra os atributos e operações alargando o retângulo simples que representa uma classe. Isso é ilustrado na Figura 5.9, em que: 1. O nome da classe de objeto está na seção superior. 2. Os atributos de classe estão na seção do meio. O que deve incluir os nomes dos atributos e, opcionalmente, seus tipos. 3. As operações (chamadas métodos, em Java e em outras linguagens de programação OO) associadas à classe de objeto estão na seção inferior do retângulo. A Figura 5.9 mostra os possíveis atributos e operações da classe Consulta. Nesse exemplo, assumo que os médicos gravam anotações de voz para registrar os detalhes da consulta, transcritas posteriormente. Para prescrever a medicação, o médico envolvido deve usar o método Prescrever e gerar uma prescriçãoeletrônica. Figura 5.8 Classes e associações no MHC-PMS Paciente Clínicogeral Consulta Consultor Medicação Tratamento Médico de Hospital Condição Indicado por Indicado para Diagnosticado com Frequenta Prescreve PrescreveRealiza 1..* 1 1..* 11..* 1..* 1..* 1..* 1..4 1..* 1..* 1..* 1..* Figura 5.9 A classe de consultas Consulta Médicos Data Horário Clínica Motivo Medicação prescrita Tratamento prescrito Anotações de voz Transcrições ... Novo ( ) Prescrever ( ) RegistrarAnotações ( ) Transcrever ( ) ... Sommerville_Cap_05.indd 91 31/05/2011 15:07:33 92 Engenharia de software 5.3.2 Generalização A generalização é uma técnica que usamos todos os dias para gerenciar a complexidade. Ao invés de aprender as características detalhadas de cada entidade que nós experimentamos, colocamos essas entidades em classes mais gerais (animais, carros, casas etc.) e aprendemos suas características. Isso nos permite inferir que os diferentes membros dessas classes têm algumas características em comum (por exemplo, os esquilos e os ratos são roedo- res). Podemos fazer afirmações genéricas que se aplicam a todos os membros da classe (por exemplo, todos os roedores têm dentes para roer). Na modelagem de sistemas, muitas vezes é útil examinar as classes de um sistema para ver se há espaço para a generalização. Isso significa que as informações comuns serão mantidas em um único lugar. Essa é uma boa prática de projeto, pois quer dizer que, se mudanças são propostas, você não tem de olhar para todas as classes no sistema para ver se são afetadas pela mudança. Em linguagens orientadas a objeto como Java, a generalização é implementada usando os mecanismos de herança de classe construídos dentro da linguagem. A UML tem um tipo específico de associação para denotar a generalização, como mostra a Figura 5.10. A ge- neralização é representada como uma seta apontando para a classe mais geral. Isso mostra que ‘Clínicos gerais’ e ‘Médicos de hospital’ podem ser generalizados como ‘Médicos’, e que existem três tipos de ‘Médicos de hospital’ — aqueles que acabaram de se formar em medicina e precisam ser supervisionados (‘Médico residente’); aqueles que podem trabalhar sem supervisão, como parte de uma equipe médica (‘Médico qualificado’); e ‘Consultores’, que são os médicos mais experientes com a responsabilidade total pela decisão tomada. Em uma generalização, os atributos e operações associados com as classes de nível alto também estão asso- ciados com as de nível baixo. Em essência, as classes de nível baixo são subclasses que herdam os atributos e as operações de suas superclasses. Essas classes de nível mais baixo, em seguida, adicionam mais atributos e opera- ções específicas. Por exemplo, todos os médicos têm um nome e um número de telefone, todos os médicos de hospital têm um número de equipe e um departamento; mas não os clínicos gerais — esses trabalham de forma independente, e por isso não têm esses atributos. No entanto, eles têm um nome e endereço para prática. Essa situação é ilustrada na Figura 5.11, que mostra parte da hierarquia de generalização que eu estendi com atributos da classe. As operações associadas com a classe Médico destinam-se a registrar e remover o registro desse médico com o MHC-PMS. 5.3.3 Agregação No mundo real, objetos são frequentemente compostos de diferentes partes. Por exemplo, um pacote de estudo para um curso pode ser composto de um livro, slides do PowerPoint, quizzes e recomendações para leitura posterior. Às vezes, em um modelo de sistema, você precisa ilustrar isso. A UML fornece um tipo especial de asso- ciação entre as classes chamada agregação, que significa que um objeto (o todo) é composto de outros objetos (as Figura 5.10 Uma hierarquia de generalização Médico Clínico geral Médico de hospital Consultor Equipe médica Médico residente Médico quali�cado Sommerville_Cap_05.indd 92 31/05/2011 15:07:34 93Capítulo 5 Modelagem de sistemas partes). Para mostrar isso, usamos uma forma de losango ao lado da classe que representa o todo. Isso é mostrado na Figura 5.12, que mostra que um registro de um paciente é uma composição de um Paciente e uma ou mais Consultas. 5.4 Modelos comportamentais Modelos comportamentais são modelos do comportamento dinâmico do sistema quando está em execução. Eles mostram o que acontece ou deve acontecer quando o sistema responde a um estímulo de seu ambiente. Você pode pensar nesse estímulo como sendo de dois tipos: 1. Dados — alguns dados que chegam precisam ser processados pelo sistema. 2. Eventos — alguns eventos que acontecem disparam o processamento do sistema. Eles podem ter dados asso- ciados, mas nem sempre esse é o caso. Muitos sistemas de negócios são sistemas de processamento de dados essencialmente dirigidos por dados. Eles são controlados pela entrada de dados no sistema com processamento relativamente baixo de eventos ex- ternos. Seu processamento envolve uma sequência de ações nos dados e a geração de uma saída. Por exemplo, um sistema de cobrança de telefonia aceitará as informações sobre as chamadas feitas por um cliente, calculará os custos dessas chamadas e gerará uma conta para ser enviada ao cliente. Em contrapartida, sistemas de tempo real são muitas vezes dirigidos por eventos com mínimo processamento de dados. Por exemplo, um sistema de comutação de telefonia fixa responde a eventos como ‘receptor fora do gancho’ gerando um tom de discagem, ou o pressionamento de teclas de um telefone capturando o número do telefone etc. Figura 5.11 Uma hierarquia de generalização com detalhes adicionais Médico Nome Telefone E-mail Registrar ( ) Remover Registro ( ) Médico do hospital Número da equipe Número do pager Clínico geral Experiência Endereço Figura 5.12 A associação por agregação Registro de paciente Paciente Consulta 11 1 1..* Sommerville_Cap_05.indd 93 31/05/2011 15:07:35 94 Engenharia de software 5.4.1 Modelagem orientada a dados Modelos dirigidos a dados mostram a sequência de ações envolvidas no processamento de dados de entrada e a geração de uma saída associada. Eles são particularmente úteis durante a análise de requisitos, pois podem ser usa- dos para mostrar, do início ao fim, o processamento de um sistema. Ou seja, eles mostram toda a sequência de ações, desde uma entrada sendo processada até a saída correspondente, que é a resposta do sistema. Modelos dirigidos a dados estavam entre os primeiros modelos gráficos de software. Na década de 1970, os métodos estruturados, como Análise Estruturada de DeMarco (DeMARCO, 1978), apresentaram os diagramas de fluxo de dados (DFDs, do inglês data-flow diagrams) como forma de ilustrar as etapas de processamento em um sistema. Modelos de fluxo de dados são úteis porque analisar e documentar como os dados associados a um de- terminado processo se movem pelo sistema ajuda os analistas e projetistas a entenderem o que está acontecendo. Diagramas de fluxo de dados são simples e intuitivos, e normalmente é possível explicá-los aos potenciais usuários do sistema, que, então, podem participar na validação do modelo. A UML não oferece apoio a diagramas de fluxo de dados, pois estes foram inicialmente propostos e usados para modelagem de processamento de dados. A razão para isso é que os DFDs se centram sobre as funções do sistema e não reconhecem os objetos do sistema. No entanto, devido aos sistemas dirigidos a dados serem tão comuns no mundo dos negócios, a UML 2.0 introduziu diagramas de atividades, semelhantes a diagramas de fluxo de dados. Por exemplo, a Figura 5.13 mostra a cadeia de processamento envolvida no software da bomba de insulina. Nesse diagrama, você pode ver as etapas de processamento (representadas como atividades) e os dados fluindo entre essas etapas (representadas como objetos). Uma forma alternativa de mostrar a sequência de processamento em um sistema é o uso de diagramas de sequência da UML. Já vimos como esses diagramas podem serusados para modelar interações, mas, se você dese- nhar de modo que as mensagens sejam enviadas apenas da esquerda para a direita, então verá que elas mostram o processamento de dados sequencial no sistema. A Figura 5.14 ilustra isso, usando um modelo de sequência de processamento de um pedido e enviando-o para um fornecedor. Modelos de sequência destacam os objetos em um sistema, enquanto os diagramas de fluxo de dados destacam as funções. O diagrama de fluxo de dados equi- valente para o processamento do pedido é apresentado nas páginas do livro na Internet. 5.4.2 Modelagem dirigida a eventos Modelagem dirigida a eventos mostra como o sistema reage a eventos externos e internos. Ela é baseada na suposição de que um sistema tem um número finito de estados e que os eventos (estímulos) podem causar uma transição de um estado para outro. Por exemplo, um sistema de controle de uma válvula pode mover-se de um estado ‘Válvula aberta’ para um estado ‘Válvula fechada’, quando um comando do operador (o estímulo) é recebido. Essa percepção de um sistema é particularmente adequada para sistemas de tempo real. A modelagem baseada em eventos foi introduzida em métodos de projeto de tempo real, como as propostas por Ward e Mellor (1985) e Harel (1987, 1988). Figura 5.13 Modelo de atividades de funcionamento da bomba de insulina :Pedido Preencher ( ) Escritório de compras Validar ( ) [Validação OK] <<repositório>> PedidosOrçamento Atualizar (Total) Salvar ( ) Fornecedor Enviar ( ) Sommerville_Cap_05.indd 94 31/05/2011 15:07:35 95Capítulo 5 Modelagem de sistemas A UML apoia a modelagem baseada em eventos com diagramas de estado, baseados em Statecharts (HAREL, 1987, 1988). Os diagramas de estado mostram os estados do sistema e os eventos que causam transições de um estado para outro. Eles não mostram o fluxo de dados dentro do sistema, mas podem incluir informações adicio- nais sobre os processamentos realizados em cada estado. Para ilustrar a modelgem dirigida a eventos, uso um exemplo de software de controle para um forno de micro- -ondas muito simples. Fornos de micro-ondas reais são muito mais complexos que esse sistema, mas o sistema sim- plificado é mais fácil de entender. Esse micro-ondas simples tem um interruptor para selecionar potência total ou meia, um teclado numérico para inserir o tempo de cozimento, um botão iniciar/cancelar e um display alfanumérico. Vamos assumir que a sequência de ações no uso do micro-ondas seja: 1. Selecionar o nível de potência (ou meia potência ou potência total). 2. Introduzir o tempo de cozimento usando um teclado numérico. 3. Pressionar ‘Iniciar’, e os alimentos são cozidos para o tempo selecionado. Por razões de segurança, o forno não deve operar quando a porta está aberta e, no fim do cozimento, uma campainha é acionada. O forno tem um display alfanumérico muito simples, que é usado para mostrar vários aler- tas e mensagens de advertência. Em diagramas de estado da UML, retângulos arredondados representam os estados do sistema. Eles podem incluir uma breve descrição (após ‘Faça’) das ações tomadas nesse estado. As setas rotuladas representam estímu- los que forçam uma transição de um estado para outro. Você pode indicar os estados inicial e final usando círculos preenchidos, como em um diagrama de atividades. A partir da Figura 5.15, você pode ver que o sistema começa em um estado de espera e responde inicialmente ao botão de potência total ou ao de meia potência. Após selecionar um dos botões, os usuários podem mudar de ideia e pressionar o outro botão. O tempo é definido, e, se a porta estiver fechada, o botão ‘Iniciar’ é habilitado. Pressionando-se esse botão, começa a operação do forno, e o cozimento ocorrerá para o tempo especificado. Esse é o fim do ciclo de cozimento, e o sistema retorna ao estado de espera. A notação UML permite-lhe indicar a atividade que ocorre em um estado. Em uma especificação detalhada do sistema, você precisa fornecer mais detalhes tanto sobre os estímulos como sobre os estados do sistema. Vê-se isso na Tabela 5.2, que mostra uma descrição tabular de cada estado, e como são gerados os estímulos que forçam as transições de estado. O problema com a modelagem baseada em estados é que o número de possíveis estados aumenta rapida- mente. Para modelos de sistemas de grande porte, portanto, você precisa esconder detalhes nos modelos. Uma maneira de fazer isso é usando a noção de um superestado que encapsula um número de estados distintos. Esse superestado, em um modelo de alto nível, parece um único estado, mas depois, em um diagrama separado, é ampliado para mostrar mais detalhes. Para ilustrar esse conceito, considere o estado ‘Operação’ na Figura 5.15. Esse é um superestado que pode ser expandido, conforme ilustrado na Figura 5.16. O estado ‘Operação’ inclui uma série de subestados, o que mostra que a operação inicia com uma verificação de status e, se qualquer problema é descoberto, um alarme é indicado, e a operação, desabilitada. O cozimento en- volve a execução do gerador de micro-ondas para o tempo especificado; na conclusão, uma campainha é emitida. Se a porta for aberta durante a operação, o sistema se move para o estado desabilitado, como mostra a Figura 5.15. Figura 5.14 Processamento de pedidos Sensor de açúcar no sangue Nível de açúcar no sangue Requisitos de insulina Comandos de controle de bomba Bomba de insulina Obter valor de sensor Calcular comandos de bomba Dados de sensor Calcular nível de açúcar Calcular a entrega de insulina Controlar bomba Sommerville_Cap_05.indd 95 31/05/2011 15:07:36 96 Engenharia de software 5.5 Engenharia dirigida a modelos A engenharia dirigida a modelos (MDE, do inglês model-based engineering) é uma abordagem do desenvol- vimento de software segundo a qual os modelos, em vez de programas, são as saídas principais do processo de desenvolvimento (KENT, 2002; SCHMIDT, 2006). Os programas executados em um hardware/software são, então, gerados automaticamente a partir dos modelos. Os defensores da MDE argumentam que esta aumenta o nível de abstração na engenharia de software, e, dessa forma, os engenheiros não precisam mais se preocupar com deta- lhes da linguagem de programação ou com as especificidades das plataformas de execução. A engenharia dirigida a modelos tem suas raízes na arquitetura dirigida a modelos (MDA, do inglês model-driven architecture), proposta pelo Object Management Group (OMG), em 2001, como um novo paradigma de desenvol- vimento de software. A engenharia e a arquitetura dirigidas a modelos são, frequentemente, vistas como a mesma coisa. No entanto, penso que a MDE tem um alcance maior que a MDA. Como discuto mais adiante nesta seção, a MDA concentra-se nos estágios de projeto e implementação do processo de desenvolvimento de software, ao passo que a MDE se preocupa com todos os aspectos do processo de engenharia de software. Assim, temas como a engenharia de requisitos baseada em modelos, processos de software para o desenvolvimento baseado em mo- delos e testes baseados em modelos fazem parte, atualmente, da MDE, mas não da MDA. Embora a MDA esteja em uso desde 2001, a engenharia baseada em modelo está ainda em um estágio inicial de desenvolvimento e não está claro se ela terá ou não um efeito significativo sobre as práticas da engenharia de software. Os principais argumentos a favor e contra a MDE são: 1. A favor da MDE. A engenharia dirigida a modelos permite que os engenheiros pensem em sistemas em alto nível de abstração, sem preocupação com detalhes de implementação. Isso reduz a probabilidade de erros, acelera o processo de projeto e implementação e permite a criação de modelos de aplicação reusáveis, independentes de plataforma. Por meio de ferramentas poderosas, as implementações do sistema podem ser geradas para diferentes plataformas a partir do mesmo modelo. Portanto, para adaptar o sistema a uma nova tecnologia de plataforma, é necessário apenasescrever um tradutor para essa plataforma. Quando este estiver disponível, todos os modelos independentes de plataforma podem ser rapidamente reimplantados na nova plataforma. Figura 5.15 Diagrama de estados de um forno de micro-ondas Habilitado Potência total Meia potência Meia potência Potência total Número Porta aberta Porta fechada Porta fechada Porta aberta Iniciar Meia potência Faça: De�nir potência = 300 Tempo de�nido Faça: Obter número Saída: De�nir tempo Desabilitado Cancelar Aguardando Faça: Exibir tempo Aguardando Faça: Exibir tempo Potência total Faça: De�nir potência = 600 Operação Faça: Operar forno Faça: Exibir ‘Pronto’ Faça: Exibir ‘Não está pronto’ Relógio Relógio Sommerville_Cap_05.indd 96 31/05/2011 15:07:37 97Capítulo 5 Modelagem de sistemas 2. Contra a MDE. Como dito anteriormente, os modelos são uma boa maneira de facilitar as discussões sobre um projeto de software. No entanto, as abstrações apoiadas pelo modelo nem sempre são corretas para a imple- mentação. Assim, você pode criar modelos informais de projeto, mas depois, ao implementar o sistema, usar um pacote configurável de prateleira. Além disso, os argumentos para a independência da plataforma são váli- dos apenas para sistemas de grande porte e duradouros, em que as plataformas se tornam obsoletas ao longo do tempo de vida do sistema. De qualquer forma, para essa classe de sistemas, sabemos que a implementação não é o grande problema; engenharia de requisitos, proteção e confiança, integração com sistemas legados e testes são mais significativos. Tabela 5.2 Estados e estímulos para o forno de micro-ondas Estado Descrição Aguardando O forno está aguardando uma entrada. O display mostra a hora atual. Meia potência A potência do forno é definida para 300 watts. O display mostra ‘Meia potência’. Potência total A potência do forno é definida para 600 watts. O display mostra ‘Potência total’. Tempo definido O tempo de cozimento é definido como valor de entrada do usuário. O display mostra o tempo de cozimento selecionado e é atualizado conforme o tempo definido. Desabilitado A operação do forno está desabilitada por questões de segurança. A iluminação interna do forno está acesa. O display mostra ‘Não está pronto’. Habilitado A operação do forno está habilitada. A iluminação interna do forno está desligada. O display mostra ‘Pronto’. Operação Forno em operação. A iluminação interna está acesa. O display mostra a contagem regressiva do relógio. No fim do cozimento, a campainha soa por cinco segundos. A luz do forno está acesa. O display mostra ‘Cozimento completo’, enquanto a campainha está soando. Estímulos Descrição Meia potência O usuário pressionou o botão de meia potência. Potência total O usuário pressionou o botão de potência total. Relógio O usuário pressionou um dos botões do relógio. Número O usuário pressionou uma tecla numérica. Porta aberta O interruptor da porta do forno não está fechado. Porta fechada O interruptor da porta do forno está fechado. Iniciar O usuário pressionou o botão Iniciar. Cancelar O usuário pressionou o botão Cancelar. Sommerville_Cap_05.indd 97 31/05/2011 15:07:37 98 Engenharia de software Existem significativas histórias de sucesso da MDE relatadas pelo OMG em suas páginas na Internet <www. omg.org/mda/products_success.htm>, e a abordagem é usada em grandes empresas, como a IBM e a Siemens. As técnicas têm sido utilizadas com sucesso no desenvolvimento de grandes sistemas de software com ciclos duradouros, como sistemas de gerenciamento do tráfego aéreo. No entanto, no momento em que este livro foi escrito, as abordagens dirigidas a modelos não estavam sendo amplamente usadas pela engenharia de software. Como os métodos formais de engenharia de software, que discuto no Capítulo 12, eu acredito que a MDE seja uma evolução importante. No entanto, como é o caso com os métodos formais, não está claro se os custos e riscos das abordagens dirigidas a modelos ultrapassam os possíveis benefícios. 5.5.1 Arquitetura dirigida a modelos Arquitetura dirigida a modelos (KLEPPE et al., 2003; MELLOR et al., 2004;. STAHL e VOELTER, 2006) é uma abor- dagem para projeto e implementação de software centrada em modelos, que usa um subconjunto de modelos da UML para descrever um sistema. Nesta abordagem, são criados modelos em diferentes níveis de abstração. De um modelo independente de plataforma em nível alto é possível, em princípio, gerar um programa de trabalho sem intervenção manual. O método MDA recomenda a produção de três tipos de modelos abstratos de sistema: 1. Um modelo de computação independente (CIM, do inglês computation independent model), que modela as importantes abstrações do domínio usado no sistema. Às vezes, os CIMs são chamados “modelos de domínio”. Você pode desenvolver vários CIMs diferentes, refletindo diferentes visões do sistema. Por exemplo, pode-se ter um CIM de proteção, em que se identificam importantes abstrações de proteção, tais como CIM de um ativo, um papel e um registro de paciente, no qual se descrevem abstrações tais como pacientes, consultas etc. 2. Um modelo independente de plataforma (PIM, do inglês platform independent model), que modela a operação do sistema sem referência a sua implementação. O PIM geralmente é descrito por meio de modelos da UML que mostram a estrutura estática do sistema e como ele responde a eventos externos e internos. 3. Modelos específicos de plataforma (PSM, do inglês platform specific models) são as transformações do modelo independente de plataforma com um PSM separado para cada plataforma de aplicação. Em princípio, pode haver camadas de PSM, com cada uma acrescentando alguns detalhes específicos. Assim, o PSM de primeiro nível pode ser um middleware específico, mas independente do banco de dados. Quando um banco de dados específico for escolhido, um PMS específico de dados pode ser gerado. Figura 5.16 Operação do forno de micro-ondas Defeito da plataforma giratória Defeito do emissor Fim de tempo Cozimento Faça: Executar gerador Feito Faça: Soar campainha por cinco segundos Aguardando Alarme Faça: Exibir eventos Faça: Veri�car status Veri�cando Desabilitado OK Tempo Porta aberta Operação Cancelar Sommerville_Cap_05.indd 98 31/05/2011 15:07:39 99Capítulo 5 Modelagem de sistemas Como eu já disse, as transformações entre esses modelos podem ser definidas e aplicadas automaticamente por ferramentas de software. Essa situação é ilustrada na Figura 5.17, que também mostra um nível final de trans- formação automática. Uma transformação é aplicada ao PMS para gerar o código executável que roda na platafor- ma de software designada. No momento em que este livro foi escrito, a tradução automática CIM para PIM ainda estava em estágio de protótipo de pesquisa. É pouco provável que, em um futuro próximo, ferramentas de tradução completamente au- tomáticas estejam disponíveis. Em um futuro previsível, a intervenção humana, indicada por uma figura palito na Figura 5.15, ainda será necessária. Os CIMs estão relacionados, e parte do processo de tradução pode envolver ligar conceitos em diferentes CIMs. Por exemplo, o conceito de um papel em um CIM de proteção pode ser mapeado para o conceito de uma equipe em um CIM de hospital. Mellor e Balcer (2002) dão o nome de ‘pontes’ à informação que apoia o mapeamento de um CIM para outro. A tradução de PIMs em PSMs está mais madura, e existem várias ferramentas comerciais disponíveis que forne- cem tradutores de PIMs para plataformas comuns como Java e J2EE. Elas contam com uma extensa biblioteca de regras e padrões específicos de plataforma para conversão de PIM para PSM. Pode haver vários PSMs para cada PIM no sistema. Se um sistema de software é planejado para ser executado em diferentes plataformas (por exemplo, J2EE e .NET), é necessário apenas manter o PIM. Os PSMs para cada plataforma são gerados automaticamente. Essa situação é ilustradana Figura 5.18. Embora as ferramentas de apoio MDA incluam tradutores específicos de plataforma, são frequentes os casos em que só oferecem apoio parcial para a tradução de PIMs em PSMs. Na maioria dos casos, o ambiente de execu- ção de um sistema é mais do que a plataforma de execução padrão (por exemplo, J2EE, .NET etc.). Também inclui outros sistemas aplicativos, bibliotecas de aplicativos específicas de uma empresa e bibliotecas de interface de usuário. Uma vez que estes variam significativamente de uma empresa para outra, não está disponível um apoio de ferramentas padrão. Portanto, quando a MDA é introduzida, pode ser necessário criar tradutores para fins es- peciais, para que sejam consideradas as características do ambiente local. Em alguns casos (por exemplo, para a geração da interface de usuário), pode ser impossível a tradução PIM para PSM totalmente automatizada. Existe uma relação desconfortável entre os métodos ágeis e a MDA. A noção de modelagem inicial extensiva contradiz as ideias fundamentais do manifesto ágil, e suspeito que poucos desenvolvedores ágeis se sintam con- fortáveis com a MDE. Os desenvolvedores da MDA afirmam que ela é destinada a apoiar uma abordagem iterativa para o desenvolvimento, e por isso pode ser usada dentro de métodos ágeis (MELLOR et al., 2004). Se as trans- formações podem ser totalmente automatizadas e um programa completo pode ser gerado a partir de um PIM, então, em princípio, a MDA pode ser usada em um processo ágil de desenvolvimento, pois nenhuma codificação separada seria necessária. No entanto, pelo que sei, não existem ferramentas de MDA que deem apoio às práticas como testes de regressão e desenvolvimento dirigido a testes. 5.5.2 UML executável A ideia fundamental por trás da MDE é que a transformação completamente automatizada de modelos para códigos deve ser possível. Para conseguir isso, é preciso ser capaz de construir modelos gráficos com a semântica bem-definida. Você também precisa encontrar uma maneira de agregar informações aos modelos gráficos sobre Figura 5.17 Transformações de MDA Modelo especí�co de plataforma Modelo independente de plataforma Código executável Tradutor Tradutor Tradutor Diretrizes especí�cas de domínio Padrões e regras especí�cas de plataforma Padrões especí�cos de linguagem Modelo independente de computação Sommerville_Cap_05.indd 99 31/05/2011 15:07:40 100 Engenharia de software as maneiras como as operações definidas no modelo são implementadas. Isso é possível usando-se um subcon- junto da UML 2, chamada UML executável ou xUML (MELLOR e BALCER, 2002). Eu não tenho espaço para descrever os detalhes da xUML, assim, apresento um breve resumo de suas principais características. A UML foi concebida como uma linguagem de apoio e documentação de projetos de software, e não como uma linguagem de programação. Os projetistas da UML não estavam preocupados com os detalhes semânticos da linguagem, mas com sua expressividade. Eles introduziram noções úteis, como diagramas de caso de uso, que aju- dam com o projeto, mas são demasiadamente informais para apoiar a execução. Para criar um subconjunto execu- tável da UML, o número de tipos de modelo, portanto, foi drasticamente reduzido para três tipos de modelos-chave: 1. Modelos de domínio, que identificam os principais interesses no sistema. Estes são definidos por meio de dia- gramas de classe da UML que incluem objetos, atributos e associações. 2. Modelos de classe, em que as classes são definidas, junto com seus atributos e operações. 3. Modelos de estado, em que um diagrama de estado está associado a cada classe e é usado para descrever o ciclo de vida da classe. O comportamento dinâmico do sistema pode ser especificado declarativamente usando-se a linguagem de restrição de objetos (OCL, do inglês object constraint language), ou pode ser expresso em linguagem de ação da UML. A linguagem de ação é como uma linguagem de programação de nível muito alto, na qual você pode se referir a objetos e seus atributos e especificar ações a serem realizadas. PONTOS IMPORTANTES • Um modelo é uma visão abstrata de um sistema que ignora alguns detalhes do sistema. Modelos de sistema complementares podem ser desenvolvidos para mostrar o contexto, as interações, a estrutura e o comporta- mento do sistema. • Modelos de contexto mostram como um sistema que está sendo modelado é posicionado em um ambiente com outros sistemas e processos. Eles ajudam a definir os limites do sistema a ser desenvolvido. • Diagramas de caso de uso e diagramas de sequência são usados para descrever as interações entre o usuário do sistema que será projetado e usuários ou outros sistemas. Os casos de uso descrevem as interações entre um sistema e atores externos. Diagramas de sequência acrescentam mais informações a eles, mostrando as interações entre os objetos do sistema. • Os modelos estruturais mostram a organização e a arquitetura de um sistema. Os diagramas de classe são usa- dos para definir a estrutura estática de classes em um sistema e suas associações. • Os modelos comportamentais são usados para descrever o comportamento dinâmico de um sistema em execução. Podem ser modelados a partir da perspectiva dos dados processados pelo sistema ou pelos eventos que estimulam respostas de um sistema. • Os diagramas de atividades podem ser usados para modelar o processamento de dados, em que cada ativida- de representa uma etapa do processo. Figura 5.18 Vários modelos específicos de plataforma Modelo independente de plataforma Programa Java Gerador de código C# Gerador de código Java Tradutor J2EE Tradutor .NET Programa C# Modelo especí�co J2EE Modelo especí�co .NET Sommerville_Cap_05.indd 100 31/05/2011 15:07:41 101Capítulo 5 Modelagem de sistemas • Os diagramas de estado são usados para modelar o comportamento de um sistema em resposta a eventos internos ou externos. • A engenharia dirigida a modelos é uma abordagem de desenvolvimento de software em que um sistema é representado como um conjunto de modelos que pode ser automaticamente transformado em código executável. LEITURA COMPLEMENTAR Requirements Analysis and System Design. Esse livro concentra-se na análise de sistemas de informação e discute como diferentes modelos da UML podem ser usados no processo de análise. (MACIASZEK, L. Requirements Analysis and System Design. Addison-Wesley, 2001.) MDA Distilled: Principles of Model-driven Architecture. Essa é uma introdução concisa e acessível para o método MDA. Foi escrita por entusiastas, de modo que o livro diz muito pouco sobre possíveis problemas com essa aborda- gem. (MELLOR, S. J.; SCOTT, K.; WEISE, D. MDA Distilled: Principles of Model-driven Architecture. Addison-Wesley, 2004.) Using UML: Software Engineering with Objects and Components, 2nd ed. Uma introdução curta e legível para o uso da UML na especificação e projeto de sistemas. Esse livro é excelente para aprender e entender a UML, embora não seja uma descrição completa da notação. (STEVENS, P.; POOLEY, R. Using UML: Software Engineering with Objects and Components. 2. ed. Addison-Wesley, 2006.) EXERCÍCIOS 5.1 Explique por que é importante modelar o contexto de um sistema que está sendo desenvolvido. Dê dois exemplos de possíveis erros que podem ocorrer, caso os engenheiros de software não entendam o contex- to do sistema. 5.2 Como você poderia usar um modelo de um sistema que já existe? Explique por que nem sempre é neces- sário que um modelo de sistema seja completo e correto. O mesmo seria verdadeiro caso você estivesse desenvolvendo um modelo de um novo sistema? 5.3 Você foi convidado para desenvolver um sistema que vai ajudar no planejamento de grandes eventos e festas, como casamentos, festas de formatura, festas de aniversário etc. Usando um diagrama de atividades, modele o contexto do processo para um sistema que mostre as atividades envolvidas no planejamento de uma festa (reserva de um local, organizaçãodos convites etc.) e os elementos do sistema que podem ser usados em cada etapa. 5.4 Para o MHC-PMS, proponha um conjunto de casos de uso que ilustre as interações entre um médico que atende pacientes e prescreve medicamentos e tratamentos e o MHC-PMS. 5.5 Desenvolva um diagrama de sequência que mostre as interações envolvidas quando um estudante se registra para um curso em uma universidade. Os cursos podem ter a inscrição limitada, então o processo de registro deve incluir verificações de vagas disponíveis. Suponha que o estudante acesse um catálogo de cursos eletrônicos para saber mais sobre os cursos disponíveis. 5.6 Olhe atentamente como as mensagens e caixas de correio são representadas no sistema de e-mail que você usa. Modele as classes de objetos que poderiam ser usadas na implementação do sistema para representar uma caixa postal e uma mensagem de correio eletrônico. 5.7 Baseado em sua experiência com um caixa eletrônico, desenhe um diagrama de atividades que modele o processamento de dados envolvido quando um cliente retira dinheiro da máquina. 5.8 Desenhe um diagrama de sequência para o mesmo sistema. Explique por que você pode querer desenvol- ver ambos, diagramas de atividades e de sequência, ao modelar o comportamento de um sistema. 5.9 Desenhe diagramas de estado do software de controle para: • Uma máquina de lavar automática, com programas diferentes para diferentes tipos de roupas. • O software para um DVD player. • Um sistema de atendimento telefônico que grava as mensagens recebidas e exibe o número de men- sagens aceitas em um LED (Light Emitting Diode). O sistema deve permitir ao cliente do telefone discar a Sommerville_Cap_05.indd 101 31/05/2011 15:07:41 102 Engenharia de software partir de qualquer localização, digitar uma sequência de números (identificados como tons) e ouvir todas as mensagens gravadas. 5.10 Você é um gerente de engenharia de software e sua equipe propõe que a engenharia dirigida a modelos deve ser usada para desenvolver um novo sistema. Que fatores você deve levar em conta ao decidir se deve ou não introduzir essa nova abordagem ao desenvolvimento de software? REFERÊNCIAS AMBLER, S. W.; JEFFRIES, R. Agile Modeling: Effective Practices for Extreme Programming and the Unified Process. Nova York: John Wiley & Sons, 2002. BOOCH, G.; RUMBAUGH, J.; JACOBSON, I. The Unified Modeling Language User Guide. 2. ed. Boston: Addison-Wesley, 2005. CHEN, P. The entity relationship model — Towards a unified view of data. ACM Trans. on Database Systems, v. 1, n. 1, 1976, p. 9-36. CODD, E. F. Extending the database relational model to capture more meaning. ACM Trans. on Database Systems, v. 4, n. 4, 1979, p. 397-434. DeMARCO, T. Structured Analysis and System Specification. Nova York: Yourdon Press, 1978. ERICKSON, J.; SIAU, K. Theoretical and practical complexity of modeling methods. Comm. ACM, v. 50, n. 8, 2007, p. 46-51. HAMMER, M.; McLEOD, D. Database descriptions with SDM: A semantic database model. ACM Trans. on Database Sys., v. 6, n. 3, 1981, p. 351-386. HAREL, D. Statecharts: A visual formalism for complex systems. Sci. Comput. Programming, v. 8, n. 3, 1987, p. 231-274. ______. On visual formalisms. Comm. ACM, v. 31, n. 5, 1988, p. 514-530. HULL, R.; KING, R. Semantic database modeling: Survey, applications and research issues. ACM Computing Surveys, v. 19, n. 3, 1987, p. 201-260. JACOBSON, I.; CHRISTERSON, M.; JONSSON, P.; OVERGAARD, G. Object-Oriented Software Engineering. Wokingham: Addison-Wesley, 1993. KENT, S. Model-driven engineering. Proc. 3rd Int. Conf. on Integrated Formal Methods, 2002, p. 286-298. KLEPPE, A.; WARMER, J.; BAST, W. MDA Explained: The Model Driven Architecture — Practice and Promise. Boston: Addison-Wesley, 2003. KRUCHTEN, P. The 4 + 1 view model of architecture. IEEE Software, v. 11, n. 6, 1995, p. 42-50. MELLOR, S. J.; BALCER, M. J. Executable UML. Boston: Addison-Wesley, 2002. MELLOR, S. J.; SCOTT, K.; WEISE, D. MDA Distilled: Principles of Model-driven Architecture. Boston: Addison-Wesley, 2004. RUMBAUGH, J.; JACOBSON, I.; BOOCH, G. The Unified Modeling Language Reference Manual. Reading, Mass.: Addison- -Wesley, 1999. ______. The Unified Modeling Language Reference Manual. 2. ed. Boston: Addison-Wesley, 2004. SCHMIDT, D. C. Model-Driven Engineering. IEEE Computer, v. 39, n. 2, 2006, p. 25-31. STAHL, T.; VOELTER, M. Model-Driven Software Development: Technology, Engineering, Management. Nova York: John Wiley & Sons, 2006. WARD, P.; MELLOR, S. Structured Development for Real-time Systems. Englewood Cliffs, NJ: Prentice Hall, 1985. Sommerville_Cap_05.indd 102 31/05/2011 15:07:41
Compartilhar