eduardo kinder almentero dos requisitos ao código: um …julio/tese-eduardo.pdf · 2014. 4. 1. ·...

183
Eduardo Kinder Almentero Dos Requisitos ao Código: Um Processo para Desenvolvimento de Software mais Transparente Tese de Doutorado Tese apresentada como requisito parcial para obtenção do grau de Doutor pelo Programa de Pós-graduação em Informática do Departamento de Informática do Centro Técnico Científico da PUC-Rio. Orientador: Prof. Julio Cesar Sampaio do Prado Leite Rio de Janeiro Dezembro de 2013

Upload: others

Post on 13-Feb-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

  • Eduardo Kinder Almentero

    Dos Requisitos ao Código: Um Processo para

    Desenvolvimento de Software

    mais Transparente

    Tese de Doutorado

    Tese apresentada como requisito parcial para obtenção do grau de Doutor pelo Programa de Pós-graduação em Informática do Departamento de Informática do Centro Técnico Científico da PUC-Rio.

    Orientador: Prof. Julio Cesar Sampaio do Prado Leite

    Rio de Janeiro

    Dezembro de 2013

  • Eduardo Kinder Almentero

    Dos Requisitos ao Código: Um Processo para

    Desenvolvimento de Software

    mais Transparente

    Tese apresentada como requisito parcial para obtenção do grau de Doutor pelo Programa de Pós-graduação em Informática do Departamento de Informática do Centro Técnico Científico da PUC-Rio. Aprovada pela Comissão Examinadora abaixo assinada.

    Prof. Julio Cesar Sampaio do Prado Leite Orientador

    Departamento de Informática – PUC-Rio

    Prof. Carlos José Pereira de Lucena Departamento de Informática – PUC-Rio

    Prof. Alessandro Fabrício Garcia Departamento de Informática – PUC-Rio

    Profa. Vera Maria Benjamim Werneck Universidade do Estado do Rio de Janeiro – UERJ

    Prof. Elder José Reioli Cirilo Universidade Federal de São João del-Rei – UFSJ

    Prof. José Eugenio Leal

    Coordenador Setorial do Centro Técnico Científico – PUC-Rio

    Rio de Janeiro, 12 de dezembro de 2013

  • Todos os direitos reservados. É proibida a reprodução total ou parcial do trabalho sem autorização da universidade, do autor e do orientador.

    Eduardo Kinder Almentero

    Graduou-se em Bacharelado em Informática na UERJ em 2006. Recebeu o título de Mestre em Informática na PUC-Rio em 2009.

    Ficha Catalográfica

    Almentero, Eduardo Kinder Dos Requisitos ao Código: Um Processo para

    Desenvolvimento de Software mais Transparente / Eduardo Kinder Almentero ; orientador: Julio Cesar Sampaio do Prado Leite. - 2013.

    183 f. ; 30 cm Tese (doutorado) – Pontifícia Universidade Católica

    do Rio de Janeiro, Departamento de Informática, 2013. Inclui bibliografia.

    1. Informática – Teses. 2. Transparência de software. 3. Desenvolvimento de software. 4. Cenários. 5. Léxico ampliado da linguagem. 6. Modularização. 7. Rastreabilidade. 8. Entendimento. I. Leite, Julio Cesar Sampaio do Prado. II. Pontifícia Universidade Católica do Rio de Janeiro. Departamento de Informática. III. Título.

    CDD: 004

  • Aos meus pais Emilio Correa Almentero e Meire Luci Kinder Almentero.

  • Agradecimentos

    A Deus, por tudo.

    À minha amada esposa, Amanda, pelo carinho, paciência e incentivo nos

    momentos mais difíceis.

    À minha família, por acreditarem em mim e torcerem por minha vitória.

    Ao meu orientador, Professor Julio Cesar Sampaio do Prado Leite, pela

    paciência, confiança e conhecimento compartilhado.

    Aos membros da banca, por aceitarem o convite e por sua colaboração com este

    trabalho.

    Aos integrantes do Grupo de Requisitos da PUC-Rio, pelas valiosas

    contribuições e os momentos de descontração durante nossas reuniões.

    Aos amigos do LES, por suas sugestões e companheirismo.

    Ao corpo docente e funcionários da PUC-Rio, por toda atenção e apoio, que

    foram determinantes para conclusão deste trabalho.

    À agência de fomento CNPq e a PUC-Rio, pelo apoio financeiro, sem o qual este

    trabalho não poderia ter sido concluído.

  • Resumo

    Almentero, Eduardo Kinder; Leite, Julio Cesar Sampaio do Prado. Dos Requisitos ao Código: Um Processo para Construção de Software mais Transparente. Rio de Janeiro, 2013. 183p. Tese de Doutorado – Departamento de Informática, Pontifícia Universidade Católica do Rio de Janeiro.

    Transparência, no sentido de translúcido, é um conceito presente em uma

    enorme variedade de âmbitos e, recentemente, tem sido explorado no contexto

    de software. Um software transparente é aquele que informa sobre si mesmo,

    disponibilizando informação sobre o que faz, como e porque o faz. A abordagem

    da transparência no contexto de software se iniciou através da instanciação de

    um catálogo de requisitos não funcionais (RNFs), que inicialmente foi

    desenvolvido para transparência de processos. Durante a construção deste

    catálogo, notou-se que os RNFs dependência, rastreabilidade e detalhamento,

    presentes no catálogo, estão relacionados a problemas clássicos da Engenharia

    de Software. Estes problemas são, respectivamente, a definição de critérios para

    modularização do software, rastreabilidade entre seus artefatos e entendimento

    do seu código. Neste trabalho, propomos estratégias para lidar especificamente

    com estes três problemas, contribuindo também para construção de softwares

    mais transparentes, uma vez que sua solução implica na satisfação de

    qualidades do catálogo. Estas estratégias foram estruturadas através de um

    processo de construção de software. Esse processo tem como escopo software

    para Web, utilizando arquitetura MVC, desenvolvido através do paradigma de

    programação procedural. A ideia central do processo é a utilização de dois

    artefatos de requisitos, Léxico Ampliado da Linguagem (LAL) e cenários, durante

    todo processo de construção do software. O LAL é utilizado na definição dos

    módulos do software. Os cenários são refinados em diferentes níveis de

    abstração, de modo que permeiam todo o processo, desde os requisitos até

    serem integrados ao código fonte do software. Os rastros entre os diferentes

    níveis de abstração dos cenários são mantidos. As operacionalizações propostas

    no processo foram anexadas ao catálogo de transparência de software,

    possibilitando futura reutilização orientada a qualidades. O processo e suas

    operacionalizações foram avaliados através de estudos empíricos envolvendo

    diversos sujeitos. O resultado das avaliações sugere que o processo contribui

  • positivamente para as qualidades de detalhamento, dependência e

    rastreabilidade, presentes no catálogo de transparência.

    Palavras-chave

    Transparência de Software; Desenvolvimento de Software; Cenários;

    Léxico Ampliado da Linguagem; Modularização; Rastreabilidade; Entendimento.

  • Abstract

    Almentero, Eduardo Kinder; Leite, Julio Cesar Sampaio do Prado (Advisor). From Requirements to Code: A Process to Develop more Transparent Software. Rio de Janeiro, 2013. 183p. DSc Thesis – Departamento de Informática, Pontifícia Universidade Católica do Rio de Janeiro.

    Transparency is a concept that permeates different disciplines, and recently

    has been explored in the context of software engineering. Transparent software

    aims to make information about it transparent and also aims to provide

    transparency on its behavior. The study of transparency in the context of software

    started by instantiating a catalog of non-functional requirements (NFRs). During

    the construction of this catalog, we realized that the NFRs of traceability,

    dependability and detailing are related to classical problems in software

    engineering. These problems are, respectively, the definition of software

    modules, traceability between its artifacts and the understanding of its source

    code. In this work we propose strategies to deal specifically with these three

    problems. As these problems are also related to the transparency catalog, then if

    we contribute to solving these problems, we will also be contributing to software

    transparency. These strategies were structured through a software construction

    process that has Web software as its main target. The process uses MVC

    architecture and procedural oriented programming languages. The central idea of

    this process is to use two requirements artifacts, the Language Extended Lexicon

    (LEL) and scenarios, throughout the construction process. The LEL is used in the

    definition of the software modules. The scenarios are refined at different levels of

    abstraction so that they permeate the entire development process, from

    requirements documentation until their integration with the software source code.

    The traces between these scenarios are maintained. The strategies proposed in

    the process were attached to the software transparency catalog to allow for

    quality based reuse. The process and its operationalizations were evaluated

    through empirical studies involving different subjects. The results of the

    evaluations suggest that the process contributes positively to the quality of

    detailing, dependency and traceability, present in the transparency catalog.

    Keywords

    Software Transparency; Software Development; Scenarios; Language

  • Extended Lexicon; Modularization; Traceability; Code Understandability.

  • Sumário

    1 Introdução 17

    1.1. Motivação 17

    1.2. Caracterização do Problema 21

    1.3. Enfoque da Solução 22

    1.4. Organização da Tese 24

    2 Fundamentação Teórica 25

    2.1. Léxico Ampliado da Linguagem (LAL) 25

    2.2. Cenários 29

    2.3. Arquitetura Model View Controller (MVC) 35

    2.4. Catálogo de Transparência 37

    2.5. Conclusão 46

    3 Processo para Desenvolvimento de Software Mais Transparente (PDS+T) 47

    3.1. O Processo PDS+T 47

    3.2. Descrição das Atividades do PDS+T 50

    3.2.1. Agrupar 51

    3.2.2. Organizar 63

    3.2.3. Operacionalizar 86

    3.3. Organizando o PDS+T para Reuso Orientado a Qualidade 100

    3.3.1. Atividade Agrupar 101

    3.3.2. Atividades Agrupar e Organizar 102

    3.3.3. Atividade Operacionalizar 104

    3.3.4. PDS+T 105

    3.4. Conclusão 107

    4 Avaliação do Processo PDS+T 108

    4.1. Estudos Empíricos 108

    4.1.1. Sistemas Utilizados 109

    4.1.2. Estudo Biblioteca Digital 110

    4.1.3. Estudo C&L 132

    4.2. Conclusão 151

  • 5 Conclusão 152

    5.1. Comparações com Trabalhos Relacionados 152

    5.2. Contribuições do Trabalho 156

    5.3. Limitações do Trabalho 158

    5.4. Trabalhos Futuros 159

    Referências 160

    Anexo A. Questionários Utilizados nos Estudos 171

  • Lista de Figuras

    Figura 1. Modelo Entidade Relacionamento do LAL, adaptado

    de (Leite e Franco, 1993). 27

    Figura 2. LAL do software C&L representado através de um grafo. 29

    Figura 3. Modelo Entidade Relacionamento da estrutura de cenários,

    adaptado de (Leite et al., 2000). 30

    Figura 4. Grafo com símbolos do LAL e cenários. 34

    Figura 5. Diagrama da arquitetura MVC adaptado de (Reenskaug, 1979). 35

    Figura 6. Arquitetura MVC proposta. 36

    Figura 7. Fragmento do SIG de Transparência representado através

    do padrão Objetivo. 40

    Figura 8. SIG de Transparência, adaptado de (Cappelli, 2009). 42

    Figura 9. Padrão Questão de Rastreabilidade. 44

    Figura 10. Padrão Questão de Dependência. 45

    Figura 11. Padrão Questão de Detalhamento. 45

    Figura 12. SADT do processo proposto. 49

    Figura 13. Atividade AGRUPAR detalhada através do SADT. 52

    Figura 14. Arquitetura de alto nível (modelo conceitual). 53

    Figura 15. Atividade ORGANIZAR. 63

    Figura 16. Atividade ORGANIZAR detalhada através do SADT. 64

    Figura 17. Tarefa de divisão dos cenários iniciais. 65

    Figura 18. Tarefa de criação de cenários de visão. 66

    Figura 19. Exemplo de divisão de um cenário de visão do C&L. 67

    Figura 20. Tarefa de criação de cenários de controle. 68

    Figura 21. Exemplo de divisão de um cenário de visão do C&L. 69

    Figura 22. Tarefa de criação de cenários de modelo. 70

    Figura 23. Exemplo de divisão de um cenário de modelo do C&L. 70

    Figura 24. Atividade OPERACIONALIZAR. 86

    Figura 25. Atividade OPERACIONALIZAR detalhada através do SADT. 87

    Figura 26. Alternativas para Dependência[Software]. 101

    Figura 27. Alternativas para

    Rastreabilidade[Software.Requisitos-Arquitetura]. 103

    Figura 28. Alternativas para

    Rastreabilidade[Software.Arquitetura-Código]. 104

  • Figura 29. Alternativas para Detalhamento[Software]. 106

    Figura 30. Perfil dos participantes do Estudo Biblioteca Digital. 113

    Figura 31. Passos para realizar a tarefa 1 do Estudo Biblioteca Digital com

    artefatos do PDS+T. 114

    Figura 32. Passos 1 a 5 para realizar a tarefa 3 do Estudo

    Biblioteca Digital, com artefatos do PDS+T. 116

    Figura 33. Passos 6 a 9 para realizar a tarefa 3 do Estudo

    Biblioteca Digital, com artefatos do PDS+T. 117

    Figura 34. Passos 10 a 12 para realizar a tarefa 3 do Estudo

    Biblioteca Digital, com artefatos do PDS+T. 118

    Figura 35. Grupo 1 gráfico de tarefas corretas. 124

    Figura 36. Grupo 1 gráfico do tempo de execução das tarefas. 125

    Figura 37. Grupo 2 gráfico de tarefas corretas. 126

    Figura 38. Grupo 2 gráfico do tempo de execução das tarefas. 127

    Figura 39. Gráfico de tarefas corretas Grupo 1 + Grupo 2. 128

    Figura 40. Percentual de tarefas corretas executadas no Biblioteca

    Digital com cenário. 128

    Figura 41. Percentual de tarefas corretas executadas no Biblioteca

    Digital sem cenário. 129

    Figura 42. Gráfico do tempo de execução das tarefas Grupo 1 + Grupo 2. 130

    Figura 43. Perfil dos participantes do Estudo C&L. 134

    Figura 44. Passo 1 para realizar a tarefa 2 do Estudo B, no C&L em LUA. 136

    Figura 45. Passos 2 e 3 para realizar a tarefa 2 do Estudo C&L,

    no C&L em LUA. 137

    Figura 46. Passo 1 para realizar a tarefa 2 do Estudo C&L,

    no C&L em PHP. 138

    Figura 47. Passo 2 para realizar a tarefa 2 do Estudo C&L,

    no C&L em PHP. 139

    Figura 48. Passo 1 a 3 para realizar a tarefa 4 do Estudo C&L,

    no C&L em LUA. 140

    Figura 49. Passo 4 a 7 para realizar a tarefa 4 do Estudo C&L,

    no C&L em LUA. 141

    Figura 50. Passo 1 para realizar a tarefa 4 do Estudo C&L,

    no C&L em PHP. 142

    Figura 51. Passos 2 e 3 para realizar a tarefa 4 do Estudo C&L,

    no C&L em PHP. 143

  • Figura 52. Gráfico de tarefas corretas do Estudo C&L. 147

    Figura 53. Percentual de tarefas corretas executadas no C&L PHP. 147

    Figura 54. Percentual de tarefas corretas executadas no C&L Lua. 148

    Figura 55. Gráfico do tempo de execução das tarefas do Estudo C&L. 149

  • Lista de Tabelas

    Tabela 1. Exemplo de símbolo do LAL pertencente ao UdI do C&L. 27

    Tabela 2. Heurísticas para descrição do LAL. 28

    Tabela 3. Exemplo de cenário pertencente ao UdI do C&L. 32

    Tabela 4. Cenários de requisitos do C&L. 50

    Tabela 5. Número de relacionamentos dos símbolos do léxico. 54

    Tabela 6. Cenário integrador do software C&L. 63

    Tabela 7. Heurísticas para descrever cenários da camada de visão. 74

    Tabela 8. Exemplo de cenário de visão do software C&L. 76

    Tabela 9. Heurísticas para descrever cenários da camada de controle. 79

    Tabela 10. Exemplo de cenário de controle do software C&L. 80

    Tabela 11. Heurísticas para descrever cenários da camada de modelo. 83

    Tabela 12. Exemplo de cenário de modelo do software C&L. 84

    Tabela 13. Heurísticas para descrever cenários operacionais de script. 90

    Tabela 14. Exemplo de cenário operacional de visão codificado. 94

    Tabela 15. Exemplo de cenário operacional de controle codificado. 96

    Tabela 16. Exemplo de cenário operacional de modelo codificado. 98

    Tabela 17. Questionário para determinar perfil do participante. 112

    Tabela 18. Resposta da tarefa 1 do Estudo Biblioteca Digital. 115

    Tabela 19. Resposta da tarefa 3 do Estudo Biblioteca Digital,

    com artefatos do PDS+T. 119

    Tabela 20. Distribuição de tarefas entre participantes do Grupo 1. 122

    Tabela 21. Distribuição de tarefas entre participantes do Grupo 2. 122

    Tabela 22. Questionário para determinar perfil do participante. 133

    Tabela 23. Resposta da tarefa 2 do Estudo C&L, para o C&L em LUA. 137

    Tabela 24. Resposta da tarefa 2 do Estudo C&L, para o C&L em PHP. 139

    Tabela 25. Resposta da tarefa 4 do Estudo C&L, para o C&L em LUA. 142

    Tabela 26. Resposta da tarefa 4 do Estudo C&L, para o C&L em PHP. 143

    Tabela 27. Distribuição de tarefas entre participantes Estudo C&L. 146

  • Lista de Abreviaturas e Siglas

    ADL

    CTS

    Architecture Description Language

    Catálogo de Transparência de Software

    DAL

    GQM

    Data Access Library

    Goal Question Metric

    GQO Goal Question Operationalization

    LAL Léxico Ampliado da Linguagem

    LEL Lexicon Extended Language

    MDD

    MVC

    Model Driven Development

    Model View Controller

    NFR Non-functional Requirements

    PDS+T Processo de Desenvolvimento de Software Mais

    Transparente

    SIG Softgoal Interdependency Graph

    UdI Universo de Informações

  • Introdução 17

    1 Introdução

    Neste trabalho, apresentamos um processo para desenvolvimento de software

    mais transparentes. As contribuições deste processo foram anexadas a um catálogo, a

    fim de facilitar seu reuso. Este capítulo descreve a motivação que levou a realização

    deste trabalho, caracteriza o problema da construção de software transparente e como

    ele se relaciona com problemas clássicos da engenharia de software, detalha o enfoque

    da solução proposta e define a organização da tese.

    1.1. Motivação

    Transparência é um conceito difuso, que tem sido utilizado em uma grande

    variedade de âmbitos, como social, econômico e político. Recentemente, este

    conceito tem sido explorado também no contexto de software (Leite e Cappelli,

    2010). Um software transparente é aquele que informa sobre si mesmo,

    disponibilizando informação sobre o que faz, como e porque o faz. A

    complexidade inerente ao termo transparência é muito grande em qualquer

    contexto, e o de software não é uma exceção. Com o propósito de lidar de forma

    coerente com tal complexidade, utilizou-se a abordagem proposta em (Cappelli,

    2009), instanciada para o tópico software. Tal abordagem propõe a divisão da

    transparência em diversos atributos de qualidade, modelados como metas

    flexíveis inter-relacionadas, através do Software Interdenpendency Graph (SIG),

    proposto no NFR framework (Chung et al., 2000). A partir desta modelagem,

    criou-se o Catálogo de Transparência de Software (CTS) (Catálogo, 2013), cujo

    objetivo é organizar as operacionalizações relacionadas às metas flexíveis

    presentes no SIG. A variabilidade deste catálogo é proporcionada por

    alternativas para responder as questões relacionadas às metas flexíveis.

    Desenvolver sob os princípios de transparência, de forma geral, é benéfico

    devido à abertura de informações. A abertura, ideia básica por trás do

    movimento de Software Livre, é o pilar de sustentação da Lei de Linus1 - "given

    1 Raymond, Eric S. (1999). The cathedral and the Bazaar. O'Reily Media. p.30.

    ISBN 1-56592-724-9.

  • Introdução 18

    enough eyeballs, all bugs are shallow". Não obstante, os princípios de

    transparência também têm um impacto direto em outros problemas clássicos da

    Engenharia de Software, como a rastreabilidade entre artefatos de um software,

    o entendimento de seu código fonte e a definição de critérios para sua

    organização modular. Isto significa que muitas das características elencadas no

    SIG já eram desejadas para o software, porém não apareciam sob o conceito de

    transparência. Esta relação ainda não foi totalmente explorada, mas sabemos,

    analisando as questões do CTS, que há uma interseção entre as características

    de transparência e desafios já conhecidos da Engenharia de Software. Neste

    trabalho, focaremos em três conceitos que fazem parte desta interseção:

    detalhamento do código fonte, modularização e rastreabilidade.

    O detalhamento é uma das metas flexíveis presentes no SIG de

    transparência. Aplicado ao código fonte do software, esta qualidade pode facilitar

    a sua leitura por aqueles que não estiveram envolvidos diretamente em sua

    escrita, expandindo o número de pessoas que o compreendem. Utilizando o

    mesmo raciocínio que justifica a programação por pares na metodologia XP

    (Beck e Andres, 2004), a Lei de Linus ou o uso de pontos de vista (Leite e

    Freeman, 1991), podemos argumentar que a qualidade irá aumentar, pois mais

    pessoas terão a capacidade de compreender o que ele faz. Esta crença também

    é confirmada pelo estudo realizado por (Rahman e Devanbu, 2011), onde ficou

    claro que o código escrito por vários autores apresentava menos erros que

    aqueles escritos por apenas um. Uma das atividades impactada pelo

    entendimento do código é a manutenção do software. Segundo (Mayrhauser e

    Vans, 1995), o conhecimento do código influencia diretamente a eficácia da

    manutenção e evolução do software. Além disto, a sua compreensão também

    influencia a atividade de reuso. Segundo (Marshall, 1999), quando o

    programador encontra o código que deseja reusar, ele pode precisar modificar

    parte dele, para adaptá-lo a sua necessidade. Ainda que a modificação não seja

    necessária, ele precisa importá-lo para o software em desenvolvimento. De

    qualquer forma, ambas as atividades exigem que o programador entenda o

    código em questão.

    O conceito de modularização, embora não esteja explicitamente

    representado no SIG de transparência, pode ser percebido nas metas flexíveis

    dependência e divisibilidade (Catálogo, 2013). Entendemos como modularização

    a disciplina de divisão do software em módulos, que são unidades básicas do

    software com interface bem definida. Uma boa estrutura modular é aquela que

    apresenta um alto grau de coesão e baixo grau de acoplamento (Yourdon e

  • Introdução 19

    Constantine, 1979; Pressman, 1992; Sommerville, 2001). Acredita-se que um

    software com uma boa modularização seja mais fácil de desenvolver e manter

    (Pressman, 1992; Sommerville, 2001). Segundo Parnas, (Parnas, 1972) os

    benefícios de uma modularização bem feita são: (i) tempo de desenvolvimento

    reduzido, (ii) flexibilidade do produto e (iii) facilidade de compreensão. A primeira

    vantagem se deve a possibilidade de paralelizar o desenvolvimento, uma vez

    que os módulos são independentes. A segunda se deve a possibilidade de

    alterar uma parte do software, sem que outras sejam afetadas. A última é

    decorrente da possibilidade de compreender uma parte do software de cada vez.

    Existem muitos trabalhos com o objetivo de obter uma organização modular, a

    partir de software já construído (Kiarash et al., 2003; Harman et al., 2005;

    Praditwong et al., 2011), porém, poucos lidam com os critérios para escolha dos

    módulos no início do desenvolvimento de um novo software (Parnas, 1972).

    A rastreabilidade é outra meta flexível que pertence ao SIG de

    transparência. Este conceito é central na construção de software, especialmente

    a ligação entre arquitetura e código e requisitos e arquitetura (De Silva e

    Balasubramaniam, 2012). A arquitetura de um software é uma abstração, que

    permite uma visão geral de sua estrutura. Ela oculta os detalhes de

    implementação e estrutura de dados, permitindo o foco na descrição de

    elementos importantes, suas propriedades visíveis externamente e o

    relacionamento entre eles (Bass e Kazman, 2003). Linguagens formais para

    descrição de arquitetura (ADLs) (Medvidovic e Taylor, 2000), são ferramentas

    projetadas para ajudar na representação e análise destas estruturas de alto-

    nível. Embora o desenvolvimento de ADLs esteja avançando, assegurar que a

    arquitetura do software descreve o que foi implementado, e manter esta

    arquitetura atualizada, ainda são problemas centrais no processo de

    desenvolvimento de software (Aldrich et al., 2002). Como dito por Shaw (Shaw e

    Clements, 2006), duas áreas promissoras no campo da arquitetura de software

    são: estabelecer um vínculo entre arquitetura e código e investigar o

    relacionamento entre decisões arquiteturais e atributos de qualidade. O primeiro

    é importante, pois sem a presença de um elo entre arquitetura e código, ela

    estará destinada a obsolescência. A segunda é crucial para determinar o

    impacto dos atributos de qualidade no processo de desenvolvimento de

    software, de forma que seja possível entregar o software o mais próximo

    possível das necessidades do usuário. Segundo Garlan (Garlan, 2003), embora

    existam trabalhos na área de geração automática de código a partir de modelos

  • Introdução 20

    arquiteturais, assegurando a conformidade por construção, muito ainda precisa

    ser feito.

    Os esforços para manter a integridade entre código e arquitetura, não

    devem ser limitados a apenas uma direção, isto é, apenas da arquitetura para o

    código ou do código para a arquitetura. De acordo com Gurp (Gurp e Bosch,

    2002) a erosão da arquitetura, isto é, a diferença do que foi modelado e o que

    está realmente implementado, é uma condição inevitável, devido a evolução dos

    requisitos ao longo do tempo, que é uma característica inerente da grande

    maioria dos software. Portanto, os esforços devem ser concentrados em tratar o

    sintoma, ao invés de tentar evitá-lo.

    Podemos separar os problemas entre arquitetura e implementação em três

    categorias (Ubayashi et al., 2010): (i) nível de abstração do desenho da

    arquitetura, (ii) refinamento do desenho para o código e (iii) coevolução entre

    desenho e código. De acordo com Ubayashi, estes problemas existem, pois não

    há uma definição explícita da fronteira entre desenho e implementação. O

    primeiro problema está relacionado ao nível de abstração apropriado para a

    arquitetura. Um nível muito alto aumenta a diferença entre arquitetura e

    implementação. Por outro lado, se o nível de abstração for muito baixo, a

    diferença entre arquitetura e implementação se torna muito sutil. O segundo se

    refere à correlação das decisões de desenho, com o seu respectivo impacto no

    código. O último trata da integridade entre código fonte e arquitetura. Para

    manter esta integridade, é necessária uma rastreabilidade bidirecional (Moriconi

    et al., 1995; Aldrich, 2002; Buchgeher e Weinreich, 2009; Christensen e Hansen,

    2011; Zheng e Taylor, 2011).

    Observando a discussão sobre os problemas apresentados, é notória a

    relevância de abordá-los durante o processo de desenvolvimento do software.

    Fica claro também, o relacionamento entre algumas características desejadas

    para um software transparente, e dificuldades há muito discutidas no contexto da

    engenharia de software. Apesar da ampla discussão, ainda é possível contribuir

    para amenizá-las, pois nenhuma solução definitiva foi apresentada. O vínculo

    entre a transparência de software e estes problemas, torna a tarefa de elaborar

    as soluções ainda mais recompensadora, pois desta forma também estamos

    colaborando para tornar o software mais transparente.

  • Introdução 21

    1.2. Caracterização do Problema

    A transparência de software é um conceito complexo e, para ser melhor

    compreendido, foi descrito através de uma rede de metas flexíveis. Para que

    seja possível construir software utilizando princípios de transparência, é preciso

    encontrar operacionalizações para estas metas flexíveis. A forma encontrada

    para permitir a associação de operacionalizações às metas flexíveis da rede foi

    a construção de um catálogo, cuja variabilidade, isto é, seu ponto de extensão,

    são respostas as questões contidas em sua estrutura. Algumas questões do

    Catálogo de Transparência de Software (CTS) remetem a desafios conhecidos

    da engenharia de software, que ainda não foram solucionados a contento.

    Dentre estes desafios, temos o de facilitar o entendimento do código, definir

    critérios para modularização do software e criar/manter a rastreabilidade entre os

    artefatos que compõem o software.

    A melhor forma de lidar com estes desafios é incorporar ao processo de

    construção do software meios de atenuá-los. É importante que estes desafios

    sejam abordados durante o processo de desenvolvimento, pois sabemos que

    alterações em software em produção são muito mais custosas do que aquelas

    realizadas durante seu desenvolvimento (Bennett e Rajlich, 2000).

    Diante do exposto acima, em relação à operacionalização de metas

    flexíveis específicas da transparência de software, nos vemos diante dos

    seguintes desafios:

    Partindo de artefatos de requisitos em linguagem natural, como

    obter a organização modular da arquitetura do software, de modo

    que se mantenha a rastreabilidade entre os requisitos e a

    arquitetura?

    Como utilizar o mesmo artefato de requisitos, integrado com os

    diferentes artefatos produzidos ao longo do desenvolvimento do

    software, de modo a obter uma rastreabilidade, em ambas as

    direções, dos requisitos até o código?

    Como facilitar a compreensão de um software, permitindo uma

    explicação detalhada de sua estrutura e código, através da

    utilização de linguagem natural semi-estruturada, de forma que

    sejam entendidos com esforço reduzido?

  • Introdução 22

    Como incorporar as operacionalizações para rastreabilidade,

    dependência e detalhamento no Catálogo de Transparência de

    Software (CTS), a fim de permitir o seu reuso orientado a

    qualidade?

    1.3. Enfoque da Solução

    Neste trabalho, propomos um processo de construção de software

    (PDS+T) (Almentero, 2013b), que incorpora em suas etapas procedimentos

    específicos para lidar com as questões enunciadas na seção anterior. Este

    processo utiliza como alicerces a representação de requisitos através de

    cenários (Leite et al., 1997) e a linguagem do Universo de Informação (UdI),

    descrita através da técnica Léxico Ampliado da Linguagem (LAL) (Leite e

    Franco, 1993). Restringimos o escopo do processo a uma categoria específica

    de software, que são aqueles desenvolvidos para Web. Isto foi feito para que

    durante o processo, pudéssemos adotar heurísticas específicas aos paradigmas

    (Web), como, por exemplo, interface construída através da linguagem de

    marcação HTML, envolvidos na construção do software.

    Propomos um processo inteiramente novo para construção de software,

    pois vislumbramos a oportunidade de aproveitar características específicas das

    técnicas de requisitos LAL e cenários, a fim de agregar características de

    transparência ao software, durante seu desenvolvimento. Não encontramos

    nenhuma outra estratégia que utiliza estas técnicas com este fim. As

    características que nos interessaram são: (i) o princípio da circularidade do LAL,

    que permite identificar o relacionamento entre os símbolos do domínio, atributo

    interessante para abordar a qualidade de dependência, (ii) o modelo semi-

    estruturado dos cenários, que já foi utilizado com sucesso na descrição de

    artefatos do software (Silva et al., 2003; Almentero, 2009) e demonstrou ser uma

    característica interessante para qualidade de detalhamento e (iii) a existência de

    relacionamentos entre cenários, que nos permite a criação de uma rede de

    relacionamentos entre artefatos descritos com esta técnica, uma característica

    muito interessante para qualidade de rastreabilidade.

    Na primeira etapa do processo, o objetivo é a organização dos cenários

    de requisitos em módulos. Esta organização é obtida através de heurísticas de

    clusterização aplicadas ao LAL do UdI. Estas heurísticas irão identificar os

  • Introdução 23

    conceitos mais importantes dentro do LAL, que representarão os módulos do

    software. A estreita relação entre os cenários e o LAL será utilizada a fim de

    dispor os cenários de acordo com os módulos identificados. Através desta etapa,

    propomos a modularização a partir dos requisitos do software (LAL e cenários).

    A originalidade desta etapa reside no fato de que estas heurísticas se alicerçam

    em técnicas de requisitos em linguagem natural, que fornecem a base para

    encontrar os relacionamentos entre seus artefatos. O mesmo não acontece em

    (Al-Otaiby et al., 2005), onde estes relacionamentos tem que ser inferidos.

    A segunda etapa do processo consiste na derivação da arquitetura,

    segundo o padrão MVC, com base nos cenários de requisitos. Para esta tarefa,

    foram propostas heurísticas, através das quais cenários específicos de cada

    camada do MVC são criados a partir dos cenários de requisitos. Esta tarefa é

    executada de forma que é mantido um rastro bidirecional entre os cenários

    iniciais e os de camada originados a partir deles. Com isto, obtemos a

    arquitetura do software, que é explicada através dos cenários de camadas, e

    pode ser rastreada até os requisitos. Nesta etapa, a contribuição em relação a

    trabalhos existentes reside no fato de que um rastro bi-direcional é mantido entre

    os requisitos e a arquitetura. Além disto, a arquitetura é explicada através dos

    cenários criados, que são escritos em linguagem natural. Isto não acontece em

    (Aldrich et al., 2000), onde o rastro entre a arquitetura e os requisitos é mantido

    em apenas uma direção, dos requisitos para a arquitetura, e não é fornecida

    uma explicação em linguagem natural para arquitetura do software.

    Durante a última etapa do processo, o código do software é produzido.

    Antes de escrever o código propriamente dito, os cenários das camadas são

    refinados e cenários mais detalhados são produzidos (chamados de cenários

    operacionais), de forma que se mantém um rastro entre eles e os das camadas.

    Os cenários operacionais são então codificados. Ao final desta etapa, obtemos

    um único documento, que contém o código fonte do software integrado com os

    cenários operacionais. Os cenários operacionais deste documento podem ser

    rastreados até os de camada (arquitetura), que por sua vez, podem ser

    rastreados até os iniciais (requisitos). O caminho inverso também pode ser

    percorrido. Esta última etapa se assemelha a proposta Model Driven

    Development (MDD) (Sheng e Benatallhah, 2005; Hastbacka e Vepsalainen,

    2011; Agner et al., 2012), porém, a diferença é que nossa abordagem não é

    restrita a um domínio específico. Além disto, o código não é gerado a partir de

    modelos semelhantes à arquitetura, e sim de modelos em linguagem natural. Por

    fim, nossa abordagem tem como resultado uma rastreabilidade bi-direcional

  • Introdução 24

    entre arquitetura e código, enquanto a maioria das técnicas MDD apresenta

    apenas a rastreabilidade da arquitetura para o código.

    Resumidamente, o processo proposto é composto de etapas encadeadas,

    de forma que o produto de cada uma é verificado antes de ser utilizado na

    seguinte, procurando com isso atenuar problemas com a qualidade. Nestas

    etapas, critérios e heurísticas são estabelecidas, com o intuito de padronizar a

    estrutura do software produzido e criar uma sequência lógica de passos, onde

    qualidades de transparência (detalhamento, dependência e rastreabilidade) são

    atendidas através de operacionalizações integradas com as atividades

    tradicionais do desenvolvimento de software.

    1.4. Organização da Tese

    No capítulo 2, apresentamos os conceitos e abordagens, que inspiraram

    e foram utilizados como alicerce de nossa pesquisa. O capítulo 3 apresenta o

    processo que foi proposto para lidar com as dificuldades enunciadas neste

    trabalho. Tal processo foi distribuído em etapas, com entradas e saídas bem

    definidas, com o intuído de aclarar seus procedimentos. No capítulo 3, expomos

    como as contribuições obtidas através do processo foram anexadas ao CTS. No

    capítulo 4, descrevemos as avaliações realizadas, através de estudos empíricos,

    com o intuito de determinar se os objetivos esperados foram alcançados.

    Finalmente, no capítulo 5, apresentamos o relacionamento da pesquisa com

    trabalhos anteriores, nossas conclusões, limitações do trabalho e os trabalhos

    futuros.

  • Fundamentação Teórica 25

    2 Fundamentação Teórica

    Neste capítulo são apresentados os conceitos e abordagens utilizadas, que

    servem como base para o trabalho realizado. Dentre estes conceitos estão duas técnicas

    da engenharia de requisitos (LAL e cenários) e o Catálogo de Transparência de

    Software, que é peça fundamental neste estudo. Apresentamos também, neste capítulo,

    a instanciação dos conceitos do padrão arquitetural MVC, conceito fundamental para o

    entendimento do trabalho. Por fim, detalhamos a motivação para criação do Catálogo de

    Transparência de Software, descrevemos o catálogo em si e apontamos sua relação

    com o trabalho realizado.

    2.1. Léxico Ampliado da Linguagem (LAL)

    A técnica LAL (Leite e Franco, 1993) está fundamentada na existência de

    uma linguagem específica em cada Universo de Informação (UdI). Esta

    linguagem é composta de símbolos, que possuem um significado particular

    quando utilizados pelos atores do UdI. Portanto, para compreender o UdI é

    preciso primeiro entender tal linguagem. O LAL foi criado especificamente para

    guiar a elicitação e permitir a modelagem desta linguagem. O foco da técnica é

    especificamente a linguagem, o problema em si não é abordado neste momento

    da engenharia de requisitos. Leite (Leite et al., 1997), argumenta que o

    conhecimento desta linguagem deve ser o primeiro passo na fase de elicitação

    de requisitos.

    O processo proposto para construção do LEL é composto de quatro

    passos: (i) identificar as principais fontes de informação do UdI, (ii) identificar

    símbolos relevantes no UdI, (iii) elicitar o significado dos símbolos e (iv) validar o

    LAL resultante. Abaixo detalhamos as atividades compreendidas em cada um

    destes passos.

    Identificar fontes de informação. As fontes de maior importância

    do UdI são os atores e os documentos. A identificação dos atores

    corretos, que possam indicar os documentos e outras fontes de

    informação relevantes, é essencial nesta etapa.

  • Fundamentação Teórica 26

    Identificar símbolos relevantes. Nesta etapa é produzida a

    primeira lista de símbolos. São propostas duas abordagens para

    construção desta lista: ler documentos e escutar os atores. Em

    ambos os casos, a principal heurística envolve anotar frases e

    termos que parecem ter um significado especial. O foco deve ser

    em listar os símbolos e não em entender como o software irá

    funcionar. Nesta etapa, os atores podem ser ouvidos através de

    observação ou entrevistas não estruturadas.

    Elicitar o significado dos símbolos. Assim como na etapa

    anterior, o foco não deve ser a descrição de funcionalidades, e sim

    a definição da semântica de cada símbolo. A técnica de elicitação

    indicada para esta etapa é a entrevista estruturada. A lista de

    símbolos previamente criada deve servir como guia na entrevista, e

    perguntas diretamente relacionadas ao significado dos símbolos

    devem ser incluídas no roteiro.

    Validar o LAL. Duas técnicas complementares são utilizadas para

    validação. Uma baseia-se na checagem informal, onde o LAL é

    validado com a ajuda dos atores do UdI. A outra envolve uma

    análise das entradas do LAL a fim de detectar símbolos

    esquecidos.

    Como resultado do processo, cada símbolo elicitado será identificado por

    um nome e descrito através de noções (denotação) e impacto (conotação). Na

    noção, frases curtas descreverão o significado literal do símbolo no UdI. No

    impacto, serão descritos os efeitos do uso e ocorrência do símbolo no UdI.

    Adicionalmente, os símbolos podem possuir sinônimos e devem ser

    classificados, gramaticalmente, como sujeito, estado, objeto ou verbo, como

    mostra o modelo ER apresentado na Figura 1. Para exemplificar, na Tabela 1

    apresentamos a descrição de um símbolo do LAL pertencente ao UdI da

    ferramenta C&L (C&L, 2013a).

  • Fundamentação Teórica 27

    Figura 1. Modelo Entidade Relacionamento do LAL, adaptado de (Leite e Franco,

    1993).

    Nome Projeto

    Classificação Objeto

    Noção

    - Conceito utilizado para representar um UdI

    específico dentro do software.

    - Símbolos e cenários podem ser criados no projeto.

    Impactos

    - O usuário pode criar um projeto.

    - O usuário pode editar um projeto.

    - O usuário pode adicionar símbolos e adicionar

    cenários a um projeto.

    - O usuário pode exportar um projeto.

    - O usuário pode gerar o grafo do projeto.

    Tabela 1. Exemplo de símbolo do LAL pertencente ao UdI do C&L.

    Outra característica do LAL é utilização de dois princípios básicos, que

    guiam a descrição de seus símbolos. O princípio da circularidade estabelece

    que, na descrição da noção e impacto de um símbolo, deve-se utilizar ao

    máximo outros símbolos pertencentes ao LAL. Por exemplo, na descrição do

    símbolo projeto, apresentada na Tabela 1, o símbolo usuário é utilizado em

    todas as sentenças que descrevem o impacto de projeto. De forma

    complementar, o vocabulário mínimo estabelece que, ao descrever a noção e o

  • Fundamentação Teórica 28

    impacto de um símbolo, deve-se minimizar o uso de termos externos ao LAL.

    Caso seja necessário o uso de termos externos, deve-se optar por aqueles mais

    simples, com significado claro. Na descrição do impacto do símbolo projeto

    (Tabela 1), por exemplo, o único termo externo utilizado foi a palavra "pode".

    Heurísticas foram criadas para ajudar a descrição da noção e impacto dos

    símbolos de acordo com sua classificação gramatical. Tais heurísticas foram

    descritas através de perguntas, como mostra a Tabela 2. Um de seus propósitos

    é enfatizar o uso do princípio da circularidade. De acordo com a heurística para

    descrição da noção de um objeto, por exemplo, devemos identificar com quais

    outros objetos ele se relaciona. Desta forma, estamos criando relacionamentos

    entre símbolos do tipo objeto. De forma semelhante, quando o impacto de um

    símbolo do tipo sujeito é descrito, devemos enumerar as ações que ele pode

    executar. Neste caso, estamos estabelecendo relacionamento entre sujeitos e

    verbos.

    Classificação Noção Impacto

    Sujeito - Quem é o sujeito? - Quais ações pode

    executar?

    Verbo

    - Quem executa a ação?

    - Quando ela acontece?

    - Quais atividades são

    executadas?

    - Quais os reflexas desta

    ação no ambiente?

    - Quais estados são

    alcançados a partir da

    ação?

    Objeto

    - Como o objeto pode ser

    definido?

    - Com quais outros objetos

    se relaciona?

    - Quais ações podem ser

    aplicadas ao objeto?

    Estado

    - O que o estado significa?

    - Quais ações levaram a

    este estado?

    - Quais outros estados e

    ações podem ocorrer a

    partir deste?

    Tabela 2. Heurísticas para descrição do LAL.

    Como consequência da utilização do princípio da circularidade, obtemos

    um conjunto de símbolos ligados através de uma rede complexa de

  • Fundamentação Teórica 29

    relacionamentos. Esta rede pode ser interpretada como um grafo, onde cada

    símbolo é representado através de um vértice. Os relacionamentos entre dois

    símbolos são representados através de arestas ligando dois vértices. A Figura 2

    apresenta o grafo de um subconjunto dos termos do LAL referente ao UdI do

    software C&L.

    Figura 2. LAL do software C&L representado através de um grafo.

    2.2. Cenários

    A fim de definir os requisitos, os engenheiros devem compreender e

    modelar UdI do software. Uma vez modelado o conhecimento, os usuários

    interagem com engenheiros para verificar se o entendimento foi correto e validar

    os modelos construídos. Portanto, é essencial que a comunicação entre usuário

    e engenheiros seja facilitada, de modo que o processo de definição de requisitos

    seja realizado adequadamente. Esta motivação levou a pesquisa de métodos

    que ajudassem na interação entre os envolvidos durante o processo de definição

    dos requisitos. Uma das técnicas criadas através destas pesquisas foi a

    descrição através de cenários.

    Segundo Leite (Leite, 1997), no contexto da engenharia de requisitos, os

    cenários são entendidos como uma técnica que é focada tanto na descrição do

    processo quanto centrada no usuário. Está técnica é muito utilizada na

    engenharia de requisitos, pois ajuda os engenheiros a entender melhor o

    software e sua interface com o ambiente. A interação com os envolvidos é

    facilitada pelo uso da linguagem natural na descrição dos cenários. Isto permite

    que os envolvidos compreendam melhor os modelos produzidos, fazendo com

    que se sintam mais confortáveis ao interagir com os engenheiros.

  • Fundamentação Teórica 30

    No âmbito da engenharia de requisitos, vários modelos de cenários foram

    propostos, desde os mais formais (Hsia et al., 1994), que utilizam linguagem

    formal e permitem a geração e validação automáticas, até os informais (Carroll

    et al., 1994; Rosson e Carroll, 2002), que são descritos sem uma estrutura

    definida. O modelo adotado em nossa pesquisa pode ser classificado como

    intermediário, pois visa à descrição de uma situação específica do software,

    através de linguagem natural semi-estruturada (Leite et al. 1997). Este modelo

    foi escolhido, pois sua estrutura conduz a um detalhamento mais preciso e maior

    das situações que são descritas, facilitando o entendimento. Além disto, o

    modelo propõe a utilização de relacionamentos, a fim de interligar os diversos

    cenários produzidos, o que também facilita o entendimento, e permite uma

    análise da interdependência dos cenários. A estrutura estabelecida para este

    modelo é composta dos seguintes elementos: título, objetivo, contexto, recursos,

    atores, episódios, exceções e restrições, como mostra a Figura 3.

    Figura 3. Modelo Entidade Relacionamento da estrutura de cenários, adaptado de

    (Leite et al., 2000).

    O título serve como identificador do cenário dentro do UdI, portanto deve

    ser único. A finalidade do cenário é descrita, de forma sucinta, através de seu

    objetivo, que também deve conter breve informação de como a ela é alcançada.

    O contexto do cenário é descrito através da localização geográfica, localização

    temporal ou precondições. Pelo menos um dos itens citados anteriormente deve

    estar presente na descrição. A localização geográfica indica se o cenário requer

    uma posição geográfica específica para que possa ser executado. A localização

    temporal pode ser utilizada para delimitar um intervalo de tempo ou informar a

    periodicidade com que o cenário ocorre. E, por fim, temos as precondições, que

    servem para estabelecer os requisitos necessários para execução do cenário.

  • Fundamentação Teórica 31

    Os atores são as entidades ativas do cenário, que utilizam os recursos,

    entidades passivas, para realizar as ações necessárias a fim de satisfazer o

    objetivo. Para serem válidos, os atores e recursos devem aparecer em pelo

    menos um dos episódios do cenário.

    Os episódios descrevem ações executadas pelos atores com o uso dos

    recursos. São apresentados de forma sequencial e podem ser de três tipos

    distintos: simples, condicionais ou opcionais. Os simples são aqueles

    indispensáveis para que o objetivo do cenário seja alcançado. Os condicionais

    dependem da ocorrência de uma condição específica para serem executados.

    As condições internas de um cenário podem ocorrer devido a precondições,

    alternativas, restrições de atores ou recursos e episódios anteriores. Por fim,

    temos os opcionais, que podem ocorrer ou não, dependendo de condições que

    não podem ser explicitamente detalhadas.

    Título Criar projeto no C&L

    Objetivo

    Permitir a representação de um UdI específico dentro do

    software C&L, com a finalidade de agrupar símbolos do

    léxico e cenários através da ação de inserir projeto.

    Contexto - Usuário deve possuir conta no software.

    - Executar cenário AUTENTICAR USUÁRIO.

    Recursos

    Nome do projeto, descrição, formulário para cadastro

    de projeto, menu principal. Restrição: O formulário

    para cadastro deve ser simples.

    Atores Usuário e software.

    Episódios

    1. Usuário solicita a inclusão de um novo projeto no

    software através de comando no menu principal.

    Restrição: o comando para criar projeto deve ser

    intuitivo.

    2. Software exibe formulário com os campos nome e

    descrição do projeto.

    3. Usuário informa nome e descrição do projeto.

    Restrição: os dados devem estar completos.

    4. Usuário solicita criação do projeto.

    5. Software analisa os dados informados pelo usuário.

    6. Software cria novo projeto e exibe mensagem para o

    usuário, informando que o projeto foi criado com

  • Fundamentação Teórica 32

    sucesso. Restrição: mensagem exibida dever ser

    informativa.

    Exceção

    - Se o usuário informar um nome para o projeto que já

    exista na base de projetos, então o software informa

    que o nome escolhido já existe e um nome diferente

    precisa ser informado.

    - Se o usuário deixar algum dos campos do formulário

    em branco, o software não cria o projeto e emite uma

    mensagem informando ao usuário que os dados são

    obrigatórios.

    Tabela 3. Exemplo de cenário pertencente ao UdI do C&L.

    O atributo restrição pode estar relacionado ao contexto, recursos ou

    episódios de um cenário. Este atributo é utilizado para descrever aspectos não

    funcionais que podem interferir na qualidade com que o objetivo de um cenário é

    alcançado. É importante ressaltar que este atributo não impede a satisfação do

    objetivo do cenário. No cenário apresentado na Tabela 3, por exemplo, há a

    restrição "os dados devem estar completos" associada ao episódio três. Neste

    caso, mesmo que o usuário informe parcialmente os dados, o objetivo do cenário

    será alcançado, isto é, o projeto será criado. Porém, a qualidade da

    representação do UdI será menor se os dados informados forem muito

    superficiais.

    Uma exceção pode interromper o fluxo normal de execução dos episódios

    de um cenário. Cada exceção deve ser descrita através de uma sentença

    simples que deve identificar a causa da interrupção e como tratá-la. O

    tratamento da interrupção não precisa necessariamente fazer com que o objetivo

    do cenário seja alcançado.

    Uma característica importante dos cenários é a existência de

    relacionamentos entre eles. Segundo Breitman (Breitman, 2000), cenários estão

    ligados a outros cenários através de elos, formando uma complexa rede de

    relacionamentos. Estes elos podem ser de quatro tipos distintos: subcenário,

    precondição, exceção e restrição.

    Um cenário é considerado subcenário de outro quando aparece em pelo

    menos um de seus episódios. Este relacionamento é útil quando:

  • Fundamentação Teórica 33

    Um comportamento comum é detectado em vários cenários do mesmo

    UdI. Neste caso, o comportamento é isolado em um novo cenário e este

    passa a ser referenciado pelos outros que possuíam o comportamento.

    Desta forma é possível reduzir a redundância de informações e,

    consequentemente, todos os problemas decorrentes dela.

    Há um curso de ação, que pode ser alternativo ou condicional, dentro de

    uma situação do UdI. Quando isto ocorre, podemos separar este

    comportamento em um novo cenário, o que possibilita um melhor

    detalhamento e, consequentemente, facilita sua compreensão.

    É preciso melhorar a descrição de uma situação que possui um objetivo

    importante e bem definido dentro de sua descrição. Diante disto, é

    possível destacar este objetivo e criar um novo cenário para detalhá-lo,

    facilitando desta forma tanto sua descrição quanto entendimento.

    A precondição é um relacionamento definido dentro do componente

    contexto de um cenário, isto é, um cenário que atua como precondição para

    outro deve aparecer dentro de seu contexto. Este relacionamento nos permite

    estabelecer de forma objetiva uma ordem entre os cenários, possibilitando a

    especificação de estágios que devem ser completados antes da execução de

    outros. Um exemplo deste relacionamento pode ser visto no cenário descrito na

    Tabela 3, onde o cenário "autenticar usuário" é precondição para "criar projeto

    no C&L". Para destacar o relacionamento, o título do cenário que é referenciado

    é escrito com letras maiúsculas.

    Relações de exceção acontecem quando um cenário aparece no

    componente exceção de outro. Este relacionamento nos permite detalhar melhor

    tratamentos de exceção complexos através de outro cenário. Desta forma,

    contamos com toda a estrutura de um cenário para detalhar o tratamento, ao

    invés de resumi-lo em uma sentença simples.

    O relacionamento de restrição é estabelecido quando utilizamos um novo

    cenário com o objetivo de detalhar aspectos não funcionais que restringem o

    funcionamento correto de outro cenário. Este relacionamento ocorre no atributo

    restrição, que pode estar associado a recursos, contexto e episódios.

  • Fundamentação Teórica 34

    Figura 4. Grafo com símbolos do LAL e cenários.

    O processo de construção de cenários para descrever situações do UdI

    está intimamente relacionado ao LAL, técnica descrita na seção 2.1. Esta

    relação existe, pois, ao descrever os cenários, é natural que os envolvidos

    utilizem a linguagem do UdI, que é justamente o alvo da técnica LAL. Desta

    forma, além de elos entre cenários, temos também elos entre cenários e

    símbolos do LAL, facilitando ainda mais a compreensão dos cenários. Os

    símbolos do LAL utilizados na descrição do cenário da Tabela 3 estão

    sublinhados. Desta forma, por exemplo, se quiséssemos compreender melhor o

    significado do termo "software" no UdI do C&L, bastaria olhar a definição destes

    símbolos no LAL.

    Extrapolando a ideia exposta na seção 2.1, de desenhar um grafo

    utilizando os símbolos como vértices e os relacionamentos como arestas,

    podemos desenhar um grafo contendo cenários e símbolos do LAL. A Figura 4

    representa o grafo da Figura 2 com a adição de dois cenários, que estão

    destacados juntamente com seus relacionamentos. O relacionamento entre dois

    cenários também é representado através de uma aresta, que neste caso possui

    o nome do relacionamento, como podemos ver no caso dos cenários "autenticar

    usuário" e "criar projeto no C&L", onde o primeiro é precondição para o segundo.

  • Fundamentação Teórica 35

    2.3. Arquitetura Model View Controller (MVC)

    O padrão arquitetural MVC foi proposto por Reenskaug (Reenskaug,

    1979). Sua principal característica é uma organização, que promove a separação

    da interface, lógica e dados do software. Reenskaug propôs a camada de

    Controle (Controller) como um elo entre o usuário e o software. Este elo permite

    o envio de informações do usuário para o software através de comandos e

    dados. Também permite o fluxo inverso, isto é, a saída de informações através

    da apresentação das interfaces apropriadas. A camada de Modelo (Model), por

    sua vez, é utilizada para representar a base de conhecimento do software e

    armazenar o seu estado corrente. Por fim, a camada de Visão (View) abarca

    toda a representação visual da camada de modelo. Componentes desta camada

    podem filtrar os dados obtidos da camada de Modelo, escondendo alguns

    atributos e destacando outros. Os dados apresentados são obtidos diretamente

    da camada de Modelo. Componentes da Visão também podem atualizar a

    camada de Modelo, caso seja necessário. A arquitetura descrita anteriormente

    está representada na Figura 5.

    Figura 5. Diagrama da arquitetura MVC adaptado de (Reenskaug, 1979).

    Uma das primeiras linguagens a explorar este padrão arquitetural foi

    smalltalk-80 (Krasner e Pope, 1988). Segundo Krasner, esta divisão implica na

    separação (i) das partes que representam o modelo do domínio do software (ii)

    da forma com que ele é apresentado paro o usuário e (iii) do modo com que o

    usuário interage com o software (Krasner e Pope, 1988). Esta organização é

    interessante, pois, segundo o próprio autor, a separação destes conceitos facilita

  • Fundamentação Teórica 36

    o entendimento e a modificação de um componente, sem que seja necessário

    conhecer o restante do software.

    O padrão arquitetural MVC empregado neste trabalho é diferente do

    explicado anteriormente, porém, a motivação para sua utilização é a mesma.

    Como o contexto desta pesquisa é restrito a software Web, adotamos uma

    variante do MVC que implementa a arquitetura em três camadas, comum neste

    domínio. A principal diferença para a arquitetura proposta originalmente é a

    adoção do conceito de camadas. Assim, cada camada da arquitetura só pode se

    comunicar com aquelas adjacentes, como mostra a Figura 6. Além disto, esta

    proposta também engloba o acesso ao banco de dados do software.

    Normalmente, a camada que contempla os serviços relacionados a acesso ao

    banco de dados é utilizada na forma de uma biblioteca, como representado

    através da caixa DAL (Data Access Library) na Figura 6.

    Figura 6. Arquitetura MVC proposta.

    Devido às mudanças propostas, foi necessário mudar a definição de cada

    camada, a fim de adaptá-las a nova abordagem. A seguir, descrevemos o

    propósito de cada camada dentro desta nova abordagem.

    Visão. Camada com a qual o usuário irá interagir diretamente. Os

    dados ou comandos recebidos do usuário são repassados pela

    camada de visão ao controle através de requisições HTTP. As

    repostas recebidas através destas requisições são exibidas para o

    usuário através de arquivos HTML, código Java Script e folhas de

    estilo (CSS).

  • Fundamentação Teórica 37

    Controle. Recebe as requisições da camada de Visão. Contém a

    lógica do software e, de acordo com a lógica, pode requisitar ou

    atualizar dados da camada de Modelo. A comunicação entre

    Controle e Modelo é realizada através de chamadas/retorno de

    função.

    Modelo. Encapsula o modelo conceitual do domínio. É a camada

    responsável por manter o estado do software. Estabelece

    comunicação com a base de dados através da biblioteca de acesso

    a dados (DAL). A comunicação entre Modelo e DAL é realizada

    através de chamada/retorno de função.

    DAL (Data Access Library). Contempla todos os serviços para

    acesso ao banco de dados do software. Comunica-se com o banco

    de dados através de API específica para linguagem de

    programação utilizada no desenvolvimento.

    2.4. Catálogo de Transparência

    É sabido que construir software é uma atividade complexa devido a muitos

    fatores, como, por exemplo, o envolvimento de um grande número de pessoas

    com conhecimentos variados. Outro motivo para tal complexidade é que, além

    de estar de acordo com os requisitos funcionais, o software precisa satisfazer

    metas de qualidade, que são, normalmente, modeladas como requisitos não

    funcionais (RNF). A dificuldade em lidar com tais metas está em sua natureza

    subjetiva e no fato de que possuem um impacto amplo no software.

    Com o objetivo de lidar com esta complexidade, muitas técnicas foram

    propostas para auxiliar no processo de desenvolvimento de software. Estas

    técnicas abrangem tanto requisitos funcionais quanto os não funcionais

    (Jackson, 2001; Chung et al., 2000; Bresciani e Perini, 2004; Lamsweerde,

    2009). As abordagens orientadas a metas (Yu, 1996; Lamsweerde, 2009)

    propõem modelar o software através de suas metas e seus relacionamentos.

    Elas dão suporte à tomada de decisão e permitem a avaliação do impacto destas

    decisões. Estas técnicas promovem as metas de qualidade a entidades de

    primeira classe, estimulando os desenvolvedores a perseguir sua satisfação

  • Fundamentação Teórica 38

    durante o desenvolvimento do software. Normalmente, estes modelos são

    produzidos exclusivamente para um software, sem que haja a preocupação de

    reutilizar o conhecimento que foi adquirido. Entretanto, engenheiros de software

    se beneficiariam de um conjunto de soluções premontadas para lidar com metas

    de qualidade. Um caminho importante a ser seguido neste caso é o

    desenvolvimento de catálogos, que listem as possíveis operacionalizações para

    estas metas de qualidade.

    O framework para RNF (NFR framework), proposto por Chung (Chung et

    al., 2000) endossa as abordagens orientadas a metas. Em seu trabalho, Chung

    modela RNFs como metas flexíveis (softgoals) que podem entrar em conflito

    uma com as outras. Portanto, estas devem ser detalhadas e discutidas durante

    os estágios iniciais do desenvolvimento de software, com o objetivo de se chegar

    a soluções aceitáveis, que atendam as expectativas dos envolvidos. O principal

    modelo do NRF framework é o Softgoal Interdependency Graph (SIG), que é

    composto de vértices e elos, utilizados para representar as metas flexíveis e

    seus relacionamentos. Os vértices podem representar três tipos de elementos:

    metas flexíveis, operacionalizações e afirmações. O primeiro é utilizado para

    representar os RNFs. O segundo para representar possíveis operacionalizações

    que satisfazem a contento um RNF. O último é utilizado para justificar as

    decisões tomadas com base no SIG.

    No NFR framework as metas flexíveis são descritas por seu tipo e tópico.

    Seu tipo indica a qualidade que está sendo representada e o tópico o contexto

    em que é aplicada. No contexto de desenvolvimento de software, por exemplo,

    poderíamos ter um NFR softgoal com tipo Rastreabilidade e o tópico Processo

    de Desenvolvimento de Software. Os relacionamentos de interdependência

    dentro do NFR framework podem ser explícitos ou implícitos. O primeiro

    representa refinamentos ou contribuições, dependendo da direção do

    relacionamento. Aqueles direcionados para baixo representam uma relação de

    refinamento, onde uma meta flexível é detalhada por duas ou mais metas

    flexíveis descendentes. As contribuições são representadas por relacionamentos

    direcionados para cima e identificam o grau - que pode ser totalmente ou

    parcialmente e positivo ou negativo - com que o descendente pode contribuir

    para a satisfação a contento da meta flexível pai.

    Uma das principais características do NFR framework são os catálogos. O

    framework disponibiliza uma estrutura que permite organizar o conhecimento,

    fazendo com que os desenvolvedores possam reutilizar o que foi aprendido em

    experiências anteriores. Inicialmente, o NFR framework define três tipos distintos

  • Fundamentação Teórica 39

    de catálogo: Tipo, Método e Correlação. Um catálogo Tipo permite a

    representação estruturada de conhecimento sobre uma meta flexível específica,

    sem que um tópico seja definido. No SIG de Transparência (Figura 8), por

    exemplo, a meta flexível transparência é decomposta em Acessibilidade,

    Usabilidade, Entendimento, Auditabilidade e Informativo. A meta flexível

    acessibilidade, por sua vez, é decomposta em Portabilidade, Disponibilidade e

    Publicidade.

    O catálogo Método permite a organização de catálogos contendo técnicas

    de desenvolvimento, obtidas através da decomposição de metas flexíveis,

    instanciação de operacionalizações e identificação de afirmações. Em seu

    trabalho, Chung (Chung et al., 2000) exemplifica o uso do catálogo Método

    através do refinamento "and" da meta flexível acurácia aplicada ao tópico conta

    de banco (Acurácia [Conta]) em Acurácia [ContaRegular], Acurácia [ContaGold]

    e Acurácia [ContaPremier]. Por fim, o catálogo Correlação permite a construção

    de catálogos para inferir as possíveis interações entre metas flexíveis, tanto as

    positivas quanto as negativas. No SIG de Transparência (Figura 8), por exemplo,

    fica claro que a meta flexível Concisão contribui negativamente para a meta

    flexível Detalhamento. Um SIG é composto de informações dos três tipos de

    catálogo descritos. A Figura 8 mostra o SIG de transparência adaptado de

    (Cappelli, 2009), onde é possível observar a estrutura proposta pelo NFR

    framework para organizar as informações.

    O conhecimento a cerca de metas flexíveis compreende, entre outros, o

    seu refinamento e operacionalização, contribuições entre metas flexíveis,

    questões que ajudam sua operacionalização e pontos de vista e organização de

    questões em categorias. Como dito, apenas o SIG não é o suficiente para

    representar este vasto e complexo conhecimento. Portanto, é necessária a

    complementação do SIG com outros artefatos de requisitos. Porém, a

    representação de informações em diferentes artefatos a tornaria mais difícil de

    utilizar, manter e evoluir. Para lidar com este problema e instanciar o SIG para o

    tópico [Software], criando desta forma o Catálogo de Transparência de Software

    (Catálogo de Transparência de Software, 2013) o GrupoER (GrupoER, 2013)

    propôs organizar o catálogo SIG como uma coleção de padrões RNF.

    Os padrões RNF foram propostos por Supakkul (Supakkul et al., 2010),

    com o propósito de reusar o conhecimento sobre RNFs. Em seu trabalho,

    Supakkul define três padrões: Objetivo, Problema, Alternativa e Seleção. O

    padrão Objetivo é utilizado para capturar a definição de RNFs em termos de

    metas flexíveis. Os problemas e obstáculos para satisfazer a contento as metas

  • Fundamentação Teórica 40

    flexíveis são representados através do padrão Problema. Os diferentes meios de

    satisfazer a contento as metas flexíveis e seus efeitos colaterais são descritos

    pelo padrão Alternativa. Finalmente, temos o padrão Seleção, que dá suporte à

    escolha de alternativas, utilizando analises qualitativas ou quantitativas. Nos

    padrões RNF todo o conhecimento é representado através de uma estrutura

    composta de três partes: Inicial, Resultado e Regras de Refinamento. A parte

    Inicial captura os conceitos chaves, fornecendo o contexto necessário para o

    reuso. O Resultado representa o conhecimento disponível sobre o RNF em

    questão. As Regras de Refinamento capturam os refinamentos de modelos que

    são feitos manualmente durante uma típica sessão de engenharia de requisitos,

    onde novos elementos são adicionados ao modelo e relacionados com os já

    existentes. Além dos padrões e regras, propostos por Supakkul, O GrupoER

    propôs a criação de um novo padrão, chamado Questão. Duas novas Regras de

    Refinamento também foram adicionadas àquelas propostas por Supakkul:

    GroupIdentification e QuestionIdentification.

    Figura 7. Fragmento do SIG de Transparência representado através do padrão

    Objetivo.

    No Catálogo de Transparência de Software, o SIG foi representado através

    do padrão Objetivo. A seção Inicial do padrão define o tópico, que neste caso é

    Transparência

    Início Resultado

    Regras de Refinamento

    Transparência de Software Padrão Objetivo

    R1: NFRIdentification(Software: Transparência [Software])

    R2: NFRHelpDecomposition(Transparência , {Acessibilidade, Informativo, Usabilidade,

    Entendimento, Auditabilidade})

    Software Software

    Acessibilidade

    Usabilidade

    Informativo

    Entendimento

    Auditabilidade

    Controlabilidade Verificabilidade

    Rastreabilidade

    Help

    Help

    Hel

    p

    Help

    Help

    Help

    HelpH

    elp

    R1

    R2

    R3

    R3: NFRHelpDecomposition(Auditabilidade, {Controlabilidade, Verificabilidade,

    Rastreabilidade})

  • Fundamentação Teórica 41

    [Software]. A seção Resultado, por sua vez, identifica a meta flexível principal e

    sua decomposição. O modelo apresentado nesta seção é alcançado através das

    Regras de Refinamento: NFRIdentification e NFRDecomposition. Na Figura 7, o

    padrão Objetivo identifica a Transparência no contexto de software (Regra de

    Refinamento R1) e então a meta flexível Transparência é decomposta em

    Acessibilidade, Informativo, Usabilidade, Entendimento e Auditabilidade (Regra

    de Refinamento R2). Por último, a meta flexível Auditabilidade é refinada em

    Controlabilidade, Verificabilidade e Rastreabilidade (Regra de Refinamento R3).

    Deste modo, fica claro que utilizando as regras NFRIdentification e

    NFRDecomposition, é possível descrever todo o SIG de Transparência através

    do padrão Objetivo.

  • Fundamentação Teórica 42

    Figura 8. SIG de Transparência, adaptado de (Cappelli, 2009).

    Tra

    nsp

    arê

    ncia

    ace

    ssib

    ilid

    ad

    e

    usa

    bili

    da

    de

    info

    rma

    tivo

    en

    ten

    dim

    en

    to

    au

    dita

    bili

    da

    de

    Help

    Help

    Help

    Help

    po

    rta

    bili

    da

    de

    dis

    po

    nib

    ilid

    ad

    e

    pu

    blic

    ida

    de

    Help

    Help

    un

    ifo

    rmid

    ad

    e

    am

    iga

    bili

    da

    de

    ad

    ap

    tab

    ilid

    ad

    e

    de

    se

    mp

    en

    ho

    intu

    itiv

    ida

    de

    op

    era

    bili

    da

    de

    sim

    plic

    ida

    de

    Help

    Help Hel

    p Hel

    p

    cla

    reza

    acu

    rácia

    inte

    grid

    ad

    e

    co

    nsis

    tên

    cia

    co

    mp

    ara

    bili

    da

    de

    atu

    alid

    ad

    e

    co

    rre

    tud

    e

    co

    mp

    lete

    zaH

    elp Hel

    p

    Help

    Help

    Help

    Help

    Help

    Help

    Help

    Hel

    p

    Help

    co

    ncis

    ão

    co

    ntr

    ola

    bili

    da

    de

    va

    lida

    de

    de

    pe

    nd

    ên

    cia

    de

    talh

    am

    en

    to

    div

    isib

    ilid

    ad

    e

    co

    mp

    ositiv

    ida

    de

    Help

    Help

    Help

    Help

    Help

    exp

    lica

    çã

    o

    rastr

    ea

    bili

    da

    de

    ve

    rifica

    bili

    da

    de

    Help

    Help

    Help

    Hel

    p

    Help

    Help

    Help

  • Fundamentação Teórica 43

    É necessário um cuidado especial quando refinamos uma meta flexível

    através de elos de contribuição do tipo Help. Este tipo de elo significa que

    satisfazer a contento uma meta flexível descendente, implica em uma

    contribuição positiva a meta flexível pai. Todavia, não satisfazê-la a contento não

    impede, necessariamente, a satisfação a contento da meta flexível pai. Porém,

    há alguns casos especiais em que isso não é verdade. Analisando o primeiro

    nível de metas flexíveis do SIG de Transparência, podemos perceber que a meta

    flexível Acessibilidade é um destes casos especiais. A Transparência de

    Software não pode ser alcançada sem que o software esteja acessível. Portanto,

    neste caso, a impossibilidade de satisfazer a contento a meta flexível

    Acessibilidade (descendente) deve levar ao impedimento da Transparência de

    Software (pai). Para descrever este tipo de situação, o padrão Problema foi

    utilizado. Este padrão foi originalmente criado por Supakkul (Supakkul et al.,

    2010) para capturar o conhecimento sobre problemas especiais, que poderiam

    obstruir a satisfação a contento de uma meta flexível ou de uma de suas

    operacionalizações.

    O Catálogo de Transparência de Software (CTS) também inclui uma lista

    de operacionalizações para metas flexíveis folha (aquelas que não têm

    descendentes) e mapeia o seu impacto em outras metas flexíveis. A principal

    contribuição de se representar operacionalizações no SIG é o reuso, já que

    ajudam a construção e avaliação de novos software. Com o objetivo de definir

    quais operacionalizações eram importantes para a meta flexível principal, o

    método Goal-Question-Metric (GQM) (Basili, 1992) foi adaptado para o Goal-

    Question-Operationalization (GQO) pelo GrupoER (GrupoER, 2013). O método

    GQM se inicia com metas para o software (ou desenvolvimento do software),

    define questões para assegurar a satisfação destas metas e cria métricas para

    permitir que as questões sejam respondidas de forma quantitativa. Em sua

    adaptação, as métricas foram trocadas por operacionalizações. O GQO segue

    uma abordagem de boas práticas, onde questões são agrupadas por categoria,

    usando como base a proximidade de conceitos. Estas questões são respondidas

    através da identificação de boas práticas da engenharia de software, que

    operacionalizam as metas flexíveis folha. As questões e operacionalizações

    fornecem pontos de variabilidade e extensão para o catálogo.

    Como visto anteriormente, nosso foco neste trabalho será três metas

    flexíveis específicas do catálogo, que são: Rastreabilidade, Dependência e

    Detalhamento. Através de uma análise das questões relacionadas a estas metas

    flexíveis, presente no CTS foi possível estabelecer sua relação com os

  • Fundamentação Teórica 44

    problemas de rastreabilidade entre artefatos de um software, definição de sua

    organização modular e entendimento do software como um todo. Para uma

    melhor identificação, destacamos estas metas flexíveis na Figura 8. Através da

    Figura 9, apresentamos o padrão Questão aplicado a Rastreabilidade. Como É

    possível observar, foram criadas três categorias para organizar as questões

    relacionadas à meta flexível: pré-rastreabilidade, rastreabilidade em tempo de

    desenho e rastreabilidade em tempo de execução.

    Figura 9. Padrão Questão de Rastreabilidade.

    Na Figura 10, apresentamos as categorias e questões referentes à meta

    flexível Dependência, que foi detalhada através de três categorias: informação,

    acoplamento e coesão. Por fim, na Figura 11, exibimos as questões relacionadas

    à meta flexível Detalhamento. Estas questões foram agrupadas através de três

    categorias: usar estruturação de dados (variáveis) / funções (comandos), usar

    nomes adequados e explicar o software. As questões e categorias associadas a

    todas as outras metas flexíveis podem ser consultadas em (Catálogo de

    Transparência de Software, 2013).

    Rastreabilidade

    Inicial Resultado

    Regras de Refinamento

    Padrão Questão Rastreabilidade

    R1: GroupIdentification(Rastreabilidade, {Pré-rastreabilidade,

    Pré-rastreabilidade, Rastreabilidade em

    tempo de execução})

    R2:

    QuestionIdentification(Prerastreabilidade,

    {As fontes de informação podem ser

    rastreadas?, Os recursos utilizados ou que

    serão necessários podem ser rastreados?,

    As questões sociais, como eventos e redes

    sociais, podem ser rastreadas?, As

    principais metas e preocupações dos

    envolvidos podem ser rastreadas? })

    segue

    R1

    R2

    Rastreabilidade

    Pré-rastreabilidade Rastreabilidade em tempo de desenho

    Rastreabilidade em

    tempo de execução

    As fontes de informação podem

    ser rastreadas?

    Os recursos utilizados ou que

    serão necessários podem ser

    rastreados?

    As questões sociais, como

    eventos e redes sociais, podem

    ser rastreadas?

    As principais metas e

    preocupações dos envolvidos

    podem ser rastreadas?

    Os rastros entre diferentes

    documentos da Engenharia de

    Software são mantidos?

    Os rastros entre diferentes

    versões do mesmo documento

    são mantidos?

    O raciocínio por trás das

    tomadas de decisão são

    rastreados?

    As questões sociais em tempo

    de desenho são rastreadas?

    As fontes dos dados

    são anotadas?

    As modificações/

    atualizações dos

    dados são

    rastreadas?

    São mantidos os

    rastros dos processos

    executados/

    aplicados?

    R3:

    QuestionIdentification(Rastreabilidade

    em tempo de desenho, {Os rastros entre

    diferentes documentos da Engenharia

    de Software são mantidos?, Os rastros

    entre diferentes versões do mesmo

    documento são mantidos?, O raciocínio

    por trás das tomadas de decisão são

    rastreados?, As questões sociais em

    tempo de desenho são rastreadas?})

    segue

    R4:

    QuestionIdentification(Rastreabilidad

    e em tempo de execução, As fontes

    dos dados são anotadas?, As

    modificações/atualizações dos

    dados são rastreadas?, São

    mantidos os rastros dos processos

    executados/aplicados?})

    segue

    R3 R4

    Transparência

    He

    lpH

    elp

    Auditabilidade

  • Fundamentação Teórica 45

    Figura 10. Padrão Questão de Dependência.

    Figura 11. Padrão Questão de Detalhamento.

    Dependência

    Início Resultado

    Regras de Refinamento

    Padrão Questão Dependência

    R1: IdentificaçãodeGrupos(Dependência, {Informação, Acoplamento, Coesão})

    R2:

    IdentificaçãodeQuestões(Infor

    mação, {Existe diagrama de

    pacote?, Existe arquivo de

    gerência de configuração(i.e.

    local onde os arquivos do

    código sejam descritos)?,

    Existe sistema de controle de

    versão/configuração?})

    segue

    R1

    R2

    Transparência

    Informação Acoplamento Coesão

    Existe diagrama de

    pacote?

    Existe arquivo de

    gerência de

    configuração(i.e. local

    onde os arquivos do

    código sejam descritos)?

    Existe sistema de

    controle de versão/

    configuração?

    As dependências internas de cada

    parte foram identificadas? (ex:

    utilização de subpartes)

    As dependências externas de cada

    parte foram identificadas? (ex:

    utilização de bibliotecas)

    As dependências externas ao todo

    foram identificadas? (ex: utilização

    de serviços)

    A interdenpendência entre as

    partes é consistente? (ex: verificar

    se todas as dependências entre as

    partes foram identificadas)

    O significado das

    variáveis de cada parte

    é identificado?

    O local de criação das

    variáveis é

    identificado?

    O local onde as

    variáveis são usadas é

    identificado?

    R3:

    IdentificaçãodeQuestões(Acoplamento

    , {As dependências internas de cada

    parte foram identificadas? (ex:

    utilização de subpartes), As

    dependências externas de cada parte

    foram identificadas? (ex: utilização de

    bibliotecas), As dependências externas

    ao todo foram identificadas? (ex:

    utilização de serviços), A

    interdenpendência entre as partes é

    consistente? (ex: verificar se todas as

    dependências entre as partes foram

    identificadas)})

    segue

    R4:

    IdentificaçãodeQuestões(C

    oesão, {O significado das

    variáveis de cada parte é

    identificado?, O local de

    criação das variáveis é

    identificado?, O local onde

    as variáveis são usadas é

    identificado?})

    segue

    R3 R4Dependência

    Help

    Entendimento

    He

    lp

    Detalhamento

    Início Resultado

    Regras de Refinamento

    Padrão Questão Detalhamento

    R1: GroupIdentification(Detalhamento, {Usar estruturação de dados(variáveis) / funções (comandos) , Usar nomes adequados,

    Explicar o software})

    R2: QuestionIdentification(Usar

    estruturação de dados(variáveis) /

    funções (comandos) , {A taxonomia

    (uso de classes) está explicada?, A

    mereologia (uso de relações todo

    parte) está explicada?, Os axiomas

    (relacionamentos restritivos) estão

    explicados?})

    segue

    R1

    R2

    Transparência

    Usar estruturação de dados(variáveis) /

    funções (comandos)

    Usar nomes adequados Explicar o software

    A taxonomia (uso de classes)

    está explicada?

    A mereologia (uso de

    relações todo parte) está

    explicada?

    Os axiomas (relacionamentos

    restritivos) estão explicados?

    Os nomes são inteligíveis?

    Os nomes seguem um padrão?

    Os tamanhos dos nomes são

    adequados(não muito longos)?

    O nome é adequado para o

    significado?

    O código está explicado?

    A arquitetura está explicada?

    Os requisitos funcionais

    estão explicados?

    Os requisitos não funcionais

    estão explicados?

    R3: QuestionIdentification(Usar

    nomes adequados, {Os nomes são

    inteligíveis?, Os nomes seguem um

    padrão?, Os tamanhos dos nomes

    são adequados(não muito longos)?,

    O nome é adequado para o

    significado?})

    segue

    R4: QuestionIdentification(Explicar

    o software, {O código está

    explicado?, A arquitetura está

    explicada?, Os requisitos funcionais

    estão explicados?, Os requisitos

    não funcionais estão explicados?})

    segue

    R3 R4

    Detalhamento

    Help

    Entendimento

    Help

  • Fundamentação Teórica 46

    2.5. Conclusão

    Neste capítulo, foram apresentados os conceitos que serviram como base

    para a construção do processo PDS+T, que é apresentado a seguir. O Léxico

    Ampliado da Linguagem e os cenários são duas técnicas da engenharia de

    requisitos que possuem propósitos distintos. A primeira, foca na descrição da

    linguagem utilizada pelos atores do UdI, sem se preocupar em descrever o

    problema em si. A segunda tem como objetivo o detalhamento do problema,

    através da descrição das situações do UdI. Esta descrição é realizada através de

    uma estrutura bem definida, que permite a identificação dos recursos e atores da

    situação e seu detalhamento passo a passo. Estas abordagens foram utilizadas

    em conjunto, pois têm uma ligação muito estreita, já que os cenários são

    descritos através do uso dos termos identificados no LAL. Também foi

    apresentado o padrão arquitetural MVC, no qual nos baseamos para criar a

    arquitetura dos software construídos a partir do processo PDS+T. Este padrão

    sugere a organização do software em três camadas, isolando a interface para

    interação com o usuário do modelo conceitual e regras de negócio

    implementadas pelo software. Por fim, descrevemos como surgiu o Catálogo de

    Transparência de Software (Catálogo de Transpa