1. Definição
Segundo Fritz Bauer, "Engenharia de software é a
criação e a utilização de sólidos princípios de engenharia a fim de obter
software de maneira econômica, que seja confiável e que trabalhe eficientemente
em máquinas reais". O próprio significado de engenharia já traz os
conceitos de criação, construção, análise, desenvolvimento e manutenção.
A engenharia de software se concentra nos aspectos
práticos da produção de um sistema de software, enquanto a ciência da computação
estuda os fundamentos teóricos dos aspectos computacionais.
A Engenharia de Software surgiu em meados dos anos 70 numa
tentativa de contornar a crise do software e dar um tratamento de engenharia
(mais sistemático e controlado) ao desenvolvimento de sistemas de software
complexos. Um sistema de software complexo se caracteriza por um conjunto de
componentes abstratos de software (estruturas de dados e algoritmos)
encapsulados na forma de procedimentos, funções, módulos, objetos ou agentes e
interconectados entre si, compondo a arquitetura do software, que deverão ser
executados em sistemas computacionais.
Os fundamentos científicos para a engenharia de software
envolvem o uso de modelos abstratos e precisos que permitem ao engenheiro
especificar, projetar, implementar e manter sistemas de software, avaliando e
garantido suas qualidades. Além disto, a engenharia de software deve oferecer
mecanismos para se planejar e gerenciar o processo de desenvolvimento. Empresas
desenvolvedoras de software passaram a empregar os conceitos de Engenharia de
Software sobretudo para orientar suas áreas de desenvolvimento, muitas delas
organizadas sob a forma de Fábrica de Software.
A engenharia de sistemas é uma área mais ampla por tratar
de todos os aspectos de sistemas baseados em computadores, incluindo hardware e
engenharia de processos além do software.
2. Processo de Software
Processo de software é uma sequencia coerente de práticas
que objetiva o desenvolvimento ou evolução de sistemas de software. Estas
práticas englobam as atividades de especificação, projeto, implementação e
testes e caracterizam-se pela interação de ferramentas, pessoas e métodos.
Devido ao uso da palavra projeto em muitos contextos, por
questões de clareza, há vezes em que se prefira usar o original em inglês
design.
2.1 Modelos
*
Sequencial ou Cascata (do inglês waterfall) - com fases distintas de
especificação, projeto e desenvolvimento.
*
Evolucional - especificação, projeto e desenvolvimento são entrelaçados.
* V-Model -
Parecido com o modelo cascata, mas com uma organização melhor, que permite que
se compare com outros modelos mais modernos.
* Espiral -
evolução através de vários ciclos completos de especificação, projeto e
desenvolvimento.
*
Componentizado - reuso através de montagem de componentes já existentes.
* Formal -
implementação a partir de modelo matemático formal.
* Ágil
* RAD
* Quarta
geração
2.2 Metodologias
* Rational
Unified Process ( RUP )
*
Programação extrema ( XP )
* Microsoft
Solution Framework ( MSF )
* Feature Driven Development
( FDD )
2.3 Modelos de Maturidade
Os modelos de maturidade surgiram para avaliar a qualidade
dos processos de software aplicados em uma organização (empresa ou
instituição). O mais conhecido é o Capability Maturity Model Integration
(CMMi), do Software Engineering Institute - SEI.
Através do CMMi, uma organização pode ter sua
maturidade medida em 5 níveis:
* Nível 1 -
Caótico
* Nível 2 -
Capacidade de repetir sucessos anteriores pelo acompanhamento de custos,
cronogramas e funcionalidades
* Nível 3 -
O processo de software é bem definido, documentado e padronizado
* Nível 4 -
Realiza uma gerência quantitativa do processo de software e do produto
* Nível 5 -
Usa a informação quantitativa para melhorar continuamente e gerenciar o
processo de software
CMMi é um novo modelo de maturidade surgido recentemente
com o fim de agrupar as diferentes usabilidades que o CMM estava sendo
utilizado. No Brasil temos 3 empresas que contam com a certificação CMMi-5:
Accenture Technology Solutions(ATS), IBM, TCS - Tata Consulting and Services.
3. Gerência de Projetos
A gerência de projetos se preocupa em entregar o sistema
de software no prazo e de acordo com os requisitos estabelecidos, levando em
conta sempre as limitações de orçamento e tempo.
A gerência de projetos de software se caracterizam por
tratar sobre um produto intangível, muito flexível e com processo de
desenvolvimento com baixa padronização.
3.1 Planejamento
O planejamento de um projeto de desenvolvimento de
software inclui:
*
organização do projeto (incluindo equipes e responsabilidades)
*
estruturação das tarefas (do inglês work breakdown structure)
*
cronograma do projeto (do inglês project schedule)
* análise de risco
Essas atividades sofrem com dificuldades típicas de
desenvolvimento de software. A produtividade não é linear em relação ao tamanho
da equipe e o aumento de produtividade não é imediato devido à custos de
aprendizado de novos membros. A diminuição de qualidade para acelerar o
desenvolvimento constantemente prejudica futuramente a produtividade.
A estimativa de dificuldades e custos de
desenvolvimentos são muito difíceis, além do surgimento de problemas técnicos.
Esses fatores requerem uma análise de riscos cuidadosa.
3.2 Análise
As atividades de análise concentram-se na
identificação, especificação e descrição dos requisitos do sistema de software.
Em resumo, requisito é uma necessidade que o software deve cumprir.
Há várias interpretações e classificações sobre
requisitos, entre elas:
* funcional
ou não funcional
* de
usuário ou de sistema
É comum que o cliente não saiba o que ele realmente
deseja, que haja problemas na comunicação e ainda que haja mudança constante de
requisitos. Todos esses fatores são recrudecidos pela intangibilidade sobre
característicos de sistemas de software, principalmente sobre o custo de cada
requisito.
3.3 Modelagem
A abstração do sistema de software através de modelos
que o descrevem é um poderoso instrumento para o entendimento e comunicação do
produto final que será desenvolvido.
A maior dificuldade nesta atividade está no equilíbrio
(tradeoff) entre simplicidade (favorecendo a comunicação) e a complexidade
(favorecendo a precisão) do modelo. É comum a utilização de linguagens para
modelagem como UML.
3.4 Gestão
* Pessoal
* Produto
* Processo
* Projeto
4. Tecnologias e Práticas
A engenharia de software aborda uma série de práticas
e tecnologias, principalmente estudadas pela ciência da computação, enfocando
seu impacto na produtividade e qualidade de software.
Destacam-se o estudo de linguagem de programação,
banco de dados e paradigmas de programação, como:
*
Programação estruturada
*
Programação funcional
* Programação
orientada a objetos
*
Componentes de Software
*
Programação orientada a aspecto
4.1 Ferramentas
Outro ponto importante é o uso de ferramentas CASE (do
inglês Computer-Aided Software Engineering). Essa classificação abrange toda
ferramenta baseada em computadores que auxiliam atividades de engenharia de
software, desde de análise de requisitos e modelagem até programação e testes.
Os ambientes de desenvolvimento integrado (IDEs) têm
maior destaque e suportam:
* Editor
* Compilador
* Debug
* Geração
de código
* Modelagem
* Deploy
* Testes
automatizados
*
Refatoração
Compare Preços de Livros de Informatica:
Para adicionar comentários nesta página basta ser um usuário cadastrado! Faça seu Login ou Cadastre-se aqui. É grátis! |