Introdução
Engenharia de SoftwareEngenharia de Software
Introdução
Engenharia de Software é a criação e a utilização de sólidos princípios de engenharia a fim de obter software de maneira econômica, que seja confiável e que trabalhe em máquinas reais.
Engenharia de Software
O termo Engenharia de Software surgiu ao final da década de 60, em meio a uma crise no desenvolvimento de software.
Nesta época, o interesse por métodos padronizados a serem usados no local de trabalho com o intuito de criar aplicações de qualidade, já haviam se tornado um interesse importante para muitas organizações.
Engenharia de Software
Então, ainda nos anos 60, ocorreram duas importantes conferências - onde originou-se o termo Engenharia de Software - realizadas em reconhecimento à esta crise que estava ocorrendo.
Foi uma reação a fracassos de projeto; perdas econômicas;
atrasos na entrega; mercados competitivos; e uma
exigência crescente para funcionalidade, qualidade, e confiabilidade com menor custo possível (DEEK et al, 2005).
Engenharia de Software
Mas por que usaram o termo Engenharia de
Software?
O termo Engenharia foi usado
justamente para associar o "conceito" Engenharia
ao desenvolvimento de software, em outras palavras é ter uma abordagem sistemática,
disciplinada e quantificada ao
desenvolvimento, operação e manutenção de software
O que é Engenharia?
Segundo ASEE (2000), a engenharia é aplicação de princípios matemáticos e científicos, experiência, julgamento e bom senso para trazer coisas que beneficiam as pessoas.
A Engenharia de Software segue este mesmo raciocínio, tendo como objetivo definir e exercitar processos, métodos, ferramentas e ambientes para construção de software que satisfaça necessidades de cliente e usuário dentro de prazos e custos previsíveis.
Engenharia de Software
A Engenharia de Software propõe estratégias de desenvolvimento, chamadas modelos de ciclo de vida de desenvolvimento de software ou modelos de processo.
Estes modelos de ciclo de vida, como o nome diz, ajudam o desenvolvimento do início ao fim do projeto.
Engenharia de Software - Objetivos
• A engenharia de software tem por objetivos a aplicação de teoria, modelos, formalismos e técnicas e ferramentas da ciência da
computação e áreas afins para o desenvolvimento sistemático de software.
• Associado ao desenvolvimento, é preciso também aplicar
métodos, técnicas e ferramentas para o gerenciamento do processo de desenvolvimento.
• Finalmente, a engenharia de software visa a produção da
documentação formal do software, do processo de desenvolvimento
e do gerenciamento destinada a comunicação entre os membros da equipe de desenvolvimento bem como aos usuários finais.
Software
O mundo precisa de software. - Steve Jobs
Programas de computador e
documentação associada, tais como requisitos, modelos de projetos e
manuais de usuário. - Ian Sommerville
Programas de computador que, quando executados, produzem a função e o desempenho desejados.
Panorama sobre Software
• O que é? Software de computador é o produto que os profissionais de software constroem, e depois, mantêm ao longo do tempo. Abrange
programas que executam em computadores de qualquer tamanho e
arquitetura, conteúdo que é apresentado ao programa a ser executado e documentos tanto em forma impressa quanto virtual, que combinam
todas as formas de mídia eletrônica;
• Quem faz? Engenheiros de software constroem e mantêm, e
praticamente, todas as pessoas do mundo industrializado usam direta ou indiretamente;
• Por que é importante? Porque afeta praticamente todos os aspectos de nossas vidas e tornou-se difundido no nosso comércio, na nossa cultura e nas nossas atividades do dia-a-dia;
Panorama sobre Software
• Quais são os passos? Você constrói software de computadores
como constrói qualquer produto bem-sucedido, aplicando um processo ágil e adaptável que leva a um resultado de alta
qualidade e que satisfaz às necessidades das pessoas que vão usar o produto. Você aplica uma abordagem de engenharia de software;
• Qual é o produto do trabalho? Do ponto de vista do engenheiro
de software, o produto do trabalho são os programas, o conteúdo (os dados) e documentos que compõe um software de
computador. Mas, do ponto de vista do usuário, o produto do trabalho é a informação resultante que, de algum modo, torna melhor o mundo do usuário.
Produto de Software
O produto de software é o produto que os engenheiros de software projetam e constroem.
Ele engloba os programas que são executados dentro de um computador de qualquer tamanho e arquitetura, os documentos, que englobam formulários virtuais e material impresso produzido por computador, e dados, que combinam números e texto, mas também incluem representações de informações em áudio, vídeo e pictóricas.
Produto de Software
O produto de software é composto de (Pressman, 2002):
1. as instruções (os programas de computador) que quando executados fornecem a função e desempenho desejados; 2. as estruturas de dados que permitem aos programas
manipular as informações de forma adequada;
3. os documentos que descrevem a operação e uso dos programas.
Produto de Software
O produto de software é o componente lógico de um sistema informatizado, e não físico. São produzidos pelo processo e pelas suas atividades e servem de matéria-prima para os mesmos. Por exemplo: documento de requisitos, programa executável.
O produto de software distribui o que muitos acreditam ser o mais importante produto de século XXI - a informação (Pressman, 2002).
Evolução do Software
Evolução do Software
Os primeiros anos (1950 - 1965) • Distribuição limitada; • Software personalizado; • Sem documentação; • Sistemas Batch;• Na época muito se sabia sobre a implementação de
sistemas baseados em computador, mas sabia-se pouco sobre engenharia de sistemas de computador.
Evolução do Software
Segunda Era (1960 - 1976)
• Multi usuários;
• Sistemas Interativos;
• Software Houses (o software era desenvolvido para ampla
distribuição no mercado);
• Manutenção;
• Banco de dados; • Tempo real;
Evolução do Software
Terceira Era (1975- 1985)
• Comunicações digitais de largura de banda; • Redes globais e locais;
• Inteligência embutida; • Sistemas distribuídos;
• Hardware de baixo custo; • Impacto de consumo;
• Crescente demanda de acesso instantâneo;
• Deslocamento de custo do hardware para software; • Ferramentas CASE;
Evolução do Software
Quarta Era (1985 - 2000)
• Redes Neurais Artificiais; • Computação Paralela;
• Sistemas de desktop poderosos; • Tecnologia Orientada a Objeto; • Sistemas Especialistas;
• Sistemas Hipermídia;
Evolução do Software
Quinta Era (2000 - …) • Robotização pesada; • Realidade virtual; • Computação móvel; • "Explosão" da internet;• Arquiteturas de computação radicalmente diferentes, e seu software correlato exercem um profundo impacto sobre o equilíbrio do poder político e industrial em todo mundo;
• Sociedade da Informação. • Software livre;
Categorias de Software
Software Básico (Software de Sistema)
• Esse software pode ser caracterizado como vários programas reunidos
para dar assistência a outros programas, tanto nos que processam as informações complexas e determinadas, como os que processam
informações amplamente indeterminadas;
• A área do software básico é caracterizada por forte interação com o
hardware de computador, intenso uso por múltiplos usuários,
compartilhamento de recursos e sofisticada administração do processo, estruturas de dados complexas e múltiplas interfaces externas;
• Alguns exemplos: Sistemas operacionais, compiladores, gerenciadores
Categorias de Software
Software Comercial
• É a maior área de aplicação de software;
• Consiste de programas isolados que resolvem uma necessidade
específica do negócio;
• Nesse sistema, a aplicação do software irá atuar no processo de
informações comerciais. Atua nas áreas tanto administrativas
quanto de produção de uma empresa, dando acesso a um ou mais bancos de dados contendo informações comerciais;
• Alguns exemplos: folha de pagamento, controle de estoque,
Categorias de Software
Software Científico e de Engenharia
• Tem sido caracterizado por algoritmos de processamento de números. Atua em
diversos campos de pesquisa dentro da área científica e de engenharia. As novas aplicações estão se afastando dos algoritmos numéricos convencionais. Auxiliado por um computador, ele simula vários sistemas e outros tipos de aplicações.
Software Embutido
• Reside na memória só de leitura de alguns equipamentos e é usado para controlar
produtos e sistemas para os mercados industriais e de consumo. Pode executar
funções muito limitadas e particulares ou oferecer recursos funcionais de controle significativos;
• Alguns exemplos: Teclado para forno de microondas, computador de bordo de um
Categorias de Software
Software para linhas de produto
• Desenvolvido para fornecer uma capacidade específica a ser utilizada pelos mais variados clientes.
Exemplos: editores de texto, planilha eletrônica, calculadora.
Aplicações da Web
• As aplicações de comércio eletrônico e B2B estão crescendo em importância, o que destaca a
relevância das aplicações Web, que estão evoluindo para ambientes computacionais cada vez mais sofisticados e interativos.
Software de Inteligência Artificial
• Faz uso de algoritmos não-numéricos para resolver problemas complexos que não sejam favoráveis à
computação ou à análise direta. A área mais ativa é a dos sistemas especialistas. Outras áreas de aplicação para software de AI são: o reconhecimento de padrão, jogos, demonstração de teoremas.
Um simulador de estrutura dos processos cerebrais, chamado redes neurais artificiais também está se destacando.
Software Legado
Um software legado é um software mais velho, porém que permanece vital para o bom andamento das atividades de uma empresa.
Dado o seu grau de importância, tal sistema, mesmo sendo antigo, continua sendo amplamente utilizado, recebendo manutenções, porém sem ser trocado / migrado. E as novas aquisições de software da empresa precisam ser integradas a este software legado.
Conforme destacou Roger Pressman (2006) um “software legado é caracterizado por longevidade e criticalidade para o negócio”. O mesmo autor ainda destaca o que talvez seja o maior problema deste tipo de software: a má qualidade. “Sistemas legados, algumas vezes, têm projetos não extensíveis,
código complicado, documentação pobre ou inexistente, casos de teste e resultados que nunca foram arquivados, um histórico de modificações mal gerado...”
Porém não pode deixar de ser comentado que, se o software continuar em uso e atendendo as necessidades do cliente então ele não está danificado e não precisa ser consertado.
Custos do Software
Ian Sommerville (2007) destacou o seguinte sobre os custos do software:
• Os custos de software dominam os custos de sistemas computacionais. Em um PC, os custos de
software são frequentemente maiores que o custo do hardware;
• Manter um software custa mais que desenvolvê-lo. Para sistemas com uma longa vida, os custos
de manutenção podem ser muito maiores que os custos de desenvolvimento;
• A engenharia de software dedica-se ao desenvolvimento de software com custos adequados.
O mesmo autor prossegue, identificando os custos do software, apresentando que:
• Aproximadamente 60% dos custos são custos de desenvolvimento e 40% são custos de testes. Para
software sob encomenda, os custos de evolução normalmente excedem os de desenvolvimento;
• Os custos variam, dependendo do tipo de sistema que está sendo desenvolvido e dos requisitos de
atributos de sistema, tais como desempenho e confiabilidade;
Mitos sobre Software
Segundo PRESSMAN, esses são alguns dos mitos do desenvolvimento de software.
• O estabelecimento de objetivos gerais é suficiente para se começar a escrever
programas.
• Dê a uma pessoa técnica um bom livro de programação e você terá um
programador.
• Mudanças no software podem ser feitas facilmente porque ele é "flexível".
• Até que o programa esteja "rodando" não é possível verificarmos a sua qualidade. • Uma vez que o programa esteja escrito e funcionando, nosso trabalho está feito. • Um projeto é bem sucedido se conseguirmos um programa funcionando
Categorias de Software
Categoria Equipe Duração Linhas de Código
Trivial 1 1 - 4/semanas 500
Pequeno 1 1 - 6/meses 1000 a 2000
Médio 2 - 5 1 - 2 anos 5000 a 50 mil
Grande 5 - 20 2 - 3 anos 50 mil a 100 mil
Muito Grande 100 - 200 4 - 5 anos 1 milhão
Extremamente
Processo de Software
Conjunto de atividades eresultados associados que geram um produto de software.
- Sommerville, 2007
Um arcabouço para as tarefas que são necessárias para construir
software de alta qualidade. - Pressman, 2006
Processo de Software
A existência de um processo de software não garante que o software será entregue no prazo, de que ele irá satisfazer as necessidades do cliente, ou exibirá os atributos arquiteturais que manterão as características de qualidade em longo prazo.
Um processo deve ser acoplado a uma sólida prática de engenharia de software e deve ser avaliado para garantir que satisfaça a um conjunto de critérios básicos de processo que demonstram ser essenciais para uma engenharia de software bem sucedida (PRESSMAN, 2006).
Processo de Software
Existem vários processos de desenvolvimento de software, porém algumas atividades fundamentais são comuns a todos eles (SOMMERVILE, 2007):
• Especificação: define a funcionalidade do software e as restrições sobre sua
operação.
• Projeto e implementação: o software que atenda a especificação deve ser
produzido.
• Validação de software: o software deve ser validado para garantir que ela
faça o que o cliente deseja.
• Evolução: o software deve evoluir para atender aos novos requisitos que