Buscar

FUNDAMENTOS DE ENGENHARIA DE SOFTWARE

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 5 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

FUNDAMENTOS DE ENGENHARIA DE SOFTWARE
Natureza do Software
 
Hoje, o software tem um duplo papel. Ele é um produto e, ao mesmo tempo, o veículo para distribuir um produto. Como produto, fornece o potencial computacional representado pelo hardware ou, de forma mais abrangente, por uma red e de comp utadores que podem ser acessados por hardware local.
Como veículo de distribuição do produto, o software atua como a base para o controle do computador (sistemas operacionais), a comu nicação de informações (redes) e a criação e o controle de outros programas (ferramentas de software e ambientes). O software distribui o produto mais importante de nossa era – a informação.
Ele transforma dados pessoais (por ex emplo, transações financeiras de um indivíduo) de modo que possam ser mais úteis em determinado contexto; gerencia informações comerciais para aumentar a compet itividade; fornece um portal para redes mundiais d e informação (Internet) e os meios para obter informações sob todas as suas formas. Atualmente, uma enorme indústria de software tornou-se fator dominante nas economias do mundo industrializado.
A natureza mutante do Software
A natureza do software é mutante. As aplicações e os sistemas baseados na Internet passaram de simples conjuntos de conteúdo informativo para sofisticados sistemas que apresentam funcionalidade complexa e conteúdo multimídia. Embora essas WebApps possuam características e requisitos exclusivos, elas não deixam de ser um tipo de software.
Processos de Desenvolvimento
Qualquer projeto é formado por processos e estes são constituídos de atividades que, 
fazendo uso de ferramentas, técnicas e artefatos, são executados de forma organizada 
e/ou sincronizada. Um projeto é caracterizado por um tempo de vida finito e pela 
produção de um produto ou serviço. Existem produtos que são facilmente visualizados 
antes mesmo de sua construção, pois são quantificáveis, de escopo exato e incertezas 
mínimas como, por exemplo, construções prediais. Essa definição não representa o 
desenvolvimento de um software. É exatamente o contrário, pois este tipo de produto é 
intangível, de escopo com altas taxas de variações e incertezas constantes. Assim, um 
software por surgir de ideias conceituais, reajustáveis e não possuir recursos físicos, seu 
escopo pode variar, provocando mudanças sérias durante sua construção e dificultando 
sua visualização final. Esse fato de poder existir um grande número de possíveis estados 
torna o software um produto extremamente complexo, dificultando a elaboração de seu 
projeto de forma a atender todos os requisitos de qualidade e de controle total sobre os 
possíveis erros. Mas como obter um produto de software com qualidade diante de todas 
estas peculiaridades? 
Percebeu-se a necessidade de inclusão da disciplina de engenharia no 
desenvolvimento de software, pois com ela é possível que um gerente fortaleça práticas 
de gerenciamento para obtenção de um produto com alta qualidade. A Engenharia de 
Software aborda as formas de desenvolvimento e engloba três elementos fundamentais: 
métodos, ferramentas e procedimentos. Os métodos estão relacionados a um conjunto 
de tarefas que incluem planejamento, estimativas, projeto, codificação, testes e 
manutenção de sistemas. As ferramentas oferecem apoio aos envolvidos nos projeto e 
os procedimentos constituem a ligação entre os outros dois. Com isso, esses conjuntos 
de etapas são compreendidos como paradigmas da engenharia de software [Pressman 
2005]. 
Um processo geral é um conjunto de passos parcialmente ordenados, 
constituídos por atividades, métodos, práticas e transformações com o objetivo de 
atingir alguma meta, detalhando: produto, etapas, agentes, insumos e resultados. Em 
processos que envolvem desenvolvimento de software podem ser definidas as seguintes 
atividades: desenvolvimento, manutenção, aquisição e contratação de software, além 
de também poderem existir subprocessos para cada um destes. Por exemplo, um 
processo de desenvolvimento abrange determinação dos requisitos, análise, desenho, 
implementação e testes [Paula Filho 2006]. 
Dessa forma, os processos para construção de um software são como conjunto 
de passos que irão trabalhar de forma ampla definições, desenvolvimento e manutenção. 
Existem diversos destes conjuntos que formam diferentes estratégias de abordagem e 
são denominados também de Modelos de Ciclo de Vida de Software [Pressman 2005]. 
Com isso abordaremos neste contexto os ciclos de vida de Waterfall, Espiral e Ágil. 
O modelo de Waterfall também conhecido como ciclo de vida clássico ou, ainda, 
modelo cascata, prega uma filosofia de sequência onde uma fase deve ser completa 
antes do início da próxima removendo assim muitos erros o mais cedo possível. 
É esperado nesta abordagem uma extensa documentação em cada fase para que 
informações importantes não sejam perdidas, caso um membro do projeto desmembre 
a equipe. Assim como também se uma nova pessoa for adicionada ao time, então esta 
poderá rapidamente participar de forma efetiva.
 
Visão geral do modelo Waterfall [Pressman 2005].
O fluxo ilustrado pela figura 1 mostra as fases sequenciais previstas pelo modelo 
Waterfall. A longevidade do software é reconhecida pela fase de manutenção que repara 
os erros na medida em que são descobertos. Futuras versões do software são feitas 
usando as mesmas fases e consomem normalmente um prazo entre seis e dezoito meses. 
Este modelo pode funcionar bem quando usado com tarefas bem definidas como, por 
exemplo, voos espaciais da NASA, mas se torna problemático quando os clientes não 
possuem uma definição clara do que eles precisam [Fox e Patterson 2012]. 
Observou-se que esse problema é minimizado quando os clientes conseguem 
entender o que eles querem por meio da visualização de um protótipo e, ao mesmo 
tempo, os engenheiros entendem melhor como construir, uma vez que eles fizeram 
isso com a primeira interação com o cliente. Essa observação combinou protótipos de 
software com o modelo Waterfall e a ideia foi repetir uma sequência de quatro fases, 
onde cada uma resultaria em um protótipo mais aprimorado em relação à versão anterior 
[Boehm 1986 apud Fox e Patterson 2012]. Este modelo de ciclo de vida ganhou a 
denominação de Modelo Espiral. 
O Modelo Espiral é composto por quatro fases. A figura 2 ilustra como este 
ciclo de vida combina os modelos Waterfall e Prototipação. O processo se inicia no 
centro, com cada iteração ao redor da espiral executando as quatro fases e gerando 
como resultado um protótipo revisado. Isso se repete até que o produto esteja pronto 
para ser liberado ou lançado. 
Modelo Espiral [Fox e Patterson 2012].
Este modelo ao invés de produzir um documento com toda a documentação do 
projeto, constrói os documentos de requisitos, fundamentais para a evolução do projeto, 
por meio de cada iteração conforme as necessidades. Vale ressaltar que uma iteração 
envolve o cliente antes do produto ser finalizado, e isso reduz consideravelmente 
as chances de erros na concepção do sistema. Como as iterações demoram 
presumidamente entre seis e vinte e quatro meses, o cliente tem tempo hábil para pensar 
em novas ideias e isso seria um problema sério, pois os planejamentos deveriam ser 
revisados para transformar as novas sugestões em recursos do sistema.
Ambos os modelos foram elencados porque envolvem um longo período de 
tempo e um volume muito grande de documentação e planejamento, bem como, fases 
maiores ainda emergindo o termo Big Design Up Front (BDUF). O desenvolvimento 
de software coma abordagem BDUF reflete que o planejamento é completado e 
aperfeiçoado antes mesmo de iniciar a codificação, o que praticamente inviabiliza uma 
mudança brusca de escopo [Fox e Patterson 2012]. 
Um grupo de desenvolvedores de software em fevereiro de 2001, chamado de 
Agile Alliance, começou a descobrir maneiras melhores e mais leves de desenvolver 
software, valorizando principalmente, pessoas e interações ao invés de processos 
e ferramentas, softwares funcionando no lugar de documentações abrangentes, 
colaborações com clientes do que negociações de contratos e respostas à mudanças por 
planos fechados. Esses valores deram origem ao Manifesto Ágil e possui ainda doze 
princípios que regem a filosofia de criar softwares com agilidade [Beck 2001]. 
Este modelo alternativo de desenvolvimento é baseado em mudanças 
abrangentes, como por exemplo um fato da vida. O desenvolvedor deve melhorar 
continuamente um protótipo incompleto, até que o cliente fique feliz com o resultado 
e, como o cliente oferecerá feedback a cada iteração, então a possibilidade de mal 
entendidos é consideravelmente reduzida. O modelo enfatiza algumas práticas para 
reduzir erros e aumentar a produtividade, tais como: Test-Driven Development (TDD), 
User Stories e Velocity. Contrastando com os outros dois modelo citados, o ciclo de 
vida Ágil é tão rápido que novas versões são disponibilizadas ao cliente a cada duas 
semanas e novos recursos são adicionados continuamente ao mesmo protótipo até que o 
cliente esteja satisfeito [Fox e Patterson 2012].

Continue navegando