Um Livro-Texto Para O Ensino De Projeto De Arquitetura De Software
Total Page:16
File Type:pdf, Size:1020Kb
Universidade Federal de Campina Grande Centro de Engenharia Elétrica e Informática Curso de Pós-Graduação em Ciência da Computação Um Livro-texto para o Ensino de Projeto de Arquitetura de Software Guilherme Mauro Germoglio Barbosa Dissertação submetida à Coordenação do Curso de Pós-Graduação em Ciência da Computação da Universidade Federal de Campina Grande - Campus I como parte dos requisitos necessários para obtençãodograu de Mestre em Ciência da Computação. Área de Concentração: Ciência da Computação Linha de Pesquisa: Engenharia de Software Jacques P. Sauvé (Orientador) Campina Grande, Paraíba, Brasil !c Guilherme Mauro Germoglio Barbosa, 04/09/2009 FICHA CATALOGRÁFICA ELABORADA PELA BIBLIOTECA CENTRAL DA UFCG B238l 2009 Barbosa, Guilherme Mauro Germoglio Um livro-texto para o ensino de projeto de arquitetura de software / Guilherme Mauro Germoglio Barbosa. ! Campina Grande, 2009. 209 f. : il. Dissertação (Mestrado em Ciência da Computação) – Universidade Federal de Campina Grande, Centro de Engenharia Elétrica e Informática. Referências. Orientadores: Prof. Dr. Jacques P. Sauvé. 1. Arquitetura de Software 2. Engenharia de Software 3. Projeto 4. Ensino I. Título. CDU – 004.415.2(043) Resumo Aarquiteturadesoftwareéaorganizaçãofundamentaldeumsistema, representada por seus componentes, seus relacionamentos com o ambiente, e pelos princípios que conduzem seu design e evolução. O projeto da arquitetura é importante no processo de desenvolvimento, pois ele orienta a implementação dos requisitos de qualidadedosoftwareeajudanocontrole intelectual sobre complexidade da solução. Além disso, serve como uma ferramenta de comunicação que promove a integridade conceitual entre os stakeholders. No entanto, os diversos livros adotados em disciplinas de Projeto de Arquitetura de Soft- ware assumem que o leitor tenha experiência prévia em desenvolvimento de software. Por outro lado, se os leitores são inexperientes, como os alunos de graduação, os exemplos, exer- cícios, ou ausência destes, e a abordagem utilizados nesses livros dificultam o aprendizado. Oobjetivodestetrabalhoéescreverumlivro-textointrodutório à disciplina de Projeto de Arquitetura de Software que tenha como público-alvo o aluno inexperiente. Esse livro servirá de apoio ao ensino da disciplina em nível de graduação e abrange tópicos recomendados pelo Guide to the Software Engineering Body of Knowledge, produzido pela IEEE Computer Society. O conteúdo do livro deve capacitar o aluno a entenderosbenefíciosdeconsiderar aarquiteturanociclodevidadosoftware,adocumentaraarquitetura de um sistema de software, e a aprofundar seu conhecimento por meio de materiais até então inadequados para seu nível de experiência. i Abstract The software architecture is the organization of a software system manifested in its mod- ules, their relationships to the environment, and the principles that guide its design and evo- lution. The design of the software architecture is importanttothedevelopmentprocess because it guides the software’s quality attributes implementation and helps the intellectual control over the problem complexity. Besides that, the software architecture also supports conceptual integrity by being a tool for stakeholders’s communication. Most of the books available on Software Architecture are intended for experienced stu- dents. However, the inexperienced ones, such as undergraduate students, are not able to fully benefits from these books because they lack some previous knowledge required by many au- thors. The objective of this work is to write an introductory textbook on Software Architecture Design, which will be focused on such students. This book willthenbeabletosupport undergraduate courses on the subject and will cover topics recommended by the Guide to the Software Engineering Body of Knowledge, edited by the IEEE Computer Society. This book intends both to enable students to understand and apply the benefits of architectural design and documentation processes on the software lifecycle, and to enable the students to easier comprehend more advanced books and articles, which were previously inadequate for their experience. ii Agradecimentos Atodosqueajudaram,muitoobrigado. iii Conteúdo 1Introdução 1 1.1 Evidências da necessidade de estudar arquitetura de software . 3 1.1.1 Considerações sobre livros da área . .. 5 1.2 Objetivo do Trabalho . 6 1.3 Relevância do Trabalho . 6 2RequisitosparaumLivro-Texto 8 2.1 Discurso.................................... 8 2.2 Exemplos ................................... 9 2.3 Exercícios................................... 9 2.4 Conteúdo . 10 2.5 Objetivos pedagógicos . 11 3AvaliaçãocriteriosadelivrossobreArquiteturadeSoftware 13 3.1 CritériosdeAvaliação. .. .. .. .. .. .. .. .. .14 3.2 Avaliação dos livros . 15 3.3 Conclusões . 15 4Metodologia 21 4.1 Encontrar os requisitos para um livro-texto . ........ 22 4.2 Encontrar as mensagens para o livro-texto . ...... 22 4.3 Organizar as mensagens . 22 4.4 Escolher a abordagem do texto . .22 4.5 Construir a estrutura de acordo com as mensagens . ....... 23 4.6 Evoluir o texto a partir da estrutura . ..... 23 iv CONTEÚDO v 4.7 Avaliar o conteúdo através de cursos voltados para graduação e pós-graduação 23 4.8 Refinar o texto . 24 5ConclusõeseTrabalhosFuturos 25 5.1 Considerações sobre a avaliação . ... 26 5.2 Considerações sobre os trabalhos futuros . ....... 27 AMensagensdoLivro 39 BIntroduçãoaoDesigndeSoftware 45 B.1 DesigndeSoftware .............................. 46 B.1.1 OqueéDesigndeSoftware . 47 B.1.2 CaracterísticasdeDesigndeSoftware . ... 48 B.2 Elementosdoprocessodedesigndesoftware . ..... 51 B.2.1 Objetivos ............................... 52 B.2.2 Restrições............................... 53 B.2.3 Alternativas.............................. 55 B.2.4 Representações............................ 56 B.2.5 Soluções ............................... 59 B.3 Níveisdedesigndesoftware . .60 B.4 Princípiosetécnicasdedesigndesoftware. ....... 61 B.4.1 DivisãoeConquista ......................... 61 B.4.2 Abstração............................... 63 B.4.3 Encapsulamento ........................... 63 B.4.4 Modularização ............................ 63 B.4.5 Separaçãodepreocupações. 64 B.4.6 Acoplamentoecoesão ........................ 64 B.4.7 Separação deDecisões deExecução deAlgoritmos . .... 65 B.4.8 Separação deInterfaces desuas Implementações . ..... 65 Resumo ....................................... 66 Exercícios...................................... 67 CONTEÚDO vi CEstudodeCaso:SASF 69 C.1 Apresentaçãodoestudodecaso . .69 C.2 FuncionalidadesdoSASF. 70 C.2.1 Locação e Streaming de vídeo . 70 C.2.2 Busca,feedbackesugestõesaousuário . .. 72 C.2.3 Disponibilização de filmes e administração do sistema ....... 73 C.3 CapacidadesdoSASF............................. 75 C.3.1 Númerosdeusuárioseaspectosdesegurança . ... 75 C.3.2 Tamanho do inventárioe número de operações por dia . .... 75 C.3.3 Transmissõessimultâneas . 75 C.3.4 Adiçãodeinformaçõessobreosvídeos . .76 C.3.5 Temposderesposta.......................... 77 C.4 Resumo .................................... 77 DFundamentosdeArquiteturadeSoftware 79 D.1 Motivação para desenvolver melhores sistemas . ....... 79 D.2 OqueéArquiteturadeSoftware . .81 D.3 Definição de Arquitetura de Software por Perry e Wolf . ....... 81 D.4 ArquiteturadeSoftwareporGarlaneShaw . .... 83 D.5 Arquitetura de Software por Bass et al .................... 85 D.6 Arquitetura de Software pelo Padrão ISO/IEEE 1471-2000 ......... 87 D.7 DecompondoadefiniçãodeArquiteturadeSoftware . ...... 89 D.7.1 Elementosarquiteturais. 90 D.7.2 Decisõesarquiteturais ........................ 92 D.7.3 Atributosdequalidade ........................ 98 D.8 VisõesdaArquitetura............................. 102 D.9 ODocumentodeArquitetura . 103 D.9.1 Benefícios .............................. 103 D.9.2 Dificuldades . 105 D.10 Porquedocumentaraarquiteturadesoftware? . ........ 107 Exercícios...................................... 112 CONTEÚDO vii EStakeholders 113 E.1 Quemsãoosinteressadosemumsistemadesoftware? . ...... 114 E.1.1 Importânciadosinteressados. .116 E.2 Tipos de stakeholders e sua relação com os atributos de qualidade . 118 E.2.1 Atendimentoaos requisitoscomo medida de sucesso . ..... 119 E.2.2 Conflitos entre requisitos e atributos de qualidade . ........ 120 E.2.3 Responsabilidadesdosstakeholders . ... 121 E.3 Resumo .................................... 124 Exercícios...................................... 126 FAtributosdeQualidade 127 F.1 RequisitosFuncionaiseNão-Funcionais . ...... 128 F.2 Atributosdequalidade ............................ 135 F.2.1 Limitesàsfuncionalidades . 138 F.2.2 Relaçõesentreatributosdequalidade . ... 138 F.2.3 Aqueminteressaosatributosdequalidade . ... 139 F.3 ModelodeQualidade............................. 139 F.3.1 PadrãoISO/IEC9126-1:2001 . 139 F.3.2 Conflitosentreatributosdequalidade . ... 151 F.4 AtributosdeNegócio ............................. 152 F.4.1 Mercado-alvo............................. 152 F.4.2 Time-to-market ............................ 152 F.4.3 Custoebenefício........................... 153 F.4.4 Vidaútil................................ 153 F.4.5 Agendadelançamento .. .. .. .. .. .. .. 153 F.5 DesignArquiteturalparaQualidadedeSoftware . ........ 154 Exercícios...................................... 155 GTécnicasdeDesignArquitetural 157 G.1 PrincípioseTécnicasdeDesignArquitetural . ....... 158 G.1.1 Abstração . 158 G.1.2 Separaçãodepreocupações. 160 CONTEÚDO viii G.1.3 Padrõeseestilosarquiteturais . .. 160 G.2 TáticasdeDesign..............................