Engenharia de Software I Fundamentos da Engenharia de Software Modelos de desenvolvimento Importância do software Importância do Software Qualidade é fundamental Consequências de erros no software podem ser catastróficas Exemplo: Queda do foguete Ariane 5 em Junho de 1996 Eficiência Principal causa do fracasso no desenvolvimento de software é a não utilização de metodologias eficientes para a produção Solução está na formação de profissionais especializados em metodologias, técnicas e ferramentas da Engenharia de Software Principais problemas encontrados raramente é dedicado tempo para coletar dados sobre o processo de desenvolvimento, devido à pouca quantidade deste tipo de informação tentativas em estimar a duração/custo de produção de um software têm conduzido a resultados bastante insatisfatórios a falta destas informações impede uma avaliação eficiente das técnicas e metodologias empregadas no desenvolvimento Principais problemas encontrados os projetos de desenvolvimento são baseados em informações vagas sobre as necessidades e desejos do cliente problema de comunicação entre cliente e fornecedor. A insatisfação do cliente com o sistema "concluído" é devido a este fato falta de experiência dos profissionais na condução de projetos de software; Principais problemas encontrados falta de experiência dos profissionais na condução de projetos de software; falta de treinamento no uso de técnicas e métodos formais para o desenvolvimento de software; a incrível "resistência" às mudanças que os profissionais normalmente apresentam 1
Programa x Software Programa usuário é o próprio autor documentação pequena ou inexistente preocupação com a existência de erros de execução não é um fator maior outras boas características não são objeto de preocupação: portabilidade; flexibilidade; possibilidade de reutilização. Programa x Software Software desenvolvido para ser utilizado por um número maior de pessoas (sob demanda ou de prateleira ) deve apresentar características tais como: correção interface amigável robustez portabilidade flexibilidade possibilidade de reutilização Custos de Engenharia de Software Não é uma resposta simples. Depende do processo e do tipo de software que está sendo desenvolvido. Existem várias abordagens de desenvolvimento, e cada uma possui um perfil diferente de distribuição de custos. Custos Por que é tão caro? Projetos de grandes sistemas de software: envolvem grandes número de pessoas prazos relativamente longos de desenvolvimento Desenvolvimento destes sistemas: é realizado de forma ad-hoc conduzindo a frequentes desrespeitos de cronogramas e acréscimos de custos de desenvolvimento 9 Desafios da Engenharia de Software Desafios da Engenharia de Software O Desafio da heterogeneidade Operar em sistemas distribuídos, através de redes com diferentes tipos de computadores com diferentes tipos de sistemas operacionais; A integração de um novo software com outro mais antigo e escrito em diferentes linguagens de programação. Missão: temos a tarefa de desenvolver técnicas para construção de softwares confiáveis e flexíveis para adaptar-se a essa heterogeneidade. O Desafio da Entrega Algumas técnicas de desenvolvimento demandam tempo Ambientes de negócio de hoje devem apresentar respostas ágeis e mudar rapidamente O software de apoio deve acompanhar a velocidade da mudança. Missão: Diminuir o tempo de entrega dos sistemas grandes e complexos, sem comprometer sua qualidade. 11 12 2
Desafios da Engenharia de Software O Desafio da Confiança O software esta relacionado com os aspectos de nossa vida, é essencial que possamos confiar neles Em sistemas remotos acessados através de páginas da Web isso é especialmente verdadeiro Missão: Desenvolver técnicas que demonstrem que o software pode ter a confiança de teus usuários. Responsabilidade Profissional e Ética Devemos nos comportar de forma responsável ética e moralmente, para seremos respeitados como profissionais. Defender padrões de honestidade e integridade. Alguns itens de responsabilidade profissional: Confidencialidade: respeitar a confidencialidade de seus funcionários e clientes, dependente de ter ou não assinado acordo. Competência: você não deve aceitar um trabalho que esteja fora de sua competência. Direitos sobre propriedade intelectual: estar ciente das leis locais que regem uso de propriedade intelectual como patentes e direitos autorais. Mau uso de computador: mau uso do computador de outros, desde o trivial como de execução de jogos nas maquinas da empresa ou sério como disseminação de vírus. 13 14 Processo de Software O que é processo de software? É um conjunto de atividades e resultados associados que geram um produto de software Um roteiro que o ajuda a criar a tempo um resultado de alta qualidade Esse roteiro a ser seguido é chamado de processo de software Esse processo é composto por atividades 4 fundamentais: - Especificação - Desenvolvimento -Validação -Evolução do Software 15 Modelos de desenvolvimento de sw Define as etapas relativas ao desenvolvimento do software com intuito de atingir o produto de software com qualidade e custos reduzidos Modelo é uma descrição simplificada, uma abstração dessa abordagem Modelo Modelo de Ciclo de Vida de um processo: representa uma abordagem específica de desenvolvimento de software baseada no relacionamento entre etapas e atividades de um processo. Ciclo de Vida: tempo de vida de um software, com início na decisão de sua construção até o momento de sua desativação completa. Um modelo de processo de software deve ser escolhido com base: Na natureza do projeto e da aplicação; Nos métodos e ferramentas a serem utilizados; Nos controles e produtos que precisam ser entregues; Também conhecido como ciclo de vida clássico ou Modelo Cascata: Modelo mais antigo e mais usado; Modelado em função do ciclo de engenharia convencional; Requer uma abordagem sistemática e seqüencial para o desenvolvimento de um software; 3
Muitos aplicam esse modelo de forma estritamente linear: Engenharia de Sistemas / Informação Mas o modelo original prevê a volta: Engenharia de Sistemas Análise de Requisitos Projeto Codificação Testes Manutenção Problemas: Projetos reais raramente seguem o fluxo de sequencial proposto; É difícil estabelecer todos os requisitos no começo do projeto na qual existe uma incerteza natural quanto a esses requisitos; Uma versão do software só vai ficar pronto em um ponto tardio do desenvolvimento; Assim se houver algum erro crasso não detectado na análise ou projeto o resultado pode ser desastroso; Há muitos estágios bloqueantes que permitem a ociosidade dos desenvolvedores em alguns momentos processo que possibilita que o desenvolvedor crie um modelo do software que deve ser construído. idealmente, o modelo () serve como um mecanismo para identificar os requisitos de software. apropriado para quando o cliente definiu um conjunto de objetivos gerais para o software, mas não identificou requisitos de entrada, processamento e saída com detalhes. início fim construção produto obtenção dos requisitos projeto rápido ouça o cliente construa/revise refinamento avaliação construção teste do pelo cliente 4
Problemas: cliente não sabe que o software que ele vê, não considerou, durante o desenvolvimento, a qualidade global e a manutenibilidade a longo prazo. Não aceita bem a ideia de que a versão final do software vai ser construída e "força" a utilização do como produto final; Desenvolvedor frequentemente faz uma implementação comprometida (utilizando o que está disponível) com o objetivo de produzir rapidamente um. Depois de um tempo ele se familiariza com essas escolhas, e esquece que elas não são apropriadas para o produto final; Modelo Incremental Ao invés de entregar o sistema uma única vez, o desenvolvimento e a entrega são partidos em incrementos, que fornecem parte das funcionalidades requeridas. Os requisitos do usuários são dispostos hierarquicamente, e os requisitos de prioridades mais altas são incluídos nas primeiras entregas. Quando o desenvolvimento de um incremento é iniciado, os requisitos são congelados de forma que os requisitos para incrementos posteriores possam continuar a evoluir. Modelo Incremental incremento 1 produto liberado do incremento 1 incremento 2 produto liberado do incremento 2 incremento 3 produto liberado do incremento 3 incremento 4 tempo produto liberado do incremento 4 Conclusão ENGENHARIA DE SOFTWARE pode ser vista como uma abordagem de desenvolvimento de software elaborada com disciplina e métodos bem definidos. Objetivo Principal Produzir software de alta qualidade e de baixo custo. 29 Referências Engenharia de Software. Sommerville, I. Ed. Pearson Addison Wesley. Engenharia de Software. Pressman, R. Ed. McGraw Hill Engenharia de Software Teoria e Prática. Pfleeger, L.S. Ed. Pearson Engenharia de Software. Fundamentos, Métodos e Padrões. Pádua, W. Ed. LTC 30 5
Exercícios 1. Explique os conceitos de Engenharia de Software, seus fundamentos, aplicações e importância. 2. Diferencie programa de software. 3. Qual a importância do planejamento e documentação de um software? 4. Realize uma pesquisa comentando sobre as classificações de sistemas, tendo como obrigatórios: tempo real, inteligência artificial, comercial, embutido. 5. Um dos grandes problemas encontrados no desenvolvimento de software são os custos elevados. Quais os motivos que levam a esse problema? 6. Quais os principais problemas que encontramos em um software? 7. Conceitue: Método Técnica Tecnologia Ferramenta Paradigma Artefato 8. O que é um processo de Software? Qual sua aplicação? 9. Cite dois modelos de desenvolvimento de software e faça uma breve descrição de cada. 6