Engenharia de Software
Conceitos Básicos e Iniciais Capitulo 1 PLT
Conteúdo de Engenharia de
Software
Conceitos Iniciais de Engenharia de
Software;
Processos de Software;
Engenharia de Requisitos;
Modelos de Sistemas;
Prototipação, Projeto de Arquitetura, Projeto
de Interface;
Metodologias Ágeis para o desenvolvimento
Finalizando Gestão de Projetos
Veja as Duas EAP(WBS):
EAP
Qual e a certa?
ES- Conceitos Básicos
Introdução
Ao passar do tempo, ninguém imaginava que
o software tornaria um elemento muito
importante para o mundo e teria a
capacidade de manipular a informação.
Com muitos elementos computacionais
tiveram mudanças até hoje e continuam
tendo. Com este crescimento
computacional, levam a criação de
sistemas perfeitos e problemas para
quem desenvolvem softwares
Conceitos Básicos
As preocupações dos engenheiros de
software para desenvolverem os software
sem defeitos e entregarem estes
produtos no tempo marcado, assim leva a
aplicação da disciplina de engenharia de
software.
Conceitos Básicos
“Com o crescimento desse segmento
muitas empresas possuem mais
especialistas em TI em que cada um
tem sua responsabilidade no
desenvolvimento de software e é
diferente de antigamente que era
um único profissional de software
que trabalhava sozinho numa sala.”
Conceitos Básicos
Software
“O software é o conjunto de vários
artefatos e não apenas o código fonte
(SOMMERVILLE).”
Conceitos Básicos
Software
Realizando uma comparação entre o software
e hardware. Chegamos a seguinte conclusão. O
software apenas pode ser desenvolvido e
realizar a manutenção (mudança) no
software é uma tarefa complicada, exige
grande esforço da equipe de engenheiro de
software. Ao passar do tempo o software
fica deteriorado. Já para o hardware apenas
pode ser fabricado e realizar a manutenção no
hardware é simplesmente trocar à peça que
esta em desgaste. Ao passar do tempo o
hardware desgasta por vários motivos
(PRESSMAN, 2006).
Reflexão
Por que o Software perde seu tempo de
vida?
Comparando Software e Hardware quem
Conceitos Básicos
O software é caro porque torna se uma
atividade difícil e trabalhosa de ser
realizado pelo engenheiro de software
(JALOTE, 2005).
Conceitos Básicos
De acordo Pressman (2006) o software
estão categorizados em seguintes tipos,
tais como:
Conceitos Básicos
◦ Software de sistema. São programas que
apóiam outros programas, como o software que realiza a comunicação com o hardware (sistema operacional) e software que ajuda na construção de outro software (compiladores).
◦ Software de aplicação. São programas que são desenvolvidos para executar no negocio de uma empresa determinada.
Conceitos Básicos
◦ Software cientifico e de engenharia. São algoritmos que processam números.
◦ Software embutido. São programas
construídos para executarem dentro de um produto especifico como a teclas digitais de um forno micro ondas.
◦ Software para linhas de produtos. São os softwares conhecidos como software de prateleiras.
◦ Software de web. São aplicativos que são executados via Internet.
Conceitos Básicos
◦ Software de inteligência artificial. São
softwares que fazem os usos de algoritmos não numéricos. Estes tipos software se
encaixam na robótica.
◦ Computação ubíqua. São softwares que realiza a verdadeira computação distribuída.
◦ Software aberto. São software que
disponibiliza a visualização do código fonte da aplicação para o engenheiro de software
Conceitos Básicos
Software Legado
O nome de software legado é dado quando
refere se num programa de computador que foi desenvolvido há muito tempo. A preocupação do engenheiro de software com os softwares legados esta na baixa qualidade do software. Muitas vezes não existem documentações e se
existem são pobres de detalhes, os casos de teste são pobres quando tem e sem um
controle de mudanças. E muitas vezes não
mexem no software legado quando eles atentem as necessidades do cliente.
Conceitos Básicos
Engenharia de Software
Engenharia de software é uma abordagem
sistemática e disciplinada para o desenvolvimento de software (PRESSMAN, 2006).
Uma das grandes dificuldades da engenharia do
software é resolver o problema e deixar o cliente satisfeito com o software (JALOTE, 2005).
Na demonstração da próxima figura veremos a
visão do engenheiro de software em desenvolver o software que traz uma grande satisfação para o usuário quando ele próprio utiliza o software.
Conceitos Básicos
Engenharia de Software
Engenharia de software é uma abordagem
sistemática e disciplinada para o desenvolvimento de software (PRESSMAN, 2006).
Uma das grandes dificuldades da engenharia do
software é resolver o problema e deixar o cliente satisfeito com o software (JALOTE, 2005).
Na demonstração da próxima figura veremos a
visão do engenheiro de software em desenvolver o software que traz uma grande satisfação para o usuário quando ele próprio utiliza o software.
Conceitos Básicos
A engenharia de software foca no software como
produto. Não entra neste escopo o softwares construídos apenas para passarem o tempo dos programadores (PAULA FILHO, 2009).
No desenvolvimento de um projeto de software
quanto mais complexo é o software, maior é o
empenho que o engenheiro de software deve fazer para desenvolver e tem que ter maior gerenciamento (JALOTE, 2005).
A próxima figura representa uma comparação entre
projetos de software grande e pequeno. Verificar que quanto maior é a complexidade do software mais atenção deve ter para a construção do software.
Conceitos Básicos
A engenharia de software foca no software como
produto. Não entra neste escopo o softwares construídos apenas para passarem o tempo dos programadores (PAULA FILHO, 2009).
No desenvolvimento de um projeto de software
quanto mais complexo é o software, maior é o
empenho que o engenheiro de software deve fazer para desenvolver e tem que ter maior gerenciamento (JALOTE, 2005).
A próxima figura representa uma comparação entre
projetos de software grande e pequeno. Verificar que quanto maior é a complexidade do software mais atenção deve ter para a construção do software.
Conceitos Básicos
A base da engenharia de software são
conjuntos de atividades para o processo
de desenvolvimento de software. A
existência de vários tipos de processo de
desenvolvimento de software e podemos
dizer para resolver o problema do
software usam estas atividades tais como:
analise de requisito, design do software,
código e teste.
Conceitos Básicos
Analise de requisito. Através da analise de requisito é
o momento onde efetua o conhecimento do problema para desenvolve o software .
Design do software. Pelo design do software é o
momento que o engenheiro de software realiza o planejamento da solução do problema que foi
levantado no documento de requisito.
Codificação. A codificação é o momento que pega o
problema resolvido no design do software e
transformará em uma linguagem de programação.
Teste. O teste de software é o processo tem a
intenção de encontrar defeitos nos artefatos de
software (MYERS, 2004). O teste é uma maneira de medir o controle da qualidade do software durante o desenvolvimento de software.
Conceitos Básicos
Um bom manual, repleto de padrões e regras,
fornecerá a equipe tudo que ela precisa saber:
Desenvolvimento não é uma receita de bolo! Os
clientes são diferentes, os projetos são diferentes, os programadores são diferentes, as prioridades
dependem do projeto. Basicamente, TUDO é
diferente. Não pense que um site de e-commerce que você desenvolveu para a empresa X valerá para a
empresa Y, e vice-versa. O planejamento é
fundamental e só então você poderá levantar os requisitos necessários e trabalhar em cima de um novo projeto.
Conceitos Básicos
Caso ocorra atraso no cronograma este poderá ser contornado alocando-se mais programadores ao projeto.
Por mais que exista o conceito de “Fábrica de
Software” não podemos pensar no processo de desenvolvimento como uma linha de produção. Ao se inserir um programador em um projeto, ele levará algum tempo para se familiarizar com o código e com o que está sendo feito, para então, começar de fato a produzir. Alocar
programadores para resolver um problema de cronograma poderá surgir efeito contrário,
Conceitos Básicos
Uma Gravida demora 9 meses para gerar
um bebe.
Se Juntarmos 9 Gravidas eu vou ter um
Conceitos Básicos
Terceirizar um projeto é garantia de
tranquilidade e nenhum trabalho.
Quando um projeto é muito trabalhoso, requer
know-how maior do que a sua equipe possui ou o cronograma está apertado, muitos optam pela
terceirização achando que esta é uma garantia de tranquilidade e nenhum trabalho. Contudo, tome cuidado: Se a empresa X contratou você, você é o
responsável pelo trabalho que está entregando. Aí fica a pergunta: A terceirização fez o serviço direito?
Comentou o código? Documentou o que foi feito? Sua equipe tem pessoal para trabalhar nesse código? Pense bem antes de terceirizar algo que não poderá trabalhar bem no futuro. É melhor recusar um
Conceitos Básicos
Um software pode ser construído
observando-se o seu propósito geral – os detalhes podem ser levados em conta
posteriormente.
Se você é desenvolvedor já deve ter se deparado
com um usuário que só queria um ajustizinho no sistema: “só adicione um botão que faça isso e busque aquilo e faça isso ficar cor de rosa e
brilhar girando”. Sim, essas coisas acontecem! Desenvolvedores geralmente não gostam de
destruir algo para faze-lo de outra forma, pois o cliente mudou de ideia. Aliás, ninguém gosta.
Conceitos Básicos
Mesmo que os requisitos de um software
mudem, as alterações são realizadas
facilmente pois temos uma boa equipe que sabe como fazer o serviço muito bem.
Mais uma vez, se você não é desenvolver e não
entende do processo, não julgue uma atualização como simples. Somente um programador poderá avaliar o quão simples uma alteração é – e muitas
vezes, ela só vai realmente ter a ideia depois que estiver trabalhando com o código. Mesmo que você tenha uma boa equipe, modificações devem ser analisadas, discutidas com relação a sua viabilidade e testadas. Lembre-se sempre: alocar um
programador requer algum tempo para que esse se familiarize com o que vem sendo feito.
Conceitos Básicos
Se o programa funciona, nosso trabalho está completo. Se o programa ainda não está finalizado e “rodando”, não
posso avaliar sua qualidade.
Esses dois tópicos são assustadoramente passados adiante e você
já deve ter ouvido isso de alguém. Se um programa roda isso não garante que o seu trabalho está feito. Todo o processo de
desenvolvimento deve buscar a qualidade e apenas funcionar não lhe garante isso – ou seja, o processo da avaliação de qualidade não se limita a essa etapa. O seu código é bem comentado? Está bem feito? Otimizado? A tecnologia utilizada é adequada? Os banco de dados estão otimizados? Sua relações foram criadas corretamente? A infraestrutura do cliente suporta o que está sendo desenvolvido? Se o seu sistema foi feito para suportar vários acessos, ele
realmente suporta isso? Um programa é mais do que o executável. Você vende todo o processo.
Conceitos Básicos
O único produto que entregarei ao
cliente é o código executável.
Em alguns casos, o produto “palpável” que o
cliente recebe é somente o executável. Em
outros, trabalha-se com o código fonte e
com a documentação. Contudo,
independente do caso, lembre que, como foi
dito no item anterior: Um programa é mais
do que o executável. Você vende todo o
processo de desenvolvimento. Por isso,
deve-se pensar e faze-lo com perfeição.
Conceitos Básicos
O processo de planejamento fará com
que criemos documentação volumosa
que atrasará a execução do projeto,
atrasando o cronograma.
Planejamento é fundamental! Muitas pessoas
aindam confundem planejamento com
“papelada” e estas estão terrivelmente
enganadas! Mesmo trabalhando-se em um
time Agil, planejar é fundamental! A
documentação do projeto será trabalhada na
melhor metodologia adotada mas um plano
do que será feito deverá ser estudado antes
de “colocar a mão na massa.
Processos de Software
Processos de Software
O que é um Processo?
processo
substantivo masculino
1. ação continuada, realização contínua e
prolongada de alguma atividade; seguimento, curso, decurso.
2. sequência contínua de fatos ou operações que
apresentam certa unidade ou que se reproduzem com certa regularidade; andamento,
Processos de Software
Processos de Software
“Quando se fornece um serviço ou cria-se
um produto, seja desenvolvendo um software,
escrevendo um relatório ou fazendo uma
viagem de negócios, segue-se
costumeiramente uma sequencia de etapas
para completar um conjunto de tarefas.”
Processos de Software
Cada vez mais os setores da economia
(primário, secundário e terciário) tem
feito uso (e se tornado dependente) das
facilidades providas pelos avanços e
descobertas da tecnologia da informação.
Tecnologias de previsão do tempo e de
localização via satélite, por exemplo, são
utilizadas no campo para aumentar a
produtividade da lavoura e a eficiência de
maquinas colheitadeiras.
Processos de Software
Softwares que gerenciam toda a cadeia de
produção e que controlam máquinas e
robôs são cada vez mais comuns nas
fábricas. Sistemas de venda e controle de
estoque são diferenciais estratégicos
indispensáveis ao comércio. Diante deste
cenário, produzir e manter software
dentro de custos, prazos e critérios
de qualidade adequados torna-se
requisito obrigatório (SOMMERVILLE,
Processos de Software
Para que um software seja desenvolvido
de forma consistente, é preciso aliar boas
práticas da engenharia de software com
um robusto e eficiente processo de
desenvolvimento. Diferentes tipos de
sistemas necessitam de diferentes
Processos de Software
Por exemplo, um software de tempo real de uma
aeronave deve ser completamente especificado antes do inicio do desenvolvimento, enquanto que um sistema de comércio eletrônico a
especificação e o desenvolvimento do software podem ser conduzidos paralelamente. O uso de um processo de software inadequado pode reduzir a qualidade ou a utilidade do
produto de software a ser desenvolvido e/ou aumentar os custos de
desenvolvimento. Este fato leva as organizações que produzem software a usar processos de
desenvolvimento que sejam eficientes e que atendam plenamente suas necessidades
Processos de Software
Howard Baetjer Jr, em seu livro “Software as Capital”, faz o
seguinte comentário sobre processo de software (BAETJER 1998, pág. 85) :
◦ “... Desde que o software, como todo capital, é conhecimento incorporado, e como esse conhecimento está inicialmente disperso, tácito, latente e incompleto na sua totalidade, o
desenvolvimento de software é um processo de aprendizado social. O processo é um dialogo no qual o conhecimento, que deve se transformar em software é reunido e incorporado ao software. O processo fornece interação entre usuários e
projetistas, entre usuários e ferramentas em desenvolvimento e entre projetistas e ferramentas em desenvolvimento
(tecnologia). É um processo iterativo no qual a própria
ferramenta serve como meio de comunicação, com cada nova rodada de dialogo explicitando mais conhecimento útil do pessoal envolvido...”.
Processos de Software
Efetivamente, a elaboração de software de
computador é um processo de aprendizado,
e o resultado, é a incorporação de
conhecimentos coletados, destilados e
organizados à medida que o processo é
conduzido. Processo é o alicerce da
engenharia de software. É ele que permite o
desenvolvimento racional e oportuno de
softwares de computador (PRESSMAN,
2006).
Processos de Software
Ele pode ser definido para atividades como
desenvolvimento, manutenção, aquisição e
contratação de software (PAULA FILHO, 2009).
Processos de software formam a base para o
controle gerencial de projetos de software e estabelece o conteúdo no qual os métodos
técnicos são aplicados, os produtos de trabalho (modelos, documentos, dados, relatórios,
formulários, etc.) são produzidos, os marcos são estabelecidos, a qualidade é assegurada e as
modificações são adequadamente geridas (PRESSMAN, 2006).
Processos de Software
O Guia PMBOK® define processo como
sendo um conjunto de atividades
inter-relacionadas realizadas para obter um
conjunto específico de produtos,
resultados ou serviços(PMBOK, 2008).
Segundo o IEEE, um processo é uma
sequencia de passos executada com um
determinado objetivo (IEEE, 2003).
Processos de Software
Para o CMMI, um processo é definido
quando tem uma descrição que é mantida,
ou seja, tem documentação que detalha o
que é feito (produto), quando (etapas), por
quem (papéis), os itens utilizados (insumos)
e os itens produzidos (resultados)(CMMI,
2006).
Os processos podem ser definidos com mais
ou menos detalhes e suas etapas podem ter
ordenação parcial, o que pode permitir
paralelismo entre algumas delas (PAULA
FILHO, 2009).
Processos de Software
Focando no desenvolvimento de software,
Ian Sommerville define um processo de
software como um conjunto de atividades
que leva à produção de um produto de
software (SOMMERVILLE, 2007).
Roger S. Pressman define processo de
software como um arcabouço para as
tarefas que são necessárias para construir
software de alta qualidade (PRESSMAN,
2006).
Reflexão
Neste ponto qual e a relação existente
entre Gestão de Projetos e Engenharia de
Software?
Processos de Software
Processos de softwares são complexos e
como todos os processos intelectuais e
criativos dependem de julgamento
humano. 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.
Processos de Software
Não existe um processo ideal. As
organizações devem criar, verificar, validar e aperfeiçoar seus próprios métodos (CMMI, 2006). Várias destas desenvolvem abordagens inteiramente diferentes, adequadas à sua realidade, para o desenvolvimento de
software.
No caso de alguns sistemas, como os sistemas
críticos, é necessário um processo de
desenvolvimento muito bem estruturado.
Nos sistemas de negócios, com requisitos que
mudam rapidamente, um processo flexível e ágil é provavelmente mais eficaz (SOMMERVILE, 2007).
Processos 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 naturalmente surgirão.
Processos de Software
Processos de software têm como base
modelos de processo genéricos. Esses
modelos genéricos não são descrições
definitivas de processos de software. Ao
contrário, são abstrações do processo
que podem ser usadas para explicar
diferentes abordagens para o
desenvolvimento de software. Eles
podem ser considerados como
frameworks de processo que podem ser
ampliados e adaptados para criar processos
mais específicos de engenharia de software.
Processos de Software
Os modelos genéricos de processos de
software amplamente utilizados são o
modelo em cascata, o modelo de
desenvolvimento evolucionário e o
modelo de desenvolvimento baseado
em componentes.
Estes, não são mutuamente exclusivos e
comumente são utilizados em conjunto,
especialmente para desenvolvimento de
Processos de Software
Proxima Aula :
◦ Processos de Software estudos dos modelos de desenvolvimento.
◦ modelo em cascata;
◦ o modelo de desenvolvimento evolucionário ;
◦ modelo de desenvolvimento baseado em componentes.
Manifesto Agil
http://www.manifestoagil.com.br
O Manifesto Ágil é uma declaração de princípios
que fundamentam o desenvolvimento ágil de software.
Desenvolvimento ágil de software (do inglês Agile
software development) ou Método ágil é um
conjunto de metodologias de desenvolvimento de software. O desenvolvimento ágil, tal como
qualquer metodologia de software, providencia uma estrutura conceitual para reger projetos de engenharia de software.
Manifesto Agil
Estamos descobrindo maneiras melhores de
desenvolver software fazendo-o nós mesmos e
ajudando outros a fazê-lo. Através deste
trabalho, passamos a valorizar:
◦ Indivíduos e interação entre eles mais que
processos e ferramentas;
◦ Software em funcionamento mais que
documentação abrangente;
◦ Colaboração com o cliente mais que
negociação de contratos;
◦ Responder a mudanças mais que seguir um
plano.
Ou seja, mesmo havendo valor nos itens à
Manifesto Agil
Princípios por trás do manifesto ágil Nós seguimos os seguintes princípios:
Nossa maior prioridade é satisfazer o cliente, através da entrega adiantada e contínua de software de
valor.
Aceitar mudanças de requisitos, mesmo no fim do desenvolvimento. Processos ágeis se adequam a mudanças, para que o cliente possa tirar vantagens
competitivas.
Entregar software funcionando com freqüencia, na escala de semanas até meses, com preferência aos
Manifesto Agil
Pessoas relacionadas à negócios e
desenvolvedores devem trabalhar em conjunto e
diáriamente, durante todo o curso do projeto.
Construir projetos ao redor de indivíduos
motivados. Dando a eles o ambiente e suporte
necessário, e confiar que farão seu trabalho.
O Método mais eficiente e eficaz de transmitir
informações para, e por dentro de um time de
desenvolvimento, é através de uma conversa
Manifesto Agil
Software funcional é a medida primária de
progresso.
Processos ágeis promovem um ambiente
sustentável. Os patrocinadores,
desenvolvedores e usuários, devem ser
capazes de manter indefinidamente, passos
constantes.
Contínua atenção à excelência técnica e bom
Manifesto Agil
Simplicidade: a arte de maximizar a
quantidade de trabalho que não precisou ser
feito.
As melhores arquiteturas, requisitos e designs
emergem de times auto-organizáveis.
Em intervalos regulares, o time reflete em
como ficar mais efetivo, então, se ajustam e
otimizam seu comportamento de acordo.
Referencias
SOMMERVILLE, Ian (org.). Engenharia de
Software. 9ª ed. São Paulo: PEARSON, 2011.
PRESSMAN, Roger S.. Engenharia de Software. 7ª
ed. São Paulo: Makron Books, 2007.
http://www.devmedia.com.br/conceitos-de-software-e-engenharia-de-software/15730 Acessado em 21/03/2015 as 22:20 http://www.buildchange.org/wp-content/uploads/2014/07/mythbusters_logo.jpg Acessado em 21/03/2015 as 23:50 http://www.profissionaisti.com.br/2011/08/os-principais-mitos-do-desenvolvimento-de-software/ acessado em 22/03/2015 as 08:20