Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
Engenharia de Software
Engenharia em Camadas
O paradigma do ciclo de vida clássico da Engenharia de Software, também conhecido com Modelo
Cascata, o paradigma requer uma abordagem sequencial ao desenvolvimento de software que se
inicia em um nível básico e avança ao longo da Análise, Projeto, Codificação, Teste e Manutenção.
O Modelo de Ciclo de Vida Clássico abrange as seguintes atividades:
Análise e Engenharia de Sistemas: Uma vez que o software sempre faz parte de um
sistema mais amplo, o trabalho inicia-se com o estabelecimento dos requisitos para todos
os elementos do sistema. Essa visão é essencial quando o software deve fazer interface
com outros elementos, tais como hardware, pessoas e banco de dados.
Análise de Requisitos de Software: O processo de coleta dos requisitos é intensificado
e concentrado especificamente no software. O Engenheiro (“Analista”) de software deve
compreender o domínio (escopo) da informação. Os requisitos são documentados e
revistos com o cliente.
Projeto: O projeto de software é, de fato, um processo de múltiplos passos que se
concentra em quatro atributos distintos: Estrutura de dados, Arquitetura de Software,
Detalhes Procedimentais e Caracterização de Interface. Como os requisitos, o projeto é
documentado e torna-se parte da configuração do software.
Codificação: A etapa de codificação executa a tarefa de traduzir o projeto em uma forma
legível por máquina. Se o projeto estiver bem detalhado a codificação pode ser executada
mecanicamente.
Testes: Tão logo finalizada a fase de codificação inicia-se os testes. O processo de testes
concentra-se nos aspectos lógicos internos do software, garantindo que todas as rotinas
tenham sido testadas. Concentra-se também nos aspectos funcionais externos, verificando
se as entradas externas produzem resultados reais que reflitam o exigido.
Manutenção: Indubitavelmente, o software sofrerá mudanças depois que for entregue ao
cliente. Mudanças essas por erros que foram encontrados ou porque o cliente exigiu
acréscimos funcionais ou de desempenho. A manutenção reaplica cada uma das etapas
precedentes do ciclo de vida clássico, e não a um novo.
O ciclo de vida clássico é o paradigma mas antigo e o mais amplamente usado da Engenharia de
Software. Porém, nas últimas décadas várias críticas levantadas questionam sua aplicabilidade em
todas as situações.
Apesar desses problemas serem reais o paradigma do Ciclo de Vida Clássico tem um lugar definido
e importante na Engenharia de Software. Embora tenha fragilidade, ele é significativamente
melhor do que uma abordagem casual ao desenvolvimento de software.
Prototipação
Objetivos da Prototipação
Num projeto de software várias questões podem ser respondida com a construção de protótipos.
Nas situações típicas de desenvolvimento podemos distinguir entre diferentes objetivos na
prototipação:
Exploratória - é quando o protótipo é usado para ajudar a esclarecer requisitos dos
usuários com respeito ao sistema futuro. Uma prototipação também é exploratória quando
se busca examinar uma variedade de opções de design de maneira a evitar a escolha de
uma abordagem específica não adequada. Com esses objetivos os desenvolvedores
adquirem informações sobre o domínio, os usuário e tarefas. Os usuários podem emitir
informações e sugestões mais precisas, tornando-se parceiro das decisões que envolvem o
desenvolvimento.
Experimental - é quando a prototipação foca aspectos técnicos do desenvolvimento,
oferecendo aos desenvolvedores resultados experimentais para tomada de decisões de
design e implementação. Um aspecto essencial é a viabilização de uma base de
comunicação entre os usuários e desenvolvedores para soluções de problemas técnicos de
viabilidade e usabilidade, dentre outros. As principais vantagens para os desenvolvedores
são a verificação e validação das decisões tomadas e soluções apresentadas.
Evolutiva - A prototipação pode ser aplicada de maneira bastante proveitosa num
processo de reengenharia em organizações, para avaliar o impacto que a introdução de
novas tecnologias pode trazer. Nesse caso o protótipo não é visto apenas como uma
ferramenta em projetos individuais, mas como parte de um processo contínuo de evolução
dos processos organizacionais. Os desenvolvedores não são mais os protagonistas da
prototipação, mas consultores que trabalham em cooperação com os usuários no processo
de reengenharia.
Técnicas de prototipação
Do ponto de vista técnico, a prototipação pode ser conduzida segundo duas abordagens,
relacionadas com técnicas específicas de construção. Experiências em desenvolvimento de
software têm apontado inúmeras qualidades no design e implementação em diversas camadas.
Essas camadas podem ir desde a interface de usuário à camadas mais básicas como uma base de
dados e o sistema operacional. Dessa forma, podemos identificar duas formar de subdividir a
prototipação.
Um outro critério para se classificar protótipo é de acordo com o relacionamento entre o protótipo
e o sistema final. Em certos casos, o protótipo serve apenas para propósitos de especificação do
sistema final e não será usado como parte integrante do sistema final. Ele é jogado fora. Um outro
caso, é quando o protótipo vai sendo incrementado e se torna parte integrante ( building block) do
sistema. Por fim, o protótipo pode ser construído apenas para a compreensão de certos problemas
que envolvem determinados interesses. Não existe a intenção de transformá-lo num sistema.
O Modelo de Transformação
Este modelo prevê que o engenheiro de software deve ter a sua disposição uma biblioteca de
componentes reutilizáveis que satisfaça especificações formais. Na otimização, à medida que as
especificações de mais baixo nível vão sendo obtidas verifica-se quais componentes da biblioteca
implementam parte desta especificação. Um ambiente automatizado de desenvolvimento (uma
ferramenta CASE - Computer Aided Software Engineering) pode auxiliar este processo
armazenando o histórico de decisões dos engenheiros de software.
Modelo em Espiral
O modelo em espiral foi proposto por Boehm em 1988 como forma de integrar os diversos
modelos existentes à época, eliminando suas dificuldades e explorando seus pontos fortes. Este
modelo foi desenvolvido para abranger as melhores características tanto do ciclo de vida clássico
como da prototipação, acrescentando, ao mesmo tempo, um novo elemento - a análise de riscos -
que falta a esses paradigmas. Entretanto a integração não se dá através da simples incorporação
de características dos modelos anteriores. O modelo em espiral assume que o processo de
desenvolvimento ocorre em ciclos, cada um contendo fases de avaliação e planejamento, onde a
opção de abordagem para a próxima fase (ou ciclo) é determinada. Estas opções podem
acomodar características de outros modelos.
Vantagens
O modelo em espiral permite que ao longo de cada iteração se obtenham versões do sistema cada
vez mais completas, recorrendo à prototipagem para reduzir os riscos. Este tipo de modelo
permite a abordagem do refinamento seguido pelo modelo em cascata, mas que incorpora um
enquadramento iterativo que reflete de uma forma bastante realística, o processo de
desenvolvimento.
Desvantagens
Pode ser difícil convencer clientes de que a abordagem evolutiva é controlável. A abordagem deste
tipo de modelo exige considerável experiência na avaliação dos riscos para o sucesso. É
importante salientar que podem existir diferenças entre o protótipo e o sistema final. O protótipo
pode não cumprir os requisitos de desempenho, pode ser incompleto, e pode refletir somente
algumas facetas do sistema a desenvolver. O modelo em espiral pode levar ao desenvolvimento
em paralelo de múltiplas partes do projeto, cada uma sendo abordada de modo diferenciado, por
isso é necessário o uso de técnicas específicas para estimar e sincronizar cronogramas, bem como
para determinar os indicadores de custo e progresso mais adequados.
Técnicas de 4º Geração
1. Obtenção dos Requisitos: o cliente descreve os requisitos os quais são traduzidos para um
protótipo operacional:
a. o cliente pode estar inseguro quanto aos requisitos
b. o cliente pode ser incapaz de especificar as informações de um modo que uma
ferramenta 4GL possa consumir
c. as 4GLs atuais não são sofisticadas suficientemente para acomodar a verdadeira
"linguagem natural"
2. Estratégia de "Projeto": para pequenas aplicações é possível mover-se do passo de
Obtenção dos Requisitos para o passo de Implementação usando uma Linguagem de 4G:
a. Para grandes projetos é necessário desenvolver uma estratégia de projeto. De
outro modo ocorrerão os mesmos problemas encontrados quando se usa
abordagem convencional (baixa qualidade)
3. Implementação usando 4GL: os resultados desejados são representados de modo que haja
geração automática de código. Deve existir uma estrutura de dados com informações
relevantes e que seja acessível pela 4GL.
4. Teste: o desenvolvedor deve efetuar testes e desenvolver uma documentação significativa.
O software desenvolvido deve ser construído de maneira que a manutenção possa ser
efetuada prontamente.
Reengenharia de Software
Reestruturar ou reescrever todo ou parte de um sistema legado sem alterar a sua funcionalidade.
Pode ser aplicável quando alguns, mas nem todos os sub-sistemas de um sistema maior exigem
manutenção frequente. Reengenharia envolve um esforço adicional para torná-los mais fáceis de
manter. O sistema pode ser reestruturado e redocumentado partindo-se do código existente.
Quando as mudanças de um sistema estão confinadas a uma parte do sistema, então faz a
reengenharia deve ser aplicada.
Quando o suporte de hardware ou software se torna obsoleto.
Quando ferramentas de apoio à reestruturação estão disponíveis.
Quando o sistema não é fácil de ser mantido sendo, porém, de grande utilidade, ele deve ser
reconstruído. Partindo-se do sistema existente (via código-fonte, interface ou ambiente), são
abstraídas as suas funcionalidades e são construídos o modelo de análise e o projeto do software.
Esse processo é denominado reengenharia de software.
Segundo Roger Pressman (PRESSMAN, 1995), Chikofsky e Cross (CHIKOFSKY; CROSS, 1990), o
termo engenharia reversa tem suas origens na análise do hardware, onde a prática de “decifrar”
projetos de produtos era mais comum. Uma empresa desmonta um hardware comercializado a fim
de entender os “segredos” de projeto e manufatura, num esforço de melhorar seus próprios
produtos, como também analisar os produtos dos concorrentes.
O método pode ser definido como o caminho pelo qual se atinge um objetivo, ou seja, o caminho
ordenado para chegar a um fim. Metodologia consiste na análise do estudo e avaliação dos vários
métodos disponíveis pela aprovação das técnicas que serão aplicadas. Pode-se definir também
como o estudo dos métodos, especialmente, os da ciência. No ramo da informática pode-se dizer
que é uma pesquisa de métodos de programação e de exploração dos computadores e meios
informáticos.
A metodologia é o passo a passo para se chegar ao resultado desejado. Ela identifica as principais
atividades a serem executadas e indica as pessoas envolvidas nas atividades e os papéis de cada
uma. Geralmente descreve critérios de entrada/saída e pontos de conferência para decisões. Já o
método é uma abordagem técnica com um modelo para se realizar uma ou mais tarefas.
(OLIVEIRA, 1999)
Uso de Ferramentas CASE
Classificação de CASE
Não há um padrão definido para classificar as CASE, de um modo geral é possível agrupá-las em:
Upper CASE: também referenciadas como Back End, são as CASE destinadas a apoiar as
etapas iniciais de criação dos sistemas: as fases de planejamento, análise e projeto do
sistema.
Lower CASE: também referenciadas como Front End, são as CASE destinadas a apoiar a
codificação testes e manutenção da aplicação.
I-CASE: também referenciadas como Integrated CASE, são as CASE destinadas a apoiar
todo o ciclo de vida do software, desde os requisitos do sistema até o controle final da
qualidade do produto gerado, o software.
Exemplos de RAD
DELPHI, VISUAL BASIC, wxDesigner, Anubis PHP, IDE’s RAD (Eclipse, NetBeans)
Framework: é um conjunto de módulos que colaboram para realizar uma responsabilidade para
um domínio de um sub-sistema da aplicação. Framework de software compreende de um conjunto
de módulos, implementadas em uma linguagem específica, usadas para auxiliar o desenvolvimento
de software de forma que os mesmos são reaproveitados. O framework atua onde há
funcionalidades em comum a várias aplicações, porém para isso as aplicações devem ter algo
razoavelmente grande em comum para que o mesmo possa atingir a várias aplicações. Um
framework deve:
Ser reusável
Bem documentado
Fácil de usar
Conter funcionalidade abstrata (sem implementação) que deve ser completada
Deve ser de uso seguro não permitindo que seus modulos sejam destruídos pelo
usuário(desenvolvedor)
Bibliografia
PRESSMAN, R. S. Engenharia de Software. 3.ed. São Paulo: Pearson Makron Books, 1995.
CHIKOFSKY, E. J.; CROSS, J. H. Reverse Engineering and Design Recovery: a taxonomy. IEEE
Softw., Los Alamitos, CA, USA, v.7, n.1, p.13–17, 1990.
REKOFF, M. On reverse engineering. IEEE Transactions on Systems, Man and Cybernetics, [S.l.],
v.3/4, p.244–252, 1985.
OLIVEIRA, Jayr Figueiredo de. Metodologia para desenvolvimento de Projeto de Sistemas. 4ª
edição, São Paulo: Érica, 1999