Engenharia de Software
Prof. Wilkerson de L. Andrade
Versão resumida e traduzida dos slides originais produzidos por Ian Sommerville, Software Engineering, 7th edition. Chapter 1.
Estes slides foram adaptados dos slides gentilmente cedidos pela professora Patrícia D. L. Machado (DSC/UFCG).
Objetivos
•
Introduzir Engenharia de Software e mostrar
sua importância.
•
Apresentar respostas para questões-chave
em engenharia de software.
•
Introduzir questões éticas e profissionais e
explicar porque precisam ser consideradas
por engenheiros de software.
Engenharia de Software
• As economias de todas as nações desenvolvidas são dependentes de software.
• Cada vez mais sistemas são controlados por software.
• Engenharia de Software baseia-se em teorias, métodos e ferramentas para o desenvolvimento profissional de software.
• Gastos com software representam uma parcela significativa do orçamento de países
Custos de Software
• Custos de software são geralmente dominantes em sistemas. Os custos de software em um PC são
usualmente maiores do que os custos de hardware.
• É mais caro manter um software do que
desenvolvê-lo. Para sistemas com longa vida, custos de manutenção podem ser muitas vezes maiores do que os custos de desenvolvimento.
• Engenharia de Software tem como foco o desenvolvimento de software com custos proporcionais a sua efetividade.
O que é Software?
• Programas de computador e documentação
associada tais como requisitos, modelos de projeto e manuais de uso.
• Produtos de software podem ser desenvolvidos para clientes particulares ou para um mercado mais geral.
• Software pode ser criado a partir do
desenvolvimento de novos programas,
configurando sistemas de software genéricos ou reusando software existente.
O que é Engenharia de Software?
•
Disciplina de engenharia que trata de todos
os aspectos da produção de software.
•
Engenheiros de software devem adotar uma
abordagem sistemática e organizada e usar
ferramentas e técnicas apropriadas
dependendo do problema a ser resolvido,
das restrições de desenvolvimento e dos
recursos disponíveis.
Qual a diferença entre Engenharia de
Software e Ciência da Computação?
• Ciência da Computação trata da teoria e fundamentos.
• Engenharia de software trata das práticas de
desenvolvimento e disponibilização de software.
• Teorias da Ciência da Computação ainda são insuficientes para servir como um alicerce
completo para engenharia de software (diferentemente, por exemplo de demais engenharias).
Qual a diferença entre Engenharia de
Software e Engenharia de Sistemas?
• Engenharia de sistemas trata de todos os aspectos de sistemas baseados em computador, incluindo hardware, software e processos de engenharia.
• Engenharia de software é uma parte deste
processo que trata do desenvolvimento da
infra-estrutura de software, controle, aplicações e bases de dados do sistema.
• Engenheiros de sistemas são responsáveis pela especificação, projeto arquitetural, integração e disponibilização de sistemas.
O que é um Processo de Software?
• Um conjunto de atividades cuja meta é
desenvolvimento ou evolução de software.
• São atividades genéricas em um processo de software:
▫ Especificação - o que o sistema deve fazer quais as
restrições de desenvolvimento;
▫ Desenvolvimento - produção do sistema de software;
▫ Validação - Avaliação do software com relação às
demandas do seu cliente;
▫ Evolução - Modificações no software em resposta a
O que é um Modelo de Processo de
Software?
• Uma representação simplificada de um processo de software, apresentada de acordo com uma
perspectiva específica.
• São exemplos de perspectivas de processo:
▫ Workflow - seqüência de atividades;
▫ Data-flow - fluxo de informação;
▫ Role/action - quem faz o que.
• Modelos genéricos de processo:
▫ Waterfall (Modelo Cascata);
▫ Desenvolvimento iterativo;
Quais são os custos de engenharia de
software?
• Geralmente 60% são custos de desenvolvimento e 40% são custos de teste. Para software de
particulares, os custos de evolução usualmente excedem os custos de desenvolvimento.
• Custos variam de acordo com o tipo de sistema sendo desenvolvido e os requisitos de seus
atributos tais como performance e confiabilidade.
• Custos de distribuição dependem do modelo de desenvolvimento que está sendo usado.
Distribuição de Custos por Atividade
Modelo cascata
Desenvolvimento iterativo
Engenharia de software baseada em componentes
Custos de desenvolvimento e evolução ao longo da vida do software
Evolução do sistema
10 200 30 400 0
Desenvolvimento de sistema
Especificação Projeto Desenvolvimento Integração e teste
25 5 0 75 100 0
Especificação Desenvolvimento Integração e teste
2 5 5 0 75 1 00 0
Especificação Desenvolvimento iterativo Teste de sistema
2 5 5 0 75 1 00 0
Custos de Desenvolvimento do Produto
Especificação Desenvolvimento Teste de sistema
25 50 75 100
O que são Métodos de Engenharia de
Software?
• Abordagens estruturadas para o desenvolvimento de software que incluem modelos de sistemas, notações, regras, dicas de projeto e guias de processo.
• Descrições de modelos
▫ Descrições de modelos gráficos que devem ser produzidos; • Regras
▫ Restrições aplicadas a modelos do sistema; • Recomendações
▫ Sugestões sobre boas práticas de projeto; • Guias de Processo
O que é CASE
(Computer-Aided Software Engineering)
• Sistemas de software que objetivam prover suporte automático para atividades de processo de
software.
• Ferramentas CASE são adotadas para dar suporte a métodos.
• Upper-CASE
▫ Ferramentas de suporte a atividades iniciais do processo como análise e projeto de software;
• Lower-CASE
▫ Ferramentas de suporte a atividades terminais do processo como programação, depuração e teste.
Quais são os Atributos de um
Software de Qualidade?
• O software deve prover a funcionalidade e performance requerida e deve ser manutenível, confiável e aceitável.
• Manutenibilidade
▫ Software deve permitir a incorporação de mudanças; • Confiabilidade
▫ Software deve apresentar comportamento correto e consistente;
• Eficiência
▫ Software não deve fazer mal uso de recursos do sistema; • Aceitabilidade
▫ Software deve ser aceitável por usuários para os quais foi projetado. Isto significa ser entendível, usável e compatível com outros sistemas.
Quais são os maiores desafios da
engenharia de software?
Heterogeneidade • Técnicas de
desenvolvimento que possam lidar com plataformas e ambientes de execução heterogêneos; Entrega • Técnicas de desenvolvimento que possam facilitar a entrega rápida de software; Confiança • Técnicas de desenvolvimento que possam demonstrar sua confiabilidade a usuários.
Responsabilidade Ética e Profissional
•
Engenharia de software envolve mais
responsabilidade do que habilidades para
aplicações de técnicas.
•
Engenheiros de software devem se portar de
forma ética e responsável a fim de serem
respeitados como profissionais.
•
Comportamento ético é mais do que
Responsabilidade Profissional
• Engenheiros devem normalmente respeitar a confidencialidade de seus empregadores ou clientes independente da existência de um contrato assinado de confidencialidade.
Confidencialidade
• Engenheiros devem ser fiéis ao
apresentar seu nível de competência.
Devem aceitar trabalho apenas dentro do escopo de sua própria competência.
Responsabilidade Profissional
• Engenheiros devem estar cientes das leis que governam o uso de propriedade intelectual tais como patentes, copyright, etc. Devem ser
cautelosos a fim de garantir que propriedade intelectual de empregadores e clientes está protegida.
Propriedade
intelectual
• Engenheiros de software não devem usar habilidades técnicas para mal uso de
computadores de terceiros. Mal uso varia de trivial (jogos na máquina do empregador) a extremamente sérios (disseminação de vírus).
Uso de
Código de Ética da ACM/IEEE
• Sociedades profissionais nos EUA têm cooperado para a produção de um código ético de prática.
• Membros destas organizações assinam o código de prática ao se juntar as mesmas.
• O código contém 8 Princípios relacionados ao comportamento e decisões tomadas por
profissionais de engenharia de software, incluindo praticantes, educadores, gerentes, supervisores, bem como estudantes da profissão.
Código de Ética - Preâmbulo
•
Preâmbulo
▫ Os engenheiros de software devem se
comprometer a fazer da análise, especificação, desenvolvimento, teste e manutenção de
software uma profissão benéfica e respeitada. De acordo com seu comprometimento com a saúde, segurança e bem-estar do público, os
engenheiros de software devem aderir aos seguintes Oito Princípios:
Código de Ética - Princípios
PÚBLICO • Os engenheiros de software deve agir consistentemente com o interesse público. CLIENTE E EMPREGADOR • Os engenheiros de softwaredevem agir dentro dos melhores interesses de seu cliente e empregador, de forma consistente com o interesse público. PRODUTO • Os engenheiros de software devem assegurar que seus produtos e as modificações a eles
relacionadas
atendam aos mais altos padrões
profissionais possíveis.
Código de Ética - Princípios
JULGAMENTO • Os engenheiros de software devem manter a integridade e a independência em seu julgamento profissional. GERENCIAMENTO • Os gerentes e líderes de engenharia de software devem aceitar e promover uma abordagem ética no gerenciamento de desenvolvimento e manutenção de software. PROFISSÃO • Os engenheiros de software devem promover a integridade e a reputação da profissão de forma consistente com o interesse público.Código de Ética - Princípios
COLEGAS
• Os engenheiros de software devem ser honestos e colaborativos com seus colegas. INDIVÍDUO • Os engenheiros de software devem participar, ao longo da vida, aprendendo, respeitando e promovendo uma abordagem ética na prática da profissão.