Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Apostila Engenharia Software, Notas de estudo de Informática

Apostila Engenharia Software

Tipologia: Notas de estudo

2011

Compartilhado em 22/07/2011

vicente-matos-jr-7
vicente-matos-jr-7 🇧🇷

4

(1)

1 documento

1 / 109

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Universidade do Estado de Minas Gerais
Fundação Educacional de Ituiutaba
Curso de Engenharia da Computação
Engenharia de Software
APOSTILA
ENGENHARIA DE SOFTWARE
Prof. Walteno Martins Parreira Júnior
www.waltenomartins.com.br
waltenomartins@yahoo.com
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Pré-visualização parcial do texto

Baixe Apostila Engenharia Software e outras Notas de estudo em PDF para Informática, somente na Docsity!

Universidade do Estado de Minas Gerais

Fundação Educacional de Ituiutaba

Curso de Engenharia da Computação

Engenharia de Software

APOSTILA

ENGENHARIA DE SOFTWARE

Prof. Walteno Martins Parreira Júnior

www.waltenomartins.com.br

[email protected]

[email protected]

SUMÁRIO

  • 1 SOFTWARE E ENGENHARIA DE SOFTWARE
    • 1.1 Introdução...................................................................................................................
    • 1.2 Software......................................................................................................................
    • 1.3 Problemas associados ao software
    • 1.4 A Importância do Software
    • 1.5 O Papel Evolutivo do Software
    • 1.6 Aplicações do Software...............................................................................................
    • 1.7 Engenharia de Software: Uma Definição
    • 1.8 O que é engenharia de Software?.................................................................................
      • 1.8.1 Método baseado na Decomposição de Funções:.................................................
      • 1.8.2 Método baseado na Estrutura de Dados:
      • 1.8.3 Método de Análise baseado na Orientação a Objeto...........................................
    • 1.9 Paradigmas de Engenharia de Software
    • 1.10 Processos de Software...............................................................................................
    • 1.11 Os desafios da Engenharia de Software
  • 2 TÉCNICAS DE ENTREVISTAS E DE COLETA DE DADOS
    • 2.1 Introdução.................................................................................................................
    • 2.2 Tipos de Entrevistas
    • 2.3 Problemas Fundamentais...........................................................................................
    • 2.4 Diretrizes Para a Realização de Entrevistas
      • 2.4.1 Desenvolva um Plano Geral de Entrevistas........................................................
      • 2.4.2 Certifique-se de que tem Autorização para Falar com os Usuários
      • 2.4.3 Planeje a Entrevista para Fazer Uso Eficiente do Tempo
      • 2.4.4 Utilize Ferramentas Automatizadas que Sejam Adequadas, Mas Não Abuse
      • 2.4.5 Tente Descobrir quais Informações o Usuário tem mais Interesse
      • 2.4.6 Use um Estilo Adequado de Entrevistar.............................................................
    • 2.5 Possíveis Formas de Resistência na Entrevista
    • 2.6 Outros Problemas......................................................................................................
    • 2.7 Formas Alternativas de Coleta de Dados
      • 2.7.1 Questionário de Pesquisa
      • 2.7.2 Observações no ambiente
  • 3 OS PARADIGMAS DA ENGENHARIA DE SOFTWARE
    • 3.1 O Ciclo de Vida Clássico
    • 3.2 Prototipação
    • 3.3 O Modelo Espiral......................................................................................................
    • 3.4 Técnicas de 4a Geração (4GT)
    • 3.5 Modelo por incremento
    • 3.6 Combinando Paradigmas...........................................................................................
  • 4 OS PROCESSOS DE SOFTWARE
    • 4.1 Modelos de processos de software.............................................................................
    • 4.2 Modelo em Cascata...................................................................................................
    • 4.3 Desenvolvimento Evolucionário................................................................................
    • 4.4 Desenvolvimento formal de sistemas.........................................................................
    • 4.5 Desenvolvimento Orientado a Reuso.........................................................................
  • 5 O DESENVOLVIMENTO DE SISTEMAS E AS SUAS ETAPAS
    • 5.1 O Desenvolvimento na visão Pressman,
      • 5.1.1 Fase de Definição
      • 5.1.2 Fase de Desenvolvimento
      • 5.1.3 Fase de Verificação, Liberação e Manutenção
      • 5.1.4 Conceitos utilizados no desenvolvimento:
      • 5.1.5 Técnicas utilizadas no desenvolvimento de sistemas..........................................
  • 6 TÉCNICA ESTRUTURADA
    • 6.1 Introdução.................................................................................................................
    • 6.2 Análise Estruturada
      • 6.2.1 Diagrama de Contexto
      • 6.2.2 Diagrama de fluxo de dados
      • 6.2.3 Dicionário de dados...........................................................................................
      • 6.2.4 Diagrama de Entidade-Relacionamento (DER)..................................................
      • 6.2.5 Diagrama de Transição de Estado (DTE)...........................................................
      • 6.2.6 Especificação de Processos................................................................................
    • 6.3 Projeto Estruturado
    • 6.4 Programação Estruturada
    • 6.5 Desenvolvimento Top-down
    • 6.6 Equipes de Programação
    • 6.7 Revisões Estruturadas
    • 6.8 As Ferramentas da Análise Estruturada
      • 6.8.1 Diagrama de Fluxo de Dados.............................................................................
      • 6.8.2 Dicionários de Dados
      • 6.8.3 Descrição de Procedimentos ou Especificação de Processos
  • 7 PROJETO DE TEMPO REAL
    • 7.1 Introdução.................................................................................................................
    • 7.2 Integração e Desempenho..........................................................................................
    • 7.3 Tratamento de Interrupções.......................................................................................
    • 7.4 Linguagens de Tempo Real
    • 7.5 Sincronização e Comunicação de Tarefas..................................................................
    • 7.6 Análise e Simulação de Sistemas de Tempo Real
    • 7.7 Métodos de Projeto
    • 7.8 Um método de Projeto Orientado para o Fluxo de Dados
      • 7.8.1 Requisitos de um método de projeto de Sistemas de Tempo Real
      • 7.8.2 Projeto DARTS
      • 7.8.3 Projeto de Tarefas..............................................................................................
  • 8 UML
    • 8.1 Conceitos
    • 8.2 Casos de Uso.............................................................................................................
      • 8.2.1 Como fazer o Diagrama de Casos de Uso?.........................................................
    • 8.3 Diagrama de Classe...................................................................................................
      • 8.3.1 Pacotes
      • 8.3.2 Associação
      • 8.3.3 Agregação
      • 8.3.4 Composição.......................................................................................................
      • 8.3.5 Associações.......................................................................................................
      • 8.3.6 Navegabilidade..................................................................................................
      • 8.3.7 Visibilidade.......................................................................................................
    • 8.4 Diagrama de Seqüência
      • 8.4.1 O Que é o Diagrama de Seqüência?...................................................................
    • 8.5 Diagrama de Estado
      • 8.5.1 Máquina de Estados:..........................................................................................
      • 8.5.2 Para terminar
  • 9 GERENCIAMENTO DE PROJETOS
    • 9.1 O que é Gerenciamento de Projetos?
    • 9.2 Atividades de Gerenciamento....................................................................................
    • 9.3 As Áreas de Conhecimento em Gestão de Projetos na Visão do PMI.........................
    • 9.4 Etapas essenciais do Planejamento no MS Project
  • 10 QUALIDADE DE SOFTWARE
    • 10.1 Introdução.................................................................................................................
    • 10.2 Gerenciamento da Qualidade de Software
      • 10.2.1 Planejamento da Qualidade
      • 10.2.2 Garantia da Qualidade
      • 10.2.3 Controle da Qualidade
      • 10.2.4 Modelos e Padrões da Qualidade
    • 10.3 ISO
      • 10.3.1 ISO 9000...........................................................................................................
      • 10.3.2 Aspectos a serem abordados no momento da implementação.............................
      • 10.3.3 Vantagens da certificação ISO
      • 10.3.4 ISO 9126...........................................................................................................
      • 10.3.5 ISO
      • 10.3.6 ISO
      • 10.3.7 ISO
    • 10.4 Capability Maturity Model (CMM)
      • 10.4.1 A Estrutura do CMM.......................................................................................
      • 10.4.2 Modelo de Maturidade.....................................................................................
      • 10.4.3 Os 5 Níveis de Maturidade do CMM
    • 10.5 Total Quality Control (TQC)...................................................................................
    • 10.6 Total Quality Management (TQM)..........................................................................
  • 11 BIBLIOGRAFIA

1 SOFTWARE E ENGENHARIA DE SOFTWARE

1.1 Introdução

No inicio da década de 1980, uma reportagem de primeira pagina da revista Business Week apregoava a seguinte manchete: "Software: A Nova Força Propulsora". O software amadurecera - tornara-se um tema de preocupação administrativa. Em meados da década de 1980, uma reportagem de capa da Fortune lamentava "Uma Crescente Defasagem de Software" e, ao final da década, a Business Week avisava os gerentes sobre a "Armadilha do Software - Automatizar ou Não?". No começo da década de 1990, uma reportagem especial da Newsweek perguntava: "Podemos Confiar em Nosso Software?" enquanto o Wall Street Journal relacionava as "dores de parto" de uma grande empresa de software com um artigo de primeira página intitulado "Criar Software Novo: Era Uma Tarefa Agonizante...". Essas manchetes, e muitas outras iguais a elas, eram o anuncio de uma nova compreensão da importância do software de computador - as oportunidades que ele oferece e os perigos que apresenta.

O software agora ultrapassou o hardware como a chave para o sucesso de muitos sistemas baseados em computador. Seja o computador usado para dirigir um negocio, controlar um produto ou capacitar um sistema, o software é um fator que diferencia. A inteireza e a oportunidade. das informações oferecidas pelo software (e bancos de dados relacionados) diferenciam uma empresa de suas concorrentes. O projeto e a capacidade de ser "amigável ao ser humano" (human-friendly) de um produto de software diferenciam-no dos produtos concorrentes que tenham função idêntica em outros aspectos. A inteligência e a função oferecidas pelo software muitas vezes diferenciam dois produtos de consumo ou industrias idênticas. E o software que pode fazer a diferença.

1.2 Software

Há 20 anos, menos de 1% do público poderia descrever de forma inteligível o que significa "software de computador". Hoje, a maioria dos profissionais bem como a maior parte do público, acham que entendem o que é software. Será que entendem?

Uma descrição de software num livro didático poderia assumir a seguinte forma: "Software é: (1) instruções (programas de computador) que, quando executadas, produzem a função e o desempenho desejados; (2) estruturas de dados que possibilitam que os programas manipulem adequadamente a informação; e (3) documentos que descrevem a operação e o uso dos programas". Não há duvida de que outras definições, mais completas, poderiam ser oferecidas. Mas precisamos de algo mais que uma definição formal.

O software é um elemento de sistema lógico, e não físico. Portanto, o software tem características que são consideravelmente diferentes das do hardware:

  1. O software é desenvolvido e projetado por engenharia, não manufaturado no sentido clássico.
  2. O software não se desgasta.
  3. A maioria dos softwares é feita sob medida em vez de ser montada a partir de componentes existentes.

microeletronicos que são capazes de processar 200 milhões de instruções por segundo. Em livros populares sobre a "revolução do computador", Osborne caracterizou uma "nova revolução industrial", Toffler chamou o advento da microeletronica de "a terceira onda de mudança" na historia humana e Naisbitt previu que a transformação de uma sociedade industrial em uma "sociedade de informação" terá um profundo impacto sobre nossas vidas. Feigenbaum e McCorduck sugeriram que a informação e o conhecimento (controlados por computador) serão o foco principal de poder no século XXI, e Stoll argumentou que a "comunidade eletrônica" criada por redes e software e a chave para a troca de conhecimentos em todo o mundo. Quando se iniciava a década de 1990, Toffler descreveu uma "mudança de poder", em que as velhas estruturas de poder (governamental, educacional, industrial, econômico e militar) se desintegrarão enquanto os computadores e o software levarão a uma "democratização do conhecimento".

Primeiros Anos 1950 a 1960

Segunda Era 1960 a 1970

Terceira Era 1970 a 1980

Quarta Era 1980 a 2000 Orientação Batch Multiusuário Interativo Sistemas Distribuídos Sistemas de Desktop poderosos Distribuição Limitada Tempo Real Hardware de Baixo Custo Tecnologias Orientadas à Objetos Software Customizado Banco de Dados Microprocessadores Sistemas Especialistas Programação Artesanal Produto de Software Impacto de Consumo Computação paralela Sem Administração Específica Software House “inteligência” embutida Ferramentas CASE Sem Documentação Reutilização Redes Neurais artificiais

A tabela descreve a evolução do software dentro do contexto das áreas de aplicação de sistemas baseados em computador. Durante os primeiros anos do desenvolvimento de sistemas computadorizados, o hardware sofreu continuas mudanças, enquanto o software era visto por muitos como uma reflexão posterior. A programação de computador era uma arte "secundaria" para a qual havia poucos métodos sistemáticos. O desenvolvimento do software era feito virtualmente sem administração - ate que os prazos começassem a se esgotar e os custos a subir abruptamente. Durante esse período, era usada uma orientação batch (em lote) para a maioria dos sistemas. Notáveis exceções foram os sistemas interativos, tais como o primeiro sistema de reservas da American Airlines e os sistemas de tempo real orientados a defesa, como o SAGE. Na maior parte, entretanto, o hardware dedicava-se a execução de um único programa que, por sua vez, dedicava-se a uma aplicação específica.

Durante os primeiros anos, o hardware de propósito geral tornara-se lugar comum. O software, por outro lado, era projetado sob medida para cada aplicação e tinha uma distribuição relativamente limitada. O produto software (isto e, programas desenvolvidos para serem vendidos a um ou mais clientes) estava em sua infância. A maior parte do software era desenvolvida e, em ultima analise, usada pela própria pessoa ou organização. Você escrevia-o, colocava-o em funcionamento e, se ele falhasse, era você quem o consertava. Uma vez que a rotatividade de empregos era baixa, os gerentes podiam dormir tranqüilos com a certeza de que você estaria lá se defeitos fossem encontrados.

Por causa desse ambiente de software personalizado, o projeto era um processo implícito realizado no cérebro de alguém, e a documentação muitas vezes não existia. Durante os primeiros anos, aprendemos muito sobre a implementação de sistemas baseados em computador, mas relativamente pouco sobre engenharia de sistemas de computador. Por justiça, entretanto, devemos reconhecer os muito surpreendentes sistemas baseados em computador desenvolvidos durante essa época. Alguns deles permanecem em uso ate hoje e constituem feitos que são um marco de referência e que continuam a justificar a admiração.

A segunda era da evolução dos sistemas computadorizados estendeu-se de meados da década de 1960 até o final da década de 1970. A multiprogramação e os sistemas multiusuários introduziram novos conceitos de interação homem-máquina. As técnicas interativas abriram um novo mundo de aplicações e novos níveis de sofisticação de software e hardware. Sistemas de tempo real podiam coletar, analisar e transformar dados de múltiplas fontes, dai controlando processos e produzindo saída em milissegundos, e não em minutos. Os avanços da armazenagem on-line levaram à primeira geração de sistemas de gerenciamento de bancos de dados.

A segunda era também foi caracterizada pelo uso do produto de software e pelo advento das "software houses". O software era desenvolvido para ampla distribuição num mercado interdisciplinar. Programas para mainframes e minicomputadores eram distribuídos para centenas e, às vezes, milhares de usuários. Empresários da industria, governos e universidades puseram-se "desenvolver pacotes de software" e a ganhar muito dinheiro.

A medida que o numero de sistemas baseados em computador crescia, bibliotecas de software de computador começaram a se expandir. Projetos de desenvolvimento internos nas empresas produziram dezenas de milhares de instruções de programa. Os produtos de software comprados no exterior acrescentaram centenas de milhares de novas instruções. Uma nuvem negra apareceu no horizonte. Todos esses programas - todas essas instruções - tinham de ser corrigidos quando eram detectadas falhas, alterados conforme as exigências do usuário se modificavam ou adaptados a um novo hardware que fosse comprado. Essas atividades foram chamadas coletivamente de manutenção de software. O esforço despendido na manutenção de software começou a absorver recursos em índices alarmantes.

E, ainda pior, a natureza personalizada de muitos programas tornava-os virtualmente impossíveis de sofrer manutenção. Uma "crise de software" agigantou-se no horizonte.

A terceira era da evolução dos sistemas computadorizados começou em meados da década de 1970 e continua ate hoje. Os sistemas distribuídos - múltiplos computadores, cada um executando funções concorrentemente e comunicando-se um com o outro - aumentaram intensamente a complexidade dos sistemas baseados em computador. As redes globais e locais, as comunicações digitais de largura de banda (handwidth) elevada e a crescente demanda de acesso "instantâneo" a dados exigem muito dos desenvolvedores de software.

A terceira era também foi caracterizada pelo advento e generalização do uso de microprocessadores, computadores pessoais e poderosas estações de trabalho (workstations) de mesa. O microprocessador gerou um amplo conjunto de produtos inteligentes - de automóveis a fornos de microondas, de robôs industriais a equipamentos para diagnostico de soro sangüíneo. Em muitos casos, a tecnologia de software esta sendo integrada a produtos por equipes técnicas que entendem de hardware mas que freqüentemente são principiantes em desenvolvimento de software.

O computador pessoal foi o catalisador do crescimento de muitas empresas de software. Enquanto as empresas de software da segunda era vendiam centenas ou milhares de copias de seus programas, as empresas da terceira era vendem dezenas e ate mesmo centenas de milhares de cópias. O hardware de computador pessoal está se tornando rapidamente um produto primário, enquanto o software oferece a característica capaz de diferenciar. De fato, quando a taxa de crescimento das vendas de computadores pessoais se estabilizou em meados da década de 1980, as vendas de software continuaram a crescer. Na industria ou em âmbito domestico, muitas pessoas gastaram mais dinheiro cm software do que aquilo que despenderam para comprar o computador no qual o software seria instalado.

A quarta era do software de computador esta apenas começando. As tecnologias orientadas a objetos estão rapidamente ocupando o lugar das abordagens mais convencionais para o desenvolvimento de software em muitas áreas de aplicação. Autores tais como Feigenhaum, McCorduck e Allman prevêem que os computadores de "quinta geração", arquiteturas de computação radicalmente diferentes, e seu software correlato exercerão um profundo impacto sobre o equilíbrio do poder político e industrial em todo o mundo. As técnicas

problemas complexos que não apresentam facilidades computacionais numéricas ou de análise direta.

1.7 Engenharia de Software: Uma Definição

Urna primeira definição de engenharia de software foi proposta por Fritz Bauer na primeira grande conferencia dedicada ao assunto: "O estabelecimento e uso de sólidos princípios de engenharia para que se possa obter economicamente um software que funcione eficientemente cm máquinas reais."

A engenharia de software é uma derivação da engenharia de sistemas e de hardware. Ela abrange um conjunto de três elementos fundamentais - métodos, ferramentas e procedimentos

  • que possibilita ao gerente o controle do processo de desenvolvimento do software e oferece ao profissional uma base para a construção de software de alta qualidade produtivamente.

Os métodos de engenharia de software proporcionam os detalhes de "como fazer" para construir o software. Os métodos envolvem um amplo conjunto de tarefas que incluem: planejamento c estimativa de projeto, análise de requisitos de software e de sistemas, projeto da estrutura de dados, arquitetura de programa e algoritmo de processamento, codificação, teste e manutenção. Os métodos da engenharia de software muitas vezes introduzem uma notação gráfica ou orientada a linguagem especial e introduzem um conjunto de critérios para a qualidade do software.

As ferramentas de engenharia de software proporcionam apoio automatizado ou semi- automatizado aos métodos. Atualmente, existem ferramentas para sustentar cada um dos métodos anotados anteriormente. Quando as ferramentas são integradas de forma que a informação criada por uma ferramenta possa ser usada por outra, é estabelecido um sistema de suporte ao desenvolvimento de software chamado engenharia de software auxiliada por computador (CASE - Computer-Aided Software Engineering). O CASE combina software, hardware e um banco de dados de engenharia de software (uma estrutura de dados contendo importantes informações sobre analise, projeto, codificação e teste) para criar um ambiente de engenharia de software que seja análogo ao projeto auxiliado por computador/engenharia auxiliada por computador para o hardware.

Os procedimentos da engenharia de software constituem o elo de ligação que mantém juntos os métodos e as ferramentas e possibilita o desenvolvimento racional e oportuno do software de computador. Os procedimentos definem a seqüência em que os métodos serão aplicados, os produtos (deliverables) que se exige que sejam entregues (documentos, relatórios, formulários etc.), os controles que ajudam a assegurar a qualidade e a coordenar as mudanças, e os marcos de referencia que possibilitam aos gerentes de software avaliar o progresso.

A engenharia de software compreende um conjunto de etapas que envolve métodos, ferramentas e os procedimentos. Essas etapas muitas vezes são citadas como paradigmas da engenharia de software. Um paradigma de engenharia de software e escolhido tendo-se como base a natureza do projeto e da aplicação, os métodos e as ferramentas a serem usados, os controles e os produtos que precisam ser entregues.

1.8 O que é engenharia de Software?

É um conjunto integrado de métodos e ferramentas utilizadas para especificar, projetar, implementar e manter um sistema.

Segundo Ariadne Carvalho & Thelma Chiossi no livro Introdução à Computação, a Engenharia de Software é “Uma disciplina que reúne metodologias, métodos e ferramentas a

ser utilizados, desde a percepção do problema até o momento em que o sistema desenvolvido deixa de ser operacional, visando resolve problemas inerentes ao processo de desenvolvimento e ao produto de software.” Pode-se definir como:

  • Um método é uma prescrição explícita de como chegar a uma atividade requerida por um modelo de ciclo de vida, visando otimizar a execução das atividades que foram especificadas.
  • As ferramentas proporcionam apoio automatizado ou semi-automatizado aos métodos. Os Métodos de Desenvolvimento de Sistema se diferenciam pela maneira como o problema deve ser visualizado e como a solução do problema deve ser modelada. São eles:

1.8.1 Método baseado na Decomposição de Funções:

Abordagem estruturada caracterizada pela decomposição das funções. Os tipos de modelos que representam as funções são:

  • DFD (Diagrama de Fluxo de Dados) – se caracteriza pela decomposição hierárquica de processos.
  • MHT (Modelo Hierárquico de Tarefas) – se baseia na decomposição hierárquica de tarefas.

1.8.2 Método baseado na Estrutura de Dados:

Abordagem baseada na decomposição de um problema a partir dos dados. Exemplos de tipos de modelos dessa classe:

  • MER (Modelagem Entidade-Relacionamento)
  • Técnica de Warnier

1.8.3 Método de Análise baseado na Orientação a Objeto.

Os tipos de modelos que representam essa classe são:

  • UML (Unified Process) – notação de modelagem, independente de processos de desenvolvimento.
  • Cenários

1.9 Paradigmas de Engenharia de Software

Segundo Roger Pressman, “Paradigmas são os modelos de processos que possibilitam:

  • ao gerente: o controle do processo de desenvolvimento de sistemas de software,
  • ao desenvolvedor: a obter a base para produzir, de maneira eficiente, software que satisfaça os requisitos preestabelecidos.” Os paradigmas especificam algumas atividades que devem ser executadas, assim como a ordem em que devem ser executadas. A função dos paradigmas é diminuir os problemas encontrados no processo de desenvolvimento do software, e deve ser escolhido de acordo com a natureza do projeto e do produto a ser desenvolvido, dos métodos e ferramenta a ser utilizado e dos controles e produtos intermediários desejados.

Os paradigmas serão estudados no em outro capitulo.

2 TÉCNICAS DE ENTREVISTAS E DE COLETA DE DADOS

2.1 Introdução

Este texto apresenta algumas diretrizes para as entrevistas que você fará durante a fase de análise de sistemas do projeto de desenvolvimento de um sistema. Provavelmente entrevistará usuários, gerentes, auditores, programadores e auxiliares que utilizam sistemas já existentes (informatizados ou manuais) e também várias outras pessoas envolvidas.

Por que fazemos entrevistas durante a análise de sistemas? Porque:

  • Precisamos coletar informações sobre o comportamento de um sistema atual ou sobre os requisitos de um novo sistema de pessoas que têm essas informações armazenadas em algum lugar em suas cabeças.
  • Precisamos verificar nossa própria compreensão, como analistas de sistemas, do comportamento de um sistema atual ou dos requisitos de um novo sistema. Essa compreensão deve ser adquirida através de entrevistas em combinação com informações coletadas de modo independente.
  • Precisamos coletar informações sobre o(s) sistema(s) atual(is) para a execução do estudo de custo/benefício para o novo sistema.

2.2 Tipos de Entrevistas

A forma mais comum de entrevista é uma reunião pessoal e direta entre você (talvez acompanhado por até dois analistas auxiliares do projeto) e um ou mais interlocutores (entrevistados). Normalmente são efetuadas anotações por um dos entrevistadores; menos costumeiramente, a entrevista pode ser gravada ou um(a) secretário(a) tomará notas durante a entrevista.

Pode-se perceber que as informações obtidas em uma entrevista também podem ser obtidas por outros meios, por exemplo, solicitando-se que os entrevistados respondam por escrito a um questionário formal, ou solicitando que descrevam por escrito os requisitos do novo sistema. Também podemos aumentar as entrevistas pela presença de vários especialistas (que podem até conduzir a entrevista enquanto o analista de sistemas participa como assistente), como peritos em indústria/comercio, psicólogos comportamentais e negociadores. E, finalizando, deve-se lembrar que outros meios de obtenção de dados (ex.: videocassete, gravadores, etc...) podem ser utilizados para registrar uma entrevista.

Durante a década de 80, uma forma especializada de entrevista tornou-se popular em algumas empresas; conhecida como JAD (Joint Application Development) ou projeto acelerado, ou análise em equipe, e por vários outros nomes. Ela consiste em uma rápida entrevista e um processo acelerado de coleta de dados em que todos os principais usuários e o pessoal da análise de sistemas agrupam-se em uma única e intensiva reunião (que pode prolongar-se de um dia a uma semana) para documentar os requisitos do usuário. A reunião costuma ser supervisionada por um profissional experiente e bem treinado que atua como mediador para encorajar melhores comunicações entre os analistas de sistemas e os usuários. Freqüentemente, este supervisor é apoiado por algumas pessoas que se dedicam integralmente ao processo.

Embora todas essas variações tenham de fato sido utilizadas, elas são relativamente raras e não serão discutidas em maiores detalhes neste texto. A entrevista mais utilizada ainda é a reunião pessoal entre um analista de sistemas e um usuário final.

2.3 Problemas Fundamentais

Inicialmente pode parecer que o processo de entrevistar um usuário seja uma questão simples e direta. Afinal, o analista e o usuário são pessoas inteligentes e capazes de expressarem. Os dois são pessoas racionais e ambos têm o mesmo objetivo: passar informações relativas a um novo sistema proposto da mente do usuário para a do analista. Qual é o problema?

Na realidade, existem muitos problemas que podem ocorrer. Em muitos projetos de alta tecnologia, tem-se observado que a maioria dos problemas difíceis não envolvem hardware nem software, mas sim o pleopleware. Os problemas de peopleware na análise de sistemas são muitas vezes encontrados nas entrevistas. Os problemas mais comuns a que você deve estar atento são:

  • Entrevistar a pessoa errada no momento errado. É muito fácil, por causa dos problemas e interesses organizacionais, falar com a pessoa que é o perito oficial na orientação do usuário, que demonstra nada saber a respeito dos verdadeiros requisitos do sistema; também é possível perder a oportunidade de falar com o usuário desconhecido que realmente sabe quais são os requisitos. Mesmo que encontre a pessoa certa, talvez o analista tente entrevistá-la durante um período em que o usuário não está disponível ou esteja mergulhado sob outras pressões e emergências.
  • Fazer perguntas erradas e obter respostas erradas. A análise de sistemas é, como Tom DeMarco gosta de dizer, uma forma de comunicação entre estranhos. Os usuários e os analistas de sistemas têm vocabulários diferentes, experiências básicas diferentes e muitas vezes um diferente conjunto de pressuposições, percepções, valores e prioridades. Desse modo, é fácil fazer ao usuário uma pergunta racional sobre os requisitos do sistema e o usuário não entender absolutamente a pergunta, sem que nenhum dos dois perceba o fato. E é fácil para o usuário prestar-lhe algumas informações sobre os requisitos e o analista não entender essas informações, novamente sem que nenhum dos dois perceba o fato. As ferramentas de modelagem são uma tentativa de fornecer uma linguagem comum e sem ambigüidades para diminuir esses mal entendidos. Porém as entrevistas costumam ser realizadas em uma língua comum (inglês, espanhol, francês, português etc.),portanto o problema é real. Isso explica porque é tão importante marcar entrevistas subseqüentes para confirmar que ambas as partes entenderam as perguntas e as respostas.
  • Criar ressentimentos recíprocos. existem algumas razões pelas quais o usuário pode não se sentir à vontade ou mesmo colocar-se em posição antagônica na entrevista com um analista de sistema (ex.: porque ele percebe que o verdadeiro objetivo do novo sistema que o analista está especificando é tomar-lhe o emprego). E o analista pode ressentir-se do modo como o usuário está respondendo as perguntas. Em qualquer caso, o ressentimento pode surgir entre as duas partes, tornando a comunicação muito mais difícil. Não existe um modo mágico de garantir que esses problemas não ocorrerão; eles são a conseqüência das interações pessoa-a-pessoa, e cada uma dessas interações é única. Contudo, as sugestões dadas a seguir podem ajudar a reduzir a probabilidade desses problemas; fora isso, dependerá de prática para melhorar cada vez mais em cada entrevista subseqüente.
  • Pode estar havendo uma batalha política em andamento em um nível de chefia muito mais elevado, entre o setor usuário e a organização de desenvolvimento de sistemas. Desse modo, o gerente usuário pode não ter reais objeções a suas entrevistas, porém, impedindo que elas sejam feitas, ele estará enviando uma mensagem política para o chefe do chefe do seu chefe. Por todos esses motivos, é uma boa medida obter uma prévia autorização. Na maior parte dos casos, basta uma autorização verbal; se a organização for terrivelmente burocrática ou paranóica, pode–se precisar de uma autorização escrita. Isso, a propósito, também significa que o analista deve estar atento à política organizacional se tiver certeza da necessidade de falar com um usuário (normalmente um usuário do nível operativo) com quem tenha sido avisado para não conversar.

2.4.3 Planeje a Entrevista para Fazer Uso Eficiente do Tempo

O principal aspecto desta sugestão é que deve-se compreender que está tomando o tempo do usuário e que ele (ou o chefe dele) pode achar até que o analista esteja desperdiçando o tempo dele. Assim sendo, é importante o planejamento e preparação tão antecipadamente quanto possível para poder fazer uso eficiente da entrevista.

A primeira coisa a fazer é certificar-se de que o usuário conhece o assunto da entrevista. Em alguns casos isso pode ser feito por telefone; em outros, pode ser adequado preparar uma lista das perguntas que serão feitas, ou dos tópicos que serão abordados, ou dos DFD que necessita ser revisados, e remetê-la ao usuário com um dia ou dois de antecipação. Se não puder fazer isso, é um indício de que de fato o analista não está preparado para a entrevista. E se o usuário não tiver lido o material remetido, é sinal de que:

  • está muito ocupado,
  • está desinteressado,
  • opõe-se a toda a idéia da entrevista ou
  • é incapaz de entender as perguntas apresentadas. Um aspecto relacionado: coletar, antes da entrevista, tantos dados pertinentes quanto possível. Se houver formulários ou relatórios que sejam pertinentes à discussão, geralmente poderá obtê-los antecipadamente. Se existirem outros documentos escritos do usuário descrevendo o novo ou o antigo sistema consiga-os e estude-os antes da entrevista.

Se tiver preparado as perguntas antecipadamente, o analista deve ser capaz de realizar a entrevista em uma hora ou menos. Isso é importante; não só o usuário é geralmente incapaz de reservar mais do que uma hora de cada vez, mas também as pessoas normalmente não conseguem se concentrar intencionalmente (principalmente se estiverem examinando diagramas um tanto estranhos) por mais do que uma hora. Isso naturalmente significa que deve-se organizar a entrevista para abranger um escopo relativamente limitado, focalizando normalmente uma parte do sistema. Isso também pode significar que tenha de marcar algumas entrevistas com o mesmo usuário para abranger inteiramente a área em que ele está envolvido.

Finalizando, marcar uma reunião subseqüente para rever o material que foi coletado. Normalmente, após a entrevista, o analista irá para sua mesa com todas as informações colhidas na entrevista, e executará bastante trabalho com os dados brutos. Pode haver DFD a serem desenhados ou itens a serem criados no dicionário de dados; cálculos de custo/benefício podem precisar ser feitos; as informações provenientes da entrevista podem precisar ser correlacionados com dados de outras entrevistas, e assim por diante. Em qualquer caso, os dados dessa entrevista serão manipulados, documentados, analisados e convertidos em uma forma que o usuário pode nunca ter visto antes. Desse modo, pode ser necessário marcar uma entrevista posterior para verificar:

  • que o analista não cometeu nenhum engano em seu entendimento do que o usuário lhe disse,
  • que o usuário não mudou de opinião nesse ínterim,
  • que o usuário entende a notação ou a representação gráfica dessas informações.

2.4.4 Utilize Ferramentas Automatizadas que Sejam Adequadas, Mas Não

Abuse

Durante a entrevista, pode-se achar conveniente utilizar ferramentas de prototipação, principalmente se o objetivo da entrevista for discutir a visão que o usuário tem da interface pessoa-máquina. De modo semelhante, se estiver revisando um diagrama de fluxo de dados e discutindo possíveis modificações, poderá achar prático usar uma ferramentas CASE.

Lembre-se, que o objetivo dessas ferramentas é facilitar as discussões e não complicá-las; elas devem permitir que o analista e o usuário examinem alternativas e modificações com rapidez e facilidade; elas podem ajudar a registrar o conhecimento de um requisito do usuário e corrigir imediatamente quaisquer erros que tenha sido cometido.

Se, a tecnologia introduzir-se no assunto, deve-se deixar fora da entrevista. Se o usuário tiver de aventurar-se além de seu ambiente normal de atividade (para outro prédio, na sala do computador) poderá encarar a ferramenta como um aborrecimento. Se o usuário não estiver familiarizado com a tecnologia de computadores e for solicitado a utilizar a ferramenta, poderá rejeitá-la. E se o analista não estiver familiarizado com a ferramenta (ou se a ferramenta for lenta, apresentar erros ou de emprego limitado) isso interferirá sensivelmente na entrevista. Em qualquer desses casos, talvez seja preferível usar a ferramenta off-line depois da entrevista; então, poderá mostrar ao usuário a saída da ferramenta sem causar quaisquer problemas desnecessários.

2.4.5 Tente Descobrir quais Informações o Usuário tem mais Interesse

Se o analista tiver de desenvolver um modelo completo de sistema para alguma parte de um sistema, possivelmente necessitará determinar entradas, saídas, funções, características tempo-dependentes e a memória armazenada do sistema. Porém a ordem em que se obtém essas informações costumam não ter muita importância. Mas pode significar muito para o usuário, e deve deixá-lo começar a entrevista por onde ele preferir. Alguns usuários desejarão começar pelas saídas, isto é, pelos relatórios e valores de dados que eles querem que o sistema produza (na realidade, eles talvez nem saibam que entradas serão necessárias para produzir as saídas desejadas). Outros usuários poderão estar mais interessados nas entradas ou nos detalhes de uma transformação funcional. Outros ainda preferirão falar sobre os detalhes dos dados de um depósito de dados. Deve-se esforçar para enxergar os requisitos do sistema da perspectiva desses usuários, e conservar esta perspectiva em mente quando fizer as perguntas necessárias sua entrevista.

2.4.6 Use um Estilo Adequado de Entrevistar

Como diz William Davis [Davis, 1983]: Sua atitude em relação à entrevista é importante na determinação de seu sucesso ou fracasso. Uma entrevista não é uma competição. Evite ataques; evite o uso excessivo do jargão técnico; conduza uma entrevista, não uma tentativa de persuasão. Fale com as pessoas, não fale muito alto, nem muito baixo, nem indiretamente. Uma entrevista não é um julgamento. Faça perguntas detalhadas, mas não faça perguntas para confirmar outras respostas. Lembre-se que o entrevistado é o perito e que é você que precisa de respostas. Para concluir, de modo algum critique a credibilidade de outras pessoas.

  • Você não conhece nossa empresa, como você quer dizer-nos como deve ser o novo sistema? A resposta a essa pergunta é: Você tem razão! E por isso que o estou entrevistando para saber o que você pensa sobre quais devam ser os requisitos!. Por outro lado, deverá sugerir várias maneiras de melhorar as coisas (especialmente se parte ou todo o serviço realizado atualmente pelo usuário for em um antigo e ineficiente sistema); assim, esse tipo de comentário pode ser inevitável. Entretanto, o verdadeiro truque é continuar sendo tão respeitoso quanto possível e reconhecer constantemente a experiência do usuário na sua área, embora continuando a perguntar se ele poderia explicar-lhe porque sua idéia não funcionaria.
  • Você está tentando mudar o modo como as coisas são feitas aqui. O artifício neste caso é mostrar ao usuário que embora possa estar propondo algumas (radicais) mudanças na implementação do sistema atual, não é pensamento modificar as características essenciais desse sistema, exceto nas áreas onde eles mesmos tenham solicitado uma alteração. Devemos lembrar, que algumas das características da implementação do sistema atual podem ser preservadas, por causa das interfaces do sistema atual com outros sistemas externos que exijam que as entradas ou saídas apresentem formatos prescritos.
  • Não queremos esse sistema. Esta é uma variação da queixa você está querendo tirar meu emprego. A verdadeira resposta é que o analista está ali, conduzindo a entrevista, porque a direção quer o novo sistema. Não é da sua competência convencer os usuários operativos que eles devem querer o novo sistema; fazer isso é colocar o peso da responsabilidade sobre seus ombros, onde ela não deve ficar.
  • Por que você está desperdiçando nosso tempo com esta entrevista? Sabemos o que queremos, e se você fosse competente, você saberia imediatamente o que queremos. Por que você não vai em frente e constrói o sistema? Esta é uma reclamação difícil de se lidar, porque relaciona-se com o fato fundamental de que os usuários e os analistas de sistemas estão falando línguas diferentes e estranhas. Lembre-se, que com a disponibilidade das linguagens de quarta geração e dos computadores pessoais, o usuário pode achar que pode construir ele próprio o sistema; sucessos fáceis com projetos simples (planilhas eletrônicas, por exemplo) podem ter-lhe dado a impressão de que todos os sistemas são fáceis de implementar. Isso pode explicar a impaciência em relação ao analista.

2.6 Outros Problemas

As diretrizes acima alertaram sobre os inúmeros problemas políticos com que o analista pode se defrontar em uma entrevista e os muitos motivos pelos quais o usuário pode mostrar- se hostil. Mas ainda existem alguns problemas para os quais deve-se estar atento:

  • Uma discussão que focalize mais os problemas de implementação do que os problemas dos requisitos. Isso muitas vezes ocorre quando o usuário diz: Eis como eu gostaria que você construísse o sistema.... Isso acontece quase sempre quando o usuário está raciocinando em termos da implementação do sistema atual; e pode acontecer se o usuário conhecer alguma coisa da tecnologia de computadores (ex.: quando ele possui um PC particular ou quando ele é um ex-programador). Lembrar que não é obrigação em uma entrevista de análise descrever características de implementação do sistema a não ser que sejam tão importantes que realmente pertençam ao modelo de implementação do usuário.
  • Confusão entre sintomas e problemas. Isso ocorre em muitas áreas, não apenas na área do processamento de dados. O que pode acontecer nas entrevistas de análise de sistemas. Entretanto, boa parte dele depende de onde a fronteira foi estabelecida no diagrama de contexto: se a queixa do usuário é um sintoma ou um problema depende

de ela estar associada a alguma coisa dentro dos limites do sistema ou fora deles. Desse modo, deve-se dar especial atenção ao desenvolvimento do modelo ambiental.

  • O usuário pode ser incapaz de explicar o que ele quer que o sistema faça ou pode mudar de opinião. Esse é um problema comum e o analista de sistemas deve estar preparado para ele. Quanto maior for esse problema mais importante torna-se a prototipação.
  • Desentendimento entre usuários de mesmo nível, subordinados e chefes. Infelizmente, isso coloca o analista de sistemas no papel de mediador entre as partes em desentendimento. Como analista, não pode abdicar desse papel; não pode dizer: Quando vocês decidirem o que querem e entrarem em um acordo, procurem-me. Em vez disso, deve-se agir como um negociador conduzindo todos os interessados a uma sala e trabalhando com eles na tentativa de chegar a um consenso. Isso, infelizmente, envolve habilidades e procedimentos fora do escopo deste texto.
  • Descobrir disparidades entre o padrão oficial e a pratica do trabalho. Durante as entrevistas, o analista descobre que podem existir algumas disparidades entre a versão oficial de como o sistema funciona e como realmente ocorre no nível operacional. Neste caso, o analista deve utilizar a diplomacia quando relatar estas discrepâncias para a gerência, pois o pessoal de nível operacional pode relutar em admitir que as operações nem sempre seguem os padrões oficiais de trabalho.

2.7 Formas Alternativas de Coleta de Dados

As entrevistas não são o único modo de coleta de informações sobre os requisitos de um sistema. Na realidade, quanto mais informações puder colher de outras fontes, mais produtivas poderão ser as entrevistas pessoais. Alternativas para as entrevistas:

  • Questionários. Pode remeter questionários escritos para os usuários dentro da organização, para as pessoas (ou setores) que interagem com o sistema, para os diretores que aprovaram o projeto e para outros.
  • Demonstrações feitas pelos fornecedores. Os fornecedores de hardware e os fornecedores de software podem já haver desenvolvido sistemas prontos para a aplicação em que você esteja interessado. Solicitando-lhes uma demonstração dos recursos desses sistemas pode não somente auxiliá-lo a decidir se o produto é uma boa solução, mas também revelar funções e dados armazenados que você pode não ter percebido.
  • Visitas a outras instalações. Procure outras empresas que estejam no mesmo ramo de atividades ou que tenham sistemas semelhantes aquele em que você esteja trabalhando. Combine uma visita à instalação para obter informações diretas sobre as características e aptidões do sistema.
  • Coleta de dados. Procure formulários, relatórios, manuais, procedimentos escritos, registros, imagens de tela de terminais e listagens de programas que já existam na organização usuária. Lembre-se, todavia, que esses recursos normalmente estão relacionados com a implementação atual do sistema; devemos lembrar que isto costuma incluir informações redundantes e/ou contraditórias e/ou obsoletas. Não obstante, isto muitas vezes é um bom ponto de partida para você familiarizar-se com o terreno antes de iniciar as entrevistas pessoais com o usuário.
  • Pesquisa externa. Se você estiver construindo um sistema para uma nova aplicação, para a qual o usuário não dispõe de qualquer experiência para descrever os requisitos, talvez seja necessário tentar obter informações em sociedades profissionais, ou em periódicos e livros técnicos e em relatórios de pesquisas.