DESTAQUES EMPRESA SERVIÇOS SOLUÇÕES PORTFOLIO CONTACTOS
ENGENHARIA DE SOFTWARE
Engenharia de software é uma área do conhecimento da informática voltada para a especificação, desenvolvimento e manutenção de sistemas de software aplicando tecnologias e práticas da ciência da computação, gestão de projectos e outras disciplinas, com o objectivo de organização, produtividade e qualidade.
     Actualmente, essas tecnologias e práticas englobam linguagens de programação, bases de dados, ferramentas, plataformas, bibliotecas, padrões, processos e a questão da Qualidade de Software.
    Os fundamentos científicos para a engenharia de software envolvem o uso de modelos abstractos e precisos que permitem ao engenheiro especificar, projectar, implementar e manter sistemas de software, avaliando e garantindo suas qualidades. Além disso, a engenharia de software deve oferecer mecanismos para se planear e gerir o processo de desenvolvimento.
 
 
ARTIGOS DE ENGENHARIA DE SOFTWARE
Definição
Áreas de Conhecimento
Processo de Software
Gestão de Projectos
Tecnologias e Práticas
Ferramentas

Definição

Segundo Friedrich Ludwig 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.
INICIO

 

Áreas de Conhecimento

Segundo o SWEBOK, as áreas de conhecimento da Engenharia de Software são:

INICIO

 

Processo de Software

Processo de software, ou processo de engenharia de software, é uma sequência coerente de práticas que tem por objecto o desenvolvimento ou evolução de sistemas de software. Estas práticas englobam as atividades de especificação, projecto, implementação, testes e caracterizam-se pela interação de ferramentas, pessoas e métodos.

SEE e PSEE são os ambientes voltados para o desenvolvimento e manutenção de processos. O projecto ExPSEE é uma continuação dos estudo de processos, principalmente do ambiente PSEE.

Devido ao uso da palavra projecto em muitos contextos, por questões de clareza, há vezes em que se prefira usar o original em inglês design.

Modelos de Processo de Software

Um modelo de processo de software pode ser visto como uma representação, ou abstração dos objectos e actividades envolvidas no processo de software. Além disso, oferece uma forma mais abrangente e fácil de representar a gestão de processos de software e consequentemente o progresso do projecto.

Exemplos de alguns modelos de processo de software:

  • Sequencial ou Cascata (do inglês waterfall) - com fases distintas de especificação, projecto e desenvolvimento.
  • Evolutivo - especificação, projecto 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, projecto e desenvolvimento.
  • Componentizado - reuso através de montagem de componentes já existentes.
  • Formal - implementação a partir de modelo matemático formal.
  • Quarta geração

Metodologias

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 gestão quantitativa do processo de software e do produto;
  • Nível 5 - Usa a informação quantitativa para melhorar continuamente e gerir 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.

INICIO

 
Gestão de Projectos

A gestão de projectos 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.

Planeamento

O planeamento de um projecto de desenvolvimento de software inclui:

  • organização do projecto (incluindo equipes e responsabilidades)
  • estruturação das tarefas (do inglês work breakdown structure)
  • cronograma do projecto (do inglês project schedule)
  • análise de risco

Essas actividades sofrem com dificuldades típicas de desenvolvimento de software. A produtividade não é linear em relação ao tamanho da equipa e o aumento de produtividade não é imediato devido aos custos de aprendizagem de novos membros. A diminuição da 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 factores requerem uma análise de riscos cuidadosa.

Análise

As actividades 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.

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 actividade 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.

Gestão
  • Pessoal
  • Produto
  • Processo
  • Projeto

INICIO

 

Tecnologias e Práticas

A engenharia de software aborda uma série de prácticas 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, bases de dados e paradigmas de programação, como:

INICIO

 

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 actividades 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, entre outras coisas:

INICIO