Introdução à Engenharia
De Software
Claudio Cavalcanti
Objetivos
Introduzir a Engenharia de Software e
explicar sua importância
Responder a perguntas-chave sobre
engenharia de software
Introduzir questões éticas e profissionais e
explicar porque estas questões interessam
a Engenheiros de Software
Tópicos abordados
FAQs sobre Engenharia de Software
Responsabilidade ética e profissional
Engenharia de Software
As economias de TODOS os países
desenvolvidos são dependentes de
Softwares.
Mais e mais sistemas são controlados por
software
Engenharia de Software diz respeito a
teorias, métodos e ferramentas para
desenvolvimento profissional de Software.
Despesas com software representam uma
fração significativa do PIB de países
desenvolvidos.
Custos dos Software
Os custos dos Softwares frequentemente é a
principal fatia do custo total de um sistema
computacional. Geralmente, o custo dos programas
é mais alto que o custo do equipamento.
Os Custos dos Software são maiores para a
manutenção que para o desenvolvimento. Para
sistemas com grande vida útil, os custos de
manutenção podem ser diversas vezes maior que
os custos de desenvolvimento.
A Engenharia de Software está preocupada com a
FAQs sobre Engenharia de Software
O que é Software?
O que é Engenharia de Software?
Qual a diferença entre Engenharia de
Software e Ciência da Computação?
Qual a diferença entre Engenharia de
Software e Engenharia de Sistemas?
O que é um processo de Software?
O que é um modelo de processo de
FAQs sobre Engenharia de Software
Quais são os custos da Engenharia de
Software?
Quais são os métodos de Engenharia de
Software?
O que é CASE (Computer-Aided Software
Engineering)?
Quais são os atributos de um bom Software?
Quais são os principais desafios que
O que é Software?
Programas de computador e documentos associados a
este programa, tais como requerimentos, modelos do
projeto e manuais de usuários.
Produtos de Software precisam ser desenvolvidos para um
cliente em particular ou para um mercado em particular.
Produtos de Software podem ser
Genéricos – desenvolvidos para serem vendidos para um grande
número de clientes ex. Programas para PC como Excel ou Word.
Personalizado – desenvolvidos para um dado cliente de acordo com
sua especificação.
Novos Softwares podem ser criados pelo desenvolvimento
de programas genéricos já existentes a partir do resuo de
Software.
O que é Engenharia de Software?
Engenharia de Software é uma disciplina de
engenharia que se preocupa com todos os
aspectos do desenvolvimento de Software.
Engenheiros de Software devem adotar uma
abordagem sistemática e organizada para
seus trabalhos e usar ferramentas
apropriadas e técnicas dependendo do
problema a ser resolvido, das restrições de
desenvolvimento Software e dos recursos
disponíveis.
Qual a diferença entre Engenharia de
Software e Ciência da Computação?
A Ciência da Computação está preocupada
com as terorias e fundamentos; A Engenharia
de Software está preocupada com os
problemas práticos de desenvolvimento de
Software.
Teorias da Ciência da Computação ainda são
insuficientes para servirem como base ao
desenvolvimento de software. (ao contrário
do que acontece com a física e a engenharia
elétrica).
Qual a diferença entre Engenharia de
Software e Engenharia de Sistemas?
Engenharia de Sistemas está preocupada com
todos os aspectos de um sistema
computacional incluindo o hardware, o software
e o processo de engenharia. A Engenharia de
Software é parte do processo que se preocupa
com a infraestrutura, controle, aplicações e
banco de dados do sistema.
Engenheiros de sistema estão envolvidos com a
especificação do sistema, projeto arquitetural,
integração e implantação do sistema.
O que é Processo de Software?
Um conjunto de atividades cujo objetivo é o
desenvolvimento ou evolução do software.
Atividades presentes em todos os processos:
Especificação – O que o sistema deve fazer e
quais as restrições do desenvolvimento;
Desenvolvimento – produção do sistema de
software
Validação – Verificar se o software é o que o
cliente espera
Evolução – Modificar o software em resposta às
O que é um modelo do processo de Software?
Uma representação simplificada de um processo de
Software, apresentada em uma perspectiva
específica.
Exemplos de perspectivas de processos são
Modelo de Workflow – sequência de atividades Modelo de fluxo de dados – fluxo das informações; Modelo de Papel/Ação – Quem faz o que.
Modelos de processo genérico
Cascata; Desenvolvimento Iterativo;
Quais são os custos da Engenharia de
Software?
Aproximadamente 60% dos gastos são com
desenvolvimento, 40% com testes. Para softwares
personalizados, o custo de evolução
frequentemente excede os custos de
desenvolvimento.
Custos variam dependendo do tipo de sistema a ser
desenvolvido e dos requerimentos dos atributos do
sistema tais como o desempenho e a confiança do
sistema.
Distribuição dos custos depende do modelo de
Distribuição dos custos por atividade
Waterfall model
Iterative development
Component-based software engineering
Development and evolution costs for long-lifetime systems
System evolution
10 200 30 400
0
System development
Specification Design Development Integration and testing
25 50 75 100
0
Specification Development Integration and testing
25 50 75 100
0
Specification Iterative development System testing
25 50 75 100
Custos para desenvolviment do produto
Specification Development System testing
25 50 75 100
Quais são os métodos de engenharia de
Software?
Abordagens estruturadas para desenvolvimento de
software que incluem modelagem do sistema,
notação, regras, Recomendações e guia de processos.
Descrição de modelos
Descrição de modelos gráficos que devem ser produzidos;
Regras
Restrições aplicadas aos modelos;
Recomendações
Recomendações sobre boas práticas de projeto;
Guia de processo
O que é CASE (Computer-Aided Software
Engineering)
Sistemas de Software voltados para prover suporte
automático para atividades de processo.
Sistemas CASE são frequentemente usados para dar
suporte ao método escolhido.
Upper-CASE
Ferramentas para auxiliar as atividades no início do processo
de definição dos requisitos e de projeto;
Lower-CASE
Ferramentas para auxiliar as atividades de fases posteriores
Quais são os atributos de um bom
software?
O Software deve prover funcionalidades e garantir o
desempenho para o usuário além de ser fácil de
manter, confiável e usável.
Facilidade de Manutenção
O Software deve evoluir na medida que haja necessidade;
Confiança
Software precisa ser confiável;
Eficiência
O Software não deve desperdiçar os recursos do sistema;
Usabilidade
O Software precisa ser usável sem esforço excessivo por parte
Quais são os principais desafios da
Engenharia de Software?
Heterogeneidade
Desenvolvimento de técnicas para construção de Software
que possa se acoplar a diferentes plataformas e ambientes de execução;
Entrega
Técnicas de desenvolvimento que resulte em uma entrega
rápida de software;
Confiança
Desenvolvimento de técnicas que demonstrem que o cliente
Responsabilidade Profissional e Ética
A Engenharia de Software envolve
responsabilidades mais amplas que
simplesmente a aplicação de técnicas.
Um Engenheiro de Software precisa se
comportar de forma honesta e ética para ser
respeitado pla comunidade.
Comportamento ético é mais do que apenas
Questões acerca da responsabilidade
profissional
Confidenciabilidade
Engenheiros normalmente devem respeitar a
confidenciabilidade de seus empregados ou
clientes, havendo ou não um acordo de
confidenciabilidade.
Competência
Engenheiros não devem desvirtuar seus níveis
de competência. Não se deve aceitar um
Questões acerca da responsabilidade
profissional
Direitos de propriedade Intelectual
Engenheiros devem estar cientes das leis que protegem o uso
da propriedade intelectual tais como patentes, copyright, etc. Eles devem ser cautelosos para garantir que a propriedade intelectual de seus empregados e clientes está protegida.
Mau uso dos computadores
Engenheiros de Software não devem usar suas habilidades
para utilizar de forma inadequada os computadores de outras pessoas. O Mau uso dos computadores pode abranger desde situações triviais (jogar usando o computador da empresa) como bem sérias (disseminação de vírus).
Código de Ética da ACM/IEEE
As sociedades profissionais americanas tem
cooperado para a produção de um código de
práticas éticas.
Membros destas organizações assinam um código
de condutas no ingresso destas associações.
O Código contém oito princípios relacionados ao
comportamento e decisões tomadas por
Engenheiros de Software profissionais, incluindo
praticantes, educadores, gerentes, supervisores e
legisladores, assim como trainees e estudantes
da profissão.
Código de ética - Princípios
PUBLICO
Os Engenheiros de Softwarem devem agir consistentemente
com o interesse público.
CLIENTE E EMPREGADOR
Engenheiros de Software devem agir dentro dos melhores
interesses de seu cliente e empregador, de forma consistente com o interesse público.
PRODUTO
Engenheiros de Software devem garantir que seus produtos e
futuras modificações do mesmo estejam de acordo com os mais altos padrões profissionais estabelecidos.
Código de Ética - princípios
JULGAMENTO
Engenheiros de Software devem manter a integridade e a
independência no seu julgamento profissional.
GERENCIAMENTO
Gerentes de Engenharia de Software e líderes devem
promover e participar de abordagens éticas no gerenciamento de desenvolvimento e manutenção de Software.
PROFISSÃO
Os Engenheiros de Software devem promover a integridade e
reputação dos profissionais de acordo com o interesse público.
Código de Ética - princípios
COLEGAS
Engenheiros de Software devem ser justos e
colaborativos com seus colegas.
INDIVÍDUO
Engenheiros de Software devem, ao longo da
vida, aprender, respeitar e promover uma
abordagem ética na prática da profissão.
Dilemas éticos
Discordância dos princícipos com a política
da alta gerência da empresa.
Seu empregador atua de forma não ética e
entrega um sistema de desempenho crítico
antes da conclusão dos testes do sistema.
Participação no desenvolvimento de armas
Pontos-chave
A Engenharia de Software é uma disciplina de engenharia
que está preocupada com os aspectos da produção de Softwares.
Produtos de Software consistem em programas desenvolvidos
e sua respectiva documentação. Atributos essenciais dos produtos são manutenibilidade, confiabilidade, eficiência e usabilidade.
O processo de Software consiste em atividades envolvidas no
desenvolvimento de produtos de Software. Atividades básicas são a especificação, desenvolvimiento, validação e evolução.
Métodos são formas organizadas para produção de software.
Eles incluem sugestões a serem seguidas, notações, regras protegendo a descrição do sistema e guias do projeto.
Pontos-chave
Ferramentas CASE são sistemas de softwares
desenvolvidos para dar suporte às atividades rotineiras
no processo de software, criação e edição de diagramas,
verificação da consistência e relatar os testes já
executados.
Engenheiros de Software tem responsabilidades com a
profissão de engenharia e com a sociedade. Eles não
devem estar apenas preocupados com questões
técnicas.