Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
1.1 Introdução
Hoje, praticamente todos os países, dependem de softwares ou algum tipo de sistema
baseados em computadores.
Exemplos:
A manufatura e a distribuição industrial estão completamente automatizados, assim como os
sistemas financeiros.
Dessa forma, produzir e manter softwares de qualidade dentro de custos adequados tornou-
se essencial para o funcionamento da economia mundial.
Software é abstrato e intangível, o que facilita para a Engenharia de Software, pois não
existe limites físicos para o seu desenvolvimento. Contudo, essa falta de restrições significa que o
software pode tornar-se complexo e difícil de ser compreendido.
E com o surgimento da necessidade de desenvolver softwares mais complexos e de grande
porte, verificou-se que a construção de software de maneira informal não era suficiente e adequada .
Projetos importantes apresentavam, algumas vezes anos de atraso. Estimativas de prazos e
custos frequentemente imprecisos, ira difícil manter o software e seu desempenho era insatisfatório,
constatou-se que o “desenvolvimento de software estava em crise”.
O conceito da Engenharia de Software foi proposto em 1968, em uma conferência para
discutir a então chamada crise do software.
O termo crise do software, refere-se a um conjunto de fatores que afetavam o
desenvolvimento de software. E esses problemas não se limitam ao software que não funciona
adequadamente, mas abrange também problemas associados a forma de desenvolvimento destes
softwares, a forma como é efetuada a manutenção destes softwares, como atender a demanda por
novos softwares e como desenvolver novos softwares cada vez mais rapidamente. JÚNIOR (s/d)
Alguns mitos também contribuíram na dificuldade de desenvolvimento de software, tais
como:
• Temos as ferramentas de última geração para o desenvolvimento do software – precisa-se
mais do que tecnologia atua para se desenvolver um software de qualidade.
• Caso o projeto de desenvolvimento de software esteja atrasado, acrescente mais
programadores – adicionar pessoas em um projeto atrasado, pode atrasá-lo ainda mais, pois
essas pessoas estão habilitadas para trabalhar neste projeto.
Alguns desses mitos contribuíram ainda mais para o fortalecimento da dificuldade das
organizações em desenvolvimento de software.
Os custos de software aumentavam, enquanto o hardware diminuíam consideravelmente.
Dessa forma, tornava-se necessário criar novas técnicas e métodos para acompanhar a
complexidade inerente aos grandes sistemas de software.
Essas técnicas tornam-se parte da Engenharia de Software e são amplamente usadas hoje em
dia. No entanto, assim como aumentou a habilidade de produzir software, aumentou também a
necessidade de criar sistemas de software mais complexos.
Novas tecnologias resultantes da convergência de computadores e sistemas de comunicação,
e as complexas interfaces com o usuário, impuseram novos desafios aos engenheiros de software.
Ainda hoje, muitas empresas não aplicam as técnicas de engenharia de software, e
desenvolvem software com baixa qualidade, atrasam e os custos vão além do orçamento previsto.
Verifica-se que houve grandes avanços na maneira de construir softwares, pois entende-se
melhor as atividades envolvidas no processo de desenvolvimento. Novas notações e ferramentas
reduzem o esforço para a produção de sistemas mais complexos e de grande porte.
1.2. Software
O que é software?
Muitos ainda associam o termo aos programas de computadores. No entanto, software não é
apenas o programa em si, mas todos os dados de documentação e configuração associados,
necessários para que o programa opere corretamente.
Um sistema de software consiste, geralmente de programas separados, mas necessário para a
operação do sistema:
1. Arquivos de configuração: usados para configurar esses programas;
2. Documentação do sistema: tem a finalidade de descrever toda a estrutura do sistema;
3. Documentação do usuário: explica como utilizar o sistema;
4. Sites-web: por meio dos quais o usuário pode obter informações recentes sobre o produto.
Observações
Diferentes tipos de sistemas necessitam de diferentes processos de desenvolvimento.
Exemplo
• Um software de tempo real de uma aeronave deve ser completamente especificado antes do
início de seu desenvolvimento, enquanto, nos sistemas de comércio eletrônico a
especificação e o programa são, geralmente, desenvolvidos em conjunto.
Essas distribuições, são válidas para software sob encomenda. Para sistemas genéricos os
custos de especificação são relativamente baixos. No entanto, como estão previstos para serem
usados em diferentes configurações, eles devem ser testados intensamente.
Confiança O software deve ser confiável, ou seja, não deve causar danos
físicos ou econômicos caso ocorra alguma falha.
Eficiência O software não deve fazer uso desnecessário de recursos do
sistema, como: tempo de processamento, utilização da memória,
etc.
Usabilidade O software deve ser utilizável pelos usuários para os quais ele
foi criado. Deve apresentar uma interface amigável.
Sommerville, 2007
Pontos-chave
• A Engenharia de Software é uma disciplina de engenharia relacionada a todos os
aspectos de produção de software.
• Os produtos de software consistem em programas desenvolvidos e documentação
associada. Os atributos essenciais são: facilidade de manutenção, confiança, eficiência e
aceitação.
• O Processo de software incui todos as atividades envolvidas no desenvolvimento de
software.
• Os engenheiros de software têm responsabilidades com a profissão de engenharia e com
a sociedade. Não devem se preocupar apenas com questões técnicas.
2. PARADIGMAS DE DESENVOLVIMENTO DE SOFTWARE
A Engenharia de Software abrange um conjunto de elementos que possibilita o controle do
processo de desenvolvimento de software e oferece uma base para o desenvolvimento de produtos
de software de qualidade. Tais elementos serão descritos a seguir:
1. Processos: conjunto de atividades envolvidas na produção de um software.
2. Métodos: trabalha com os detalhes de “como fazer” para construir um software.
Envolve tarefas como:
a. Planejamento;
b. Estimativa de projeto
c. Análise de requisitos.
Exemplos de métodos utilizados:
• OO;
• DFD;
• UML;
• MER.
3. Ferramentas: tem como objetivo proporcionar apoio automatizado ou semi-automatizado
aos métodos.
Exemplo:
• Ferramentas Case;
• Case Studio;
• Dr. Case;
• Visio.
4. Procedimentos: tem a finalidade de construir o elo de ligação mantendo juntos os métodos
e ferramentas. Segundo Pressman (1995), os precedimentos definem a sequência em que os
métodos serão aplicados, produtos a serem entregues (relatórios, documentos, etc).
A seguir serão discutidos alguns paradigmas de desenvolvimento de software. O paradigma
deve ser aplicado (escolhido) levando em consideração o tipo de aplicação a ser desenvolvida.
Pressman, (1995)
2.2.2.1. Aplicabilidade
Tem sido muito utilizado para o desenvolvimento de Sistemas Especialistas, no contexto da
Inteligência Artificial.
Exemplos:
• Sistemas de reconhecimento de voz;
• Sistemas de diagnóstico médico.
2.1.5.1. Aplicabilidade
• Sistemas interativos pequeno ou médio porte;
• Para validar partes de grandes sistemas (Interface com o usuário);
• Para sistemas com pouco tempo de vida;
• Para resolver incertezas na especificação de requisitos de grandes sistemas pode usar
protótipos descartáveis.
Tem sido muito utilizado para o desenvolvimento de sistemas críticos, tais como sistemas no
qual o fator segurança é crítico.
Exemplo:
• Sistema para controle de tráfego aéreo.
Figura 5: A transformação formal:
Cada etapa acrescenta mais detalhes, mas ainda é matematicamente correta, até que a especi-
ficação formal seja convertida em um programa equivalente.
2.5.1.1 Vantagens
• O cliente é beneficiado com partes da funcionalidade, podendo usar imediatamente;
• Esses incrementos pode servir como protótipos, e também como experiência para os
próximos requisitos;
• Menor probabilidade de riscos no projeto;
• Como trabalha com a ordem de prioridade de serviços, recebem uma atenção nos testes;
significa que há menor chance de encontrar erros nas partes mais importantes do sistema.
2.5.1.2 Desvantagens
• Os incrementos não devem ser grandes (mais ou menos 20 mil linhas de código), e cada
incremento deve entregar uma funcionalidade;
• Difícil definir os requisitos para cada incremento com tamanho adequado.
Exemplo
• Riscos de requisitos – poderá desenvolver um protótipo do sistema.
3. Desenvolvimento e Validação: nesta parte escolhe o modelo de desenvolvimento conforme
a aplicação.
Exemplo
• Se os riscos da interface com o usuário forem dominantes – o modelo de prototipação seria o
mais adequado;
• Se os riscos de segurança constituírem a principal consideração – o ideal será o
desenvolvimento baseado em transformação;
• Caso o principal risco encontrado for a integração de sistemas – o modelo mais apropriado
será o cascata.
4. Planejamento: esta etapa trabalha com a revisão de projeto, é verificado a possibilidade de
continuar, se a decisão for pelo prosseguimento, elabora os planos para a próxima fase do projeto.
2.5.2.1 Vantagens
• Possibilita uma maior integração entre as fases e facilita a depuração e a manutenção do
sistema;
• Permite que o projetista e cliente possa entender e reagir aos riscos em cada etapa evolutiva.
2.5.2.2 Desvantagens
• Avaliação dos riscos exige muita experiência;
• O modelo é relativamente novo e não tem sido amplamente utilizado.
3. GERENCIAMENTO DE PROJETO
O gerenciamento de projeto é parte fundamental no processo da Engenharia de Software.
Um bom gerenciamento não é uma garantia que não ocorrerá problemas no desenvolvimento do
projeto. Porém, um mal gerenciamento ou a falta dele oferece alta possibilidade de resultar em
falhas: atraso no cronograma, estou no custo estimado, muitas vezes não atende aos requisitos.
O desenvolvimento de planos e cronogramas do projeto é de responsabilidade do engenheiro
de software. Tem a função de supervisionar o trabalho para assegurar que está sendo realizado
dentro dos padrões estabelecidos e monitorar o progresso quanto ao tempo, custos, etc.
O trabalho do gerente de projeto de software é assegurar o desenvolvimento do software
dentro dos padrões e que contribua para que a empresa que está desenvolvendo atinja suas metas.
Os gerentes de projeto de software realizam o mesmo trabalho que os gerentes de outras
engenharias. No entanto, uma série de fatores as diferencia. Essas distinções tornam o
gerenciamento de software particularmente difícil. Algumas diferenças são:
1. O produto é intangível: na construção de um navio, o gerente de projeto pode ver a
construção. Por exemplo: caso o cronograma atrasa, o efeito do produto é visível, ou seja,
parte da construção não esta pronta.
2. Não existem processo-padrão de software: as engenharias ao longo dos anos, consolidou
suas atividades, ou seja, o processo já é experimentado e testado.
Exemplo:
o processo de engenharia de construção de pontes, prédios já são bem definidos e
compreendidos. Enquanto
3. Projetos de software de grande porte – projetos “únicos”: os projetos de grande porte,
geralmente, são diferentes de anteriores. Dessa forma, mesmo gerentes com experiência
pode encontrar dificuldades em prever problemas. Outro fator agravante está no fato de
mudanças nas tecnologias, o que pode tornar a experiência do gerente obsoleta. Ou seja,
experiência em projetos anteriores podem não serem aproveitadas em novos projetos.
A elaboração da proposta para obter um contrato para realizar o trabalho pode ser
considerado o primeiro estágio do projeto. A proposta deve conter os objetivos do projeto, e como
será realizado. Inclui também a estimativa de custos e cronograma, justifica porque o contrato deve
ser concedido aquela organização para realizar o trabalho.
Trata-se de uma tarefa um pouco complexa, pois muitas organizações de desenvolvimento
de software depende de um número significativo de contratos, e pode não haver diretrizes bem
definidas para realizar tal tarefa.
O planejamento do projeto tem a finalidade de identificar as atividades, marcos e produtos
gerados em um determinado projeto e a estimativa de custos está relacionada à estimativa de
recursos necessários. Enquanto, a monitoração é uma atividade contínua.
O gerente tem a responsabilidade de acompanhar o progresso do projeto e
comparar os custos reais e o que foi estimado.
Geralmente, as organizações possuam meios formais para monitorar o projeto,
trata-se de uma forma importante nesse processo de gerenciamento. Porém, é interessante também
utilizar discussões informais e verificar o que está acontecendo no desenvolvimento do projeto. A
monitoração informal pode prever potenciais problemas ou revelar dificuldades diárias, o que pode
trazer bons resultados na prevenção de problemas maiores futuramente, auxiliando assim, o gerente
na proposição de alternativas à medida que os problemas são identificados, em vez de aguardar que
um atraso significativo no cronograma seja relatado.
No desenvolvimento de um projeto, é normal que ocorra as revisões formais, pois
estão relacionadas à revisão geral do progresso e o desenvolvimento técnico do projeto, e a
verificação se as metas da organização financiadora estão alinhadas.
O resultado de uma revisão pode levar à decisão de cancelar ou não um projeto.
Exemplo: um projeto de grande porte pode levar vários anos para ser construído, e no decorrer
desse tempo os objetivos dessa organização podem sofrer modificações. Essas mudanças podem
implicar em novas metas, ou seja, o software não atende mais as necessidades da organização.
Devendo assim, decidir pela interrupção do projeto ou alterá-lo de forma que venha atender aos
atuais objetivos.
Outro fator importantes no processo de desenvolvimento de um projeto é a equipe
que irá trabalhar, dessa forma, os gerentes precisam montar as equipes para trabalhar nos projetos.
Os gerentes precisam montar essa equipe, o ideal é que haja pessoas com habilidades adequada
para trabalhar no projeto. Porém, muitas vezes os gerentes precisam montar a equipe aquém do
considerado ideal, isso ocorre por várias razões:
• O orçamento pode ser insuficiente para contratar uma equipe bem remunerada. Sendo assim,
necessário contratar uma equipe menos experiente com um custo menor;
• Pode não ter disponível interno ou externo uma equipe com experiência adequada, pois
essas pessoas podem estarem alocadas em outros projetos.
• A organização pode querer desenvolver as habilidades de seus funcionários. Ou seja, pode
designar uma equipe inexperiente para um determinado projeto a fim que possam aprender e
ganhar experiencia.
Algumas atividades podem ser realizadas simultaneamente. Dessa forma, deve coordenar as
atividades paralelas e organizar de maneira qeu a força de trabalho seja otimizada. Os gerentes
devem evitar que todo o projeto fique parado devido uma tarefa critica que ainda não foi concluída.
Sommerville (2007), destaca que as atividade de projeto devem durar pelo menos uma
semana e no máximo de 8 a 10 semanas. Caso leve mais tempo, deverá ser subdividida para o
planejamento e realização do cronograma.
Ao estimar os cronogramas, o gerente deverá levar em consideração possíveis problemas.
Exemplo:
• Pessoas que trabalham no projeto podem ficar doentes; ou podem sair do projeto;
• hardware pode apresentar defeitos;
• As tecnologias de apoio como hardware e software podem ser entregues com atraso, etc.
Uma das regras que pode ser utilizada é fazer a estimativa com se nada fosse dar errado e,
então, aumentar a estimativa para cobrir problemas não previstos.
Por exemplo:
• Adicionar 30 % a estimativa original para problemas não previstos e, em seguida, mais 20 %
para cobrir outros aspectos. Tudo deve levar em consideração o tipo de projeto que será
desenvolvido.
Os cronogramas do projeto são geralmente, representados como um conjuto de diagramas
que apresentam a estrutura analítica, as dependências de atividades e as alocações de pessoal.
As datas desse diagrama mostra a data de início, deve ser lido da esquerda para a direita e de
cima para baixo.
Deve-se começar o desenvolvimento de um marco somente quando todos os caminhos que
levam até ele estivem sido concluídos. Exemplo: Quando as atividades T3 e T6 forem terminadas,
assim pode iniciar a atividade T9, conforme figura 11.
O tempo mínimo necessário para terminar o projeto pode ser estimado levando em
consideração o caminho mais longo no gráfico de atividades (caminho crítico). Neste exemplo,
corresponde a 11 semanas ou 55 dias de trabalho.
Na figura 11 o caminho crítico é representado por uma sequência de retângulos com
contorno em negrito. O caminho crítico é composto pela sequência de atividades dependentes
que irá definir o tempo necessário para a realização do projeto. Atraso em qualquer atividade
do caminho crítico pode causar atraso no projeto, pois as próximas atividades só poderão serem
iniciadas quando a atividade em atraso estiver concluída.
Contudo, atrasos que ocorrem em atividades que não fazem parte do caminho crítico,
provavelmente, não causará atrasos no cronograma do projeto. Se T8 atrasar por duas semanas, não
irá afetar a data de término do projeto, pois não está no caminho crítico.
Figura 11: Processo de desenvolvimento do cronograma do projeto
Identificação de Riscos
Após identificar os riscos, deve-se elaborar uma lista de quais riscos podem ocorrer e quais
podem afetar o produto, o projeto e o negócio.
Análise de Riscos
No processo de análise de riscos, deverá considerar cada risco identificado e avaliar sua
probabilidade e seriedade. Essas estimativas não precisam necessariamente ser avaliações
numéricas precisas, mas devem basear-se em um número de faixas:
Deve, portanto, computar os resultados desse processo de análise de acordo com a gravidade do
risco. A tabela 5 faz essa ilustração em relação aos riscos identificados na tabela 4. Obviamente, a
avaliação de probabilidade e seriedade é arbitrária neste caso. Na prática, para realizar esta
avaliação, precisa-se de informações detalhadas sobre o projeto.
Naturalmente, tanto a probabilidade quanto a avaliação dos efeitos podem mudar, a medida
que mais informações sobre os riscos tornarem-se disponíveis. Após realizar a etapa de análise e
classificação dos riscos, deve avaliar quais os riscos mais significativos. Essa avaliação deve
depender da combinação da probabilidade da ocorrência do risco e de seus efeitos. Em geral, riscos
catastróficos devem sempre ser considerados, assim como todos os riscos sérios que tenham
probabilidade de ocorrência acima da média.
Boehm (1988), recomenta identificar e monitorar os '10 maiores' riscos, no entanto depende do
projeto. Um número muito grande de riscos exigirá que muitas informações sejam coletadas.
Planejamento de Riscos
O processo de planejamento de riscos considera cada um dos riscos importantes
identificados e define estratégias para gerenciá-los. A tabela 6 mostra as possíveis estratégias
identificadas para os riscos principais da Tabela 5.
Essas estratégias dividem-se em três categorias:
1. Estratégias de prevenção: significa que a probabilidade de que o risco ocorrerá será
reduzido.
Um exemplo de uma estratégia de prevenção de riscos é lidar com componentes defeituosos, como
mostrado na Tabela 5.
2. Estratégias de minimização: significa que o impacto do risco será reduzido.
Um exemplo de estratégia de minimização de riscos é de doença entre o pessoal da equipe na
Tabela 5..
3. Planos de contingência: significa que a organização esta preparada para o pior e tem uma
estratégia para resolver o problema.
4. Um exemplo de plano de contingência é a estratégia para problemas financeiros apresentado
na Tabela 5.
Pontos-chave
Um bom gerenciamento é essencial para sucesso do projeto.
Gerentes têm papéis diversos, mas suas atividades mais significantes são planejamento, elaboração
de estimativas e desenvolvimento de cronograma.
Planejamento e elaboração de estimativas são processos iterativos que continuam ao longo do curso
de um projeto.