Notas de Aula 02: Processos de Desenvolvimento de Software



Documentos relacionados
Engenharia de Software II

Pós Graduação Engenharia de Software

Projeto de Sistemas I

PROFESSOR: CRISTIANO MARIOTTI

Sistemas de Informação I

Engenharia de Software

REVISÃO ENGENHARIA DO SOFTWARE. Isac Aguiar isacaguiar.com.br

Metodologias de Desenvolvimento de Sistemas. Analise de Sistemas I UNIPAC Rodrigo Videschi

Processos de Desenvolvimento de Software

DSI é o processo cujo objetivo é introduzir mudanças num sistema de informação, com objetivo de melhorar o seu desempenho.

Modelo Cascata. Alunos: Bruno Nocera Zanette Pedro Taques

Tópicos em Engenharia de Software (Optativa III) AULA 2. Prof. Andrêza Leite (81 )

! Introdução. " Motivação para Processos de Software. ! Processo Unificado (USDP) " Definições " RUP x USDP " Características do Processo Unificado

Engenharia de Software. Apostila I >>> Introdução à ES - HEngholmJr

Engenharia de Software. Parte I. Introdução. Metodologias para o Desenvolvimento de Sistemas DAS

Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini prof.andre.luis.belini@gmail.com /

PROCESSO DE DESENVOLVIMENTO DE SOFTWARE. Modelos de Processo de Desenvolvimento de Software

Engenharia de Software: conceitos e aplicações. Prof. Tiago Eugenio de Melo, MSc tiagodemelo@gmail.com

AUTOR: DAVID DE MIRANDA RODRIGUES CONTATO: CURSO FIC DE PROGRAMADOR WEB VERSÃO: 1.0

Extração de Requisitos

1. Desenvolver o software iterativamente. Um pouco de reflexão: Acabou aí? 31/08/2010

Requisitos de Software. Teresa Maciel DEINFO/UFRPE

Desenvolvimento de Soluções de e-business. Objetivos do Capítulo

Professor: Curso: Disciplina:

Na medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia.

Introdução à Engenharia de. Software. Introdução à Engenharia de. Software. O que é a Engenharia de Software? Software

Princípios da Engenharia de Software Aula 02. Prof.: Franklin M. Correia

Engenharia de Requisitos

O Rational Unified Process (RUP) é um processo de desenvolvimento de software inspirado no

MÓDULO 9 METODOLOGIAS DE DESENVOLVIMENTO DE SISTEMAS

04/08/2012 MODELAGEM DE DADOS. PROF. RAFAEL DIAS RIBEIRO, MODELAGEM DE DADOS. Aula 2. Prof. Rafael Dias Ribeiro. M.Sc.

Prova de Conhecimento para Consultores de Implementação MPS.BR INSTRUÇÕES

AULA 1 INTRODUÇÃO - ENGENHARIA DE SOFTWARE. Prof. Msc. Hélio Esperidião

Modelo Cascata ou Clássico

Processos de Desenvolvimento de Software. Ricardo Argenton Ramos UNIVASF Engenharia de Software I Aula 3

GUIA DE CURSO. Tecnologia em Sistemas de Informação. Tecnologia em Desenvolvimento Web. Tecnologia em Análise e Desenvolvimento de Sistemas

O modelo unificado de processo. O Rational Unified Process, RUP.

Engenharia de Software

Gerenciamento de Projetos Modulo II Ciclo de Vida e Organização do Projeto

Planejamento Iterativo

Referências internas são os artefatos usados para ajudar na elaboração do PT tais como:

Engenharia de Software Processo de Desenvolvimento de Software

A Disciplina Gerência de Projetos

PROJETO DE FÁBRICA DE SOFTWARE

Introdução à Engenharia de Software

ENGENHARIA DE SOFTWARE I

Tipos de teste de software

Roteiro para a escrita do documento de Especificação de Requisitos de Software (ERS)

Tecnologias Atuais de. Desenvolvimento de Software

Engenharia de Software

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

FACULDADE DE ENGENHARIA DE COMPUTAÇÃO. PROJETO FINAL I e II PLANO DE TRABALHO <NOME DO TRABALHO> <Nome do Aluno> <Nome do Orientador>

ENG1000 Introdução à Engenharia

Fundamentos de Engenharia de Software Professor Rafael Escalfoni

rosefib.webnode.com.br

Interface Homem-Computador

Governança de TI. ITIL v.2&3. parte 1

ARCO - Associação Recreativa dos Correios. Sistema para Gerenciamento de Associações Recreativas Plano de Desenvolvimento de Software Versão <1.

UNIDADE 4. Introdução à Metodologia de Desenvolvimento de Sistemas

Requisitos de Software

Manutenção e Ferramentas CASE. Marcos L. Chaim Segundo Bimestre 2003 Mestrado Profissional IC/Unicamp

UNIVERSIDADE FEDERAL RURAL DE PERNAMBUCO DEPARTAMENTO DE ESTATÍSTICA E INFORMÁTICA BACHARELADO EM SISTEMAS DE INFORMAÇÃO RAPID APPLICATION DEVELOPMENT

Auditoria e Qualidade de Software ISO/IEC 9126 Engenharia de Software Qualidade de Produto

Engenharia de Software e Gerência de Projetos Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios

Termo de Abertura Sistema de Vendas de Pizzas Online (PizzaWeb) - Versão 1.0

Universidade Federal de Goiás UFG Campus Catalão CAC Departamento de Engenharia de Produção. Sistemas ERP. PCP 3 - Professor Muris Lage Junior

Tecnologia e Sistemas de Informações

PRODUTOS RIOSOFT COM SUBSÍDIO SEBRAEtec

Universidade Paulista

UNEMAT SISTEMA DE INFORMAÇÃO (SI) Professora: Priscila Pelegrini

Metodologia e Gerenciamento do Projeto na Fábrica de Software

Ciclo de Vida Clássico ou Convencional CICLOS DE VIDA DE DESENVOLVIMENTO DE SISTEMAS. Ciclo de Vida Clássico ou Convencional. Enfoque Incremental

Aplicando Avaliações de Contextualização em Processos de Software Alinhados ao nível F do MR-MPS V1.2

MODELAGEM DE DADOS MODELAGEM DE DADOS. rafaeldiasribeiro.com.br. Aula 3. Prof. Rafael Dias Ribeiro.

! Software e Engenharia de Software! Engenharia de Software e Programação! Histórico. " Crise do Software

Faculdade Pitágoras. Engenharia de Software. Prof.: Julio Cesar da Silva.

Gerenciamento de Projeto

Introdução à Computação

UNIVERSIDADE DO ESTADO DE SANTA CATARINA - UDESC DCC Departamento de Ciência da Computação Joinville-SC

Resumo do BABok 2.0 O Guia de Referência de Análise de Negócio Curso de Analista de Negócio 3.0

Dicionário da EAP - Software FarmaInfor

Objetivos. Processos de Software. Tópicos abordados. O processo de software. Modelos genéricos de modelos de processo de software.

Requisitos. Sistemas de Informações

DISCIPLINA ENGENHARIA DE SOFTWARE Aula 03 Desenvolvimento Ágil Modelos Ágeis. Profª Esp.: Maysa de Moura Gonzaga

Fundamentos em Teste de Software. Vinicius V. Pessoni

PROCESSOS DE DESENVOLVIMENTO DE SOFTWARE 1. VISÃO GERAL 1.1. PROCESSOS EM GERAL

Engenharia de Software

Universidade Federal do Espírito Santo Centro Tecnológico Departamento de Informática Programa de Pós-Graduação em Informática

Requisitos. Professor Gabriel Baptista ( gabriel.baptista@uninove.br ) ( )

GESTÃO E OTIMIZAÇÃO DE PROCESSOS. Vanice Ferreira

Capítulo 2. Processos de Software Pearson Prentice Hall. Todos os direitos reservados. slide 1

Gerenciamento de projetos.

ATIVIDADES PRÁTICAS SUPERVISIONADAS

Transcrição:

Notas de Aula 02: Processos de Desenvolvimento de Software Objetivos da aula: Introduzir os conceitos de um processo de desenvolvimento de software Definir os processos básicos Apresentar as vantagens e desvantagens no uso das abordagens existentes Recordando... Na aula passada, você aprendeu sobre os conceitos mais elementares sobre modelagem. Aprendeu que a modelagem é uma estratégia a ser seguida para o desenvolvimento de um software. No entanto, um modelo por si só não afeta ordem de execução das tarefas a serem cumpridas. Esta disciplina não se trata dos processos, mas sim das ferramentas de modelagem. No entanto, é importante contextualizar-se com todo o mecanismo de um grande projeto de. Introdução Até agora, discutimos sobre o que é um modelo. Ao tocarmos pela primeira vez sobre o assunto, não conseguimos imaginar as diversas granularidades na qual um modelo pode ser aplicado. O exemplo da construção da casa da nota de aula anterior nos fazia refletir sobre a importância da criação de modelos que refletissem as características da realidade na qual estamos tentando entender ou da solução que estamos tentando propor. Contudo, o processo de criação de software envolve mais do que criar um modelo sobre o domínio (problema) ou o modelo de projeto de software (solução). O modo como se lida com as tarefas pertinentes a criação do software, no que tange a sequência de execução, a administração de tempo e de recursos são igualmente importantes. A maneira com o processo de criação ocorre varia de acordo com a abordagem utilizada. A escolha da abordagem depende do domínio de problemas no qual estamos trabalhando, da cultura interna da organização, dos recursos humanos e das ferramentas de suporte que dispomos atualmente.

Independentemente do processo adotado, a criação de s começa pela identificação das necessidades. E é sobre este assunto que versa o próximo tópico. Para desenvolver um, temos que entendê-lo primeiro. Desenvolver software, não significa, necessariamente, entender completamente o domínio ao qual o software se propõe a ser utilizado. Entretanto, como já mencionado anteriormente, compreender as partes relevantes de um domínio pode fazer com que seu modelo possua escabilidade, capacidade de reutilização e manutenibilidade aumentada. O entendimento de um domínio começa a aparecer por meios tácitos (conversas com especialistas, experiências adquiridas em tarefas anteriores, etc..) e meios explícitos (livros, manuais de referência, questionários, etc.). Nas nossas aulas, não temos à disposição uma vasta biblioteca de conhecimento sobre assuntos de domínios de terceiros (não sabemos muito sobre o funcionamento de uma usina nuclear, certo?). Assim, os nossos estudos de caso refletirão um domínio e todo o conhecimento necessário para construção do. Do domínio que estivermos tentando modelar, deveremos identificar os requisitos de um. Um requisito é aquilo é de suma importância constar como tarefa a ser desenvolvida no projeto. Identificar os requisitos pertinentes ao domínio é uma tarefa (por vezes ingrata) do analista de s. Muitas vezes, essa tarefa é desempenhada por uma analista de negócios. Mas essa é conversa para outra disciplina. Os requisitos de podem ser agrupados como requisitos funcionais e como requisitos não-funcionais. Os requisitos funcionais englobam aqueles requisitos que independem da implementação ou tecnologia utilizada. Requisitos funcionais, como a própria palavra sugere, se refere às funcionalidades do. Dada certa entrada no, um requisito funcional descreve qual a resposta que o deve fornecer ou o que deve ser feito. São exemplos de requisitos funcionais: - Cadastrar os clientes e os funcionários de uma empresa; - Gerar a folha de pagamento.

Já os requisitos não-funcionais englobam aqueles requisitos que se referem à confiabilidade do, o tempo de resposta, a tolerância à falha, etc.. Dada certa entrada no, um requisito não funcional descreve que parâmetros computacionais devem ser atendidos. São exemplos de requisitos nãofuncionais: - O banco de dados deve possuir níveis de segurança de acesso; - Os módulos de terceiros devem ser de código aberto (open-source). Podemos encontrar na literatura um vasto conjunto de processos de desenvolvimento propostos. No entanto, iremos discutir apenas aqueles mais conhecidos. Além disso, para explicar de uma maneira genérica as etapas de criação do software, tome como base as seguintes fases: Fase de Análise esta fase se refere ao entendimento do domínio, o levantamento de requisitos do, a criação do cronograma e a gerência de custos. Fase de Projeto esta fase se refere à criação da arquitetura do software. Entre outras tarefas, fazem parte da fase de projeto: explicitar como o será dividido entre os módulos, definir a maneira como se dá a interação entre estes módulos, quais as tecnologias e padrões a serem aplicados, quais módulos podem ser reaproveitados de terceiros, etc. Fase de Implementação nesta fase, os programadores codificam o projeto de software definido. Em muitos processos, esta fase engloba uma fase concomitante de testes. Fase de teste nesta fase os requisitos apresentados são testados pelos programadores (testes alfa) e pelos usuários do (testes beta). Fase de entrega os clientes homologam o produzido através do resultado dos testes. Os s são então instalados no ambiente do cliente. Processo em cascata Originalmente encontrado em processos de criação de hardware, o processo cascata é mencionado pela primeira vez por Royce [1] em 1970, cuja proposta se baseava no cumprimento sequencial de fases (figura 1).

Análise Projeto Implementação Teste Entrega Figura 1: processo em cascata Segundo Pfleeger [2], o processo em cascata é muito útil para uma descrição simples de s, cujas tarefas a serem feitas são expressas de forma clara e concisa. Para clientes não acostumados com produtos de software, o processso em cascata ajuda ainda a ilustrar todas as etapas até a entrega do produto. Já Pressman [3], ressalta que o processo cascata é muito útil para s completamente compreendidos e de conhecimentos estáticos. Podemos encontrar na literatura muita controvérsia a respeito da utilidade prática do processo em cascata. O principal argumento encontrado diz respeito à incapacidade de reação frente às mudanças nos requisitos, o que na prática é o que mais ocorre. Pressman [3] coloca ainda que o processo em cascata pode atrasar desastrosamente a entrega do produto caso alguma falha seja encontrada tardiamente. Pfleeger [2] explica que o software é um resultado de criação e não de fabricação. A evolução do software se dá conforme os problemas são melhores entendidos e as possíveis soluções são avaliadas. Processo iterativo e o processo incremental Dada a não linearidade na construção de s, os processos subsequentes ao processo de cascata procuram ser mais realistas, criando versões ao longo do tempo de um mesmo produto. Tanto o processo iterativo quanto o processo incremental são uma evolução do processo em cascata, cujo diferencial está na aplicação repetitiva. A natureza cíclica destes processsos gera uma nova versão a cada repetição. Algumas das vantagens desta abordagem estão na possibilidade de treinamento de usuários desde as primeiras versões, a correção contínua de defeitos e a adição de recursos anteriormente não previstos.

Análise Entrega Projeto Teste Implementação Figura 2: processo iterativo e incremental O objetivo do processo iterativo consiste na entrega de todas as funcionalidades (degradadas) do desde o princípio, melhorando cada funcionalidade a cada iteração do ciclo de vida do, isto é, a cada nova versão. Já o processo incremental visa a entrega sistemática de uma parte das funcionalidades (totalmente operativas) do. A cada ciclo de vida, o processo incremental gerará uma nova versão que permitirá o cliente utilizar e validar uma parte dos requisitos especificados. Imagine o desenvolvimento de um software para administração escolar em duas versões. Imagine, ainda, que este software possui dois módulos: o cadastro de professores e o cadastro de disciplinas. O módulo de professores tem que cadastrar, além dos dados do professor, as disciplinas que o professor irá ministrar. Já o cadastro de aulas consiste na administração do nome da disciplina e de seus horários. Em um processo iterativo, tanto o cadastro de professores quanto o cadastro de aulas já estariam disponíveis desde o começo. Contudo, em uma avaliação preliminar da primeira versão, a associação entre os professores e as disciplinas ministradas carece de um aperfeiçoamento, uma vez que a redundância não foi tratada. Na segunda versão o será entregue com todos os requisitos implementados e aperfeiçoados. Diferentemente de um processo iterativo, em um processo incremental somente o cadastro de professores estaria disponível, mas em um nível de maturidade maior (mais confiável). Somente na segunda versão é que o cadastro de aulas estaria disponível para uso. A figura 3 demonstra as diferenças de abordagem:

Desenvolvimento iterativo Modelo Versão 1 Versão 2 Desenvolvimento incremental Modelo Versão 1 Versão 2 Figura 3: Diferença entre o processo iterativo e incremental. Adaptado de Pfleeger[2]. Processo por prototipagem O processo por prototipagem consiste em uma definição de objetivos gerais, a construção de protótipos e na adição de funcionalidades de forma adhoc. Os processos por prototipagem buscam em geral fazer prova de conceitos, apresentação de requisitos ou mesmo compreensão do domínio - é a política da validação iterativa. Nesta abordagem, algumas telas ou módulos são construídos e apresentados ao cliente continuamente, sem um documento formal de requisitos. Na verdade, as fases de análise e projeto caminham concomitantemente. O processo de prototipação não é normalmente utilizado de forma separada. O seu uso é comumente associado a outros processos, precisamente durante a fase de análise. Processo em Espiral Proposto por Boehm [4], o processo em espiral é um processo evolucionário cujo diferencial está na inclusão da análise de risco por mecanismos de prototipagem. O processo em espiral combina a capacidade de abstração do processo em cascata com a capacidade de explicitação e controle de risco do processo por prototipação.

O grande problema do processo em espiral está na sua complexidade, pois gerenciar os riscos a cada iteração é dispendioso em termos de tempo e custo. Figura 4: o processo espiral. Adaptado de Royce [1] A autora Pfleeger [2] explica que o processo em espiral começa com o levantamento dos objetivos gerais, o projeto inicial de desenvolvimento, os orçamentos, os cronogramas, os ambientes e as soluções possíveis. A cada iteração deste processo são levantadas as alternativas, as restrições e os riscos pertinentes as tarefas a serem executadas. Um artefato é gerado a cada iteração, o que não necessariamente se materializa com um software de computador. No processo em espiral, um é entregue somente na última iteração, mas é validado continuamente ao longo da criação. O produto da primeira iteração é a concepção das operações, um documento que se refere aos objetivos gerais do a ser construído. O produto da segunda iteração é o documento de requisitos, que procura assegurar em sua a completude as necessidades do cliente. O produto da terceira iteração é o projeto de software. A quarta iteração consiste em um plano de testes e na codificação do projeto de software. Podemos afirmar que a quarta iteração é a transcrição do processo clássico em cascata.

Exercícios 1. Pesquise e descreva o conceito por trás dos processos ágeis, seu histórico, vantagens e desvantagens. 2. Escolha um processo ágil (Xtreme Programing, Scrum, etc.) e trace um comparativo com o Processo Iterativo/Incremental. 3. Dê a sua opinião sobre a relação entre a cultura de uma organização e adoção de processo de criação. 4. Foi afirmado que o processo em cascata é útil para conhecimentos estáticos. Por que não podemos considerar um software, que deverá refletir um modelo de negócio, como estático? 5. Por que a dinamicidade afeta custos e cronograma de um desenvolvimento de software? 6. Explique, com as suas palavras, a diferença entre um requisito funcional e um requisito não-funcional 7. Por que um requisito funcional implica em um risco no processo espiral, uma vez que naturalmente este deverá ser concebido em algum momento?

Referências [1] W. W. Royce, Managing the development of large software systems: concepts and techniques. In: proceeding of Wescon, Agosto de 1970. [2] S. L. Pfleeger, Engenharia de Software: Teoria e Prática, Prentice Hall, 2004. [3] R. S. Pressman, Engenharia de Software (Sexta edição), McGraw-Hill, 2004. [4] B.W. Boehm, A Spiral Model of Software Development and Enhancement, Computer, vol. 21, 1988, pp. 61-72.