Você está na página 1de 35

Engenharia de Software

Overview Engenharia de Software


AGENDA

• Engenharia Software
• Processos/Metodologias de Desenvolvimento de Software
• Métodos/Modelação
• Ferramentas
• Trabalho
• Instalação
BOKs (Body of Knowledge)
• SWEBOK (V3.0) - Guide to The Software Engineering Body of Knowledge

• BABOK - Guide to Business Analysis Body of Knowledge

• PMBOK – Project Management Body of Knowledge

• BPM CBOK - Guia de práticas para Gestão de Processos

• BPMN – Business Process Management Notation

• SBOK - Guia de práticas do Scrum

• CMBOK - Guia de Práticas para Gestão de Contratos

• DMBOK - Guia de Práticas de Gestão de Dados

• ITIL - Information Technology Infrastructure Library (práticas para a gestão de serviços IT – ITSM)

• …
Engenharia de Software >> Definição
• Software – é mais do que código de um programa de computador. Software é composto por toda a documentação e
configuração associados, necessários para que o programa opere corretamente.

• Engenharia – refere-se ao desenvolvimento de produtos, utilizando métodos e princípios científicos bem definidos.

• Engenharia de Software
– Aplicação sistemática de conhecimento cientifico e tecnológico, métodos e experiência, no desenho,
implementação, teste e documentação de software
– “the application of a systematic, disciplined, quantifiable approach to the development, operation, and
maintenance of software; that is, the application of engineering to software).”

– Quando?: meados de 1970

– Objetivo?: aplicar princípios de engenharia para contornar a complexidade do software.


Engenharia de Software >> SWEBOK
• SWEBOK – Software Engineering Body Of Knowledge – é um guia que descreve o conhecimento que
existe sobre Engenharia de Software.

• Liderado pela IEEE Computer Society – era necessário um documento que “transformasse a engenharia
de software numa disciplina legítima e numa profissão reconhecida”.

• Objetivos:
– Promover uma visão consistente da engenharia de software no mundo

– Especificar o âmbito e clarificar as fronteiras entre a engenharia de software e as outras disciplinas relacionadas (Computação, gestão de
projetos, matemática, etc.)

– Caracterizar o conteúdo da disciplina de engenharia de software

– Classificar em tópicos a área de conhecimento da engenharia de software

– Prover as bases para o desenvolvimento do currículo, para certificação individual e para licenciamento de material
Engenharia de Software >> KAs (15 - SWEBOK)
Gestão de Configuração do Prática Profissional da Eng.
Requisitos de Software
Software Software
Disciplinas Relacionadas

Gestão da Engenharia do Economia Engenharia de 1. Computer Engineering


Desenho de Software
Software Software 2. Computer Science
3. General Management
4. Mathematics
Processo de Engenharia Fundamentos da 5. Project Management
Construção de Software
Software Computação 6. Quality Management
7. Systems Engineering
Ferramentas e Métodos
Fundamentos da
Testes de Software da Engenharia do
Matemática
Software

Manutenção do Software Fundamentos da


Qualidade do Software
Engenharia
Engenharia de Software >> KAs (10 - SWEBOK)
1. Requisitos de Software: Elicitação, análise, especificação e validação dos requisitos (“se não analisarmos, é altamente provável que
construa uma solução de software que resolve o problema errado”. )

2. Desenho de Software – processo de definir a arquitetura, componentes, interfaces e outras caraterísticas (“é um processo iterativo através
do qual os requisitos são traduzidos num documento para construção do software.”)

3. Construção do Software – Codificação, verificação, teste unitário, teste de integração e debugging

4. Teste de Software – forma de fornecer aos stakeholders informações sobre a qualidade do produto ou serviço testado

5. Manutenção de Software – atividades necessárias para o suporte do software mantendo a relação custo-efeito (cost-effective)

6. Gestão da Configuração do Software – É um conjunto de atividades de apoio que permite a absorção ordenada das mudanças inerentes
ao desenvolvimento de software, mantendo a integridade e a estabilidade durante a evolução do projeto.

7. Gestão da Engenharia de Software – gestão das atividades de planeamento, coordenação, medição, monitorização, controlo e reporting,
de forma a assegurar que o desenvolvimento e manutenção do software são feitos de forma sistemática, disciplinada e quantificada
Engenharia de Software >> KAs (10 - SWEBOK)
8 Processo de Engenharia de Software – Consiste na definição, implementação, medição, gestão, mudança e melhoria no ciclo de
vida do software.

9 Ferramentas e Métodos – trata-se das ferramentas baseadas em computador necessárias para todo o ciclo de vida do software; e
os métodos que estruturam as atividades de forma sistemática com o objetivo de alcançar o sucesso.

10 Qualidade de Sofware – garantir o nível de cumprimento dos requisites

11 Praticas dos Profissionais de Engenharia de Software - Esta área preocupa-se com o conhecimento, habilidades e atitudes que os
engenheiros de software devem possuir para praticar engenharia de software de forma profissional, responsável e ética.

12 Economia da Engenharia de Software - Esta área preocupa-se com a a tomadas de decisões dentro do contexto do negócio, de
forma a alinhas decisões técnicas com decisões de negócio.

13 Fundamentos da computação - Esta área cobre tópicos fundamentais que fornecem o background informático necessário para a
prática de engenharia de software (técnicas de resolução de problemas, abstrações, algoritmos e complexidade, etc.

14 Fundamentos Matemáticos - Cobre tópicos fundamentais que fornecem os antecedentes matemáticos necessários para a prática
de engenharia de software (relações e funções; lógica básica proposicional e predicada; técnicas de prova; etc.)

15 Fundamento da Engenharia - Cobre tópicos fundamentais que fornecem os antecedentes de engenharia necessários para a prática
de engenharia de software (métodos empíricos e técnicas experimentais; análise estatística; etc.)
Engenharia de Software >> Camadas
Fornecem apoio automatizado (ou semiautomatizado) para o processo
Ferramentas e para os métodos

Abordagens estruturadas para desenvolvimento de software


Métodos de Software Os métodos fornecem a técnica de como fazer
Métodos incluem: Modelação; Notações; Regras, etc.

Modelos de Processos de Software Conjunto de atividades (e seus resultados) que vão conferir maior
estabilidade, controle e organização no ciclo de desenvolvimento

Atributos de um bom software: Facilidade de manutenção; Confiança;


Qualidade
Eficiência; Usabilidade, etc.

(Visão de Roger Pressman)


Engenharia de Software >> Qualidade

Funcionalidade

Portabilidade Confiabilidade

ISSO/IEC
6 - Caraterísticas de um Software de Qualidade
9126

Capacidade
Usabilidade
Manutenção

Eficiência
Engenharia de Software >> Atividades de Desenvolvimento

• Um sistema deve satisfazer as necessidades dos utilizadores


Requisitos
• Estas necessidades são – REQUISITOS = ação que deve ser executada pelo sistema

• Projeto Preliminar – Modelo de Arquitetura (estrutura modular, as interfaces e as estruturas de dados)


Desenho
• Projeto Detalhado – Modelo de Projeto (detalhe de cada módulo definido do projeto preliminar)

• A implementação segue as definições da fase anterior


Implementação
• Transcreve o projeto detalhado para uma linguagem de programação

• Tem por objetivo garantir que o sistema satisfaça os requisitos


• Consiste na realização de vários tipos de testes para encontrar erros
Testes • A inexistência de erros não representa a adequação operacional do sistema, por isso deve ser feita a validação com o
cliente (teste de aceitação)

• O custo de manutenção é geralmente muito maior que o custo de desenvolvimento. Faz sentido considerar desenvolvimento
Manutenção e manutenção como atividades contínuas
Processo de Desenvolvimento de Software
Definição
• Conjunto de atividades, métodos, práticas, documentos, política e procedimentos, realizados com a finalidade de obter um
produto de software e seus artefactos (planos de projeto, manuais, etc.).

• Os processos definem:
– O que Fazer – Atividades de desenvolvimento de software e os respetivos produtos
– Quem Faz – papel das pessoas envolvidas
– Quando Fazer cada atividade
– Como Fazer (nem sempre)

Vantagens
• Os processos de desenvolvimento de software são os principais mecanismos para a obtenção de software (produto) de
qualidade.
• Oferecem um roteiro útil para o trabalho de engenharia de software (nenhum modelo de processo é perfeito)
• Padronização dos artefactos (outputs)
• Melhor comunicação da equipa
• Pouca necessidade de capacitação do pessoal (pequena curva de aprendizagem)
Processo de Desenvolvimento de Software

• A maioria dos Processos é baseada em um dos modelos ou Paradigmas de desenvolvimento de Software:

– Sequencial ou Cascata

– Iterativo e incremental (ex: RAD – Rapid Application Development)

– Evolucional ou Prototipagem

– Vmodel

– Espiral

– Ágil
Modelos de Processos de Software >> Cascata
• Simples • Iterativo e Incremental

Elicitação de
Requisitos Elicitação de
Requisitos

Projeto
Projeto

Implementação
Implementação

Verificação
Verificação

Manutenção
Manutenção
Modelos de Processos de Software >> Cascata
• Vantagens • Desvantagens

• Documentação rígida (idealmente completa) em cada atividade –


• Documentação rígida (idealmente completa) em cada
dependendo da área/setor
atividade – dependendo da área/setor
• Visão estática da ER
• Reflete abordagens adotadas em outras engenharias
• Projetos reais raramente seguem um fluxo sequencial
• Pode ser combinado a outros modelos
• Ignora a natureza dinâmica do requisitos e o seu impacto nas fases
seguintes de desenvolvimento

• Não envolvimento do cliente durante todo o processo

• Quando Aplicar • Em geral, é difícil para o cliente estabelecer todos os requisitos à priori

• Sistemas críticos • Difícil se adequar a mudanças inevitáveis de requisitos

• Quando os requisitos são bem compreendidos • Uma versão executável somente ficará pronta na fase final do projeto

• Quando há pouca probabilidade dos requisitos mudarem • Difícil identificação de sistemas legados (não acomoda a engenharia
reversa).

• Excesso de documento – consome tempo e é difícil de manter


Modelos de Processos de Software >> Prototipagem

2 - Elaborar
1 - Obter
Projeto
Requisitos • O objetivo é entender muito bem os
Rápido
6– requisitos do utilizador e assim, obter uma
Construção do melhor definição dos requisitos do sistema
Produto
• Apropriado para quando o cliente não
definiu detalhadamente os requisitos ou
não os sabe comunicar
5-
3 - Construir • Auxilia o engenheiro de software e o cliente
Refinamento
Protótipo a entenderem melhor o que deve ser
do Protótipo
construído

4 - Avaliar
Protótipo
Modelos de Processos de Software >> Ágile
Modelos de Processos de Software >> Ágile
Modelos de Processos de Software >> Ágile

• Justificação
– As regras de negócios mudam rapidamente
– O software tem que ser adaptado para as novas regras
– Desenvolvimento e entrega rápida são importantes em mercados competitivos
– A entrega rápida pode ser tão (ou mais) desejável que a qualidade

• Manifesto Ágil
– Assinado por 17 desenvolvedores em Utah – Fevereiro de 2001
– 4 Valores e 12 Princípios
(https://www.youtube.com/watch?v=rf8Gi2RLKWQ&feature=youtu.be )
Modelos de Processos de Software >> Ágile
Valores

1. Indivíduos e interações, são mais importantes que processos e ferramentas.

2. Software que funciona, é mais importante do que documentação completa e detalhada.

3. Colaboração com o cliente é mais importante do que negociação de contratos.

4. Adaptação a mudanças é mais importante do que seguir o plano inicial.

OBS: É importante notar que não se diz que os itens à direita não são importantes, apenas qual devem ser as prioridades
Modelos de Processos de Software >> Ágile
Princípios

1. A maior prioridade é satisfazer o cliente, através da entrega atempada e contínua de software de valor;
2. Aceitar mudanças de requisitos, mesmo no fim do desenvolvimento. Processos ágeis se adequam a mudanças, para que
o cliente possa tirar vantagens competitivas;
3. Entregar software funcionando com frequência, preferencialmente em semanas;
4. Cooperação diária entre pessoas que entendem do ‘negócio’ e desenvolvedores;
5. Projetos surgem através de indivíduos motivados, entre os quais existe relação de confiança.
6. A maneira mais eficaz e eficiente de transmitir informações são através de conversas cara a cara;
7. Softwares funcionais são a principal medida de progresso do projeto;
8. Processos ágeis promovem um ambiente sustentável. Os patrocinadores, desenvolvedores e usuários, devem ser
capazes de manter indefinidamente, passos constantes;
9. Contínua atenção à excelência técnica e bom design, aumenta a agilidade;
10. Simplicidade é essencial. Cultivar a arte de maximizar a quantidade de trabalho que não precisou ser feito;
11. As melhores arquiteturas, requisitos e projetos emergem de equipas auto-organizadas;
12. Em intervalos regulares, a equipa reflete sobre formas de melhorar. Ajustam e otimizam seu comportamento.
Modelos de Processos de Software >> Ágile
Técnicas e Práticas
Para seguir os valores e princípios do manifesto ágil, as diversas metodologias ágeis costumam utilizar as seguintes técnicas e práticas durante todo o processo:

• Equipas que se auto gerem: É importante que a equipa atue em conjunto para tomar as melhores decisões, ao invés de haver um gestor que dita o caminho.
Há um líder que atua como facilitador;

• Comunicação: É essencial a constante comunicação entre a equipa de desenvolvimento e entre esta e a área de negócio;

• Preferência por Equipas Pequenas: É consenso que equipas pequenas são mais produtivas, evitam conflitos e falhas de comunicação;

• Uso de TDD (Test-Driven Development): É uma técnica que permite a realização de testes contínuos e não apenas na conclusão do sistema;

• Planeamento Incremental: Ao invés de planear o software como um todo, o planeamento é feito de forma sistêmica. O todo é determinado, mas o
planeamento é feito por etapas;

• Entregas menores: Uso de incrementos pequenos de software, entrega de novas funcionalidades em meses ou semanas, ao invés de anos;

• Uso de Refatoração: Melhoria constante do código, tornando-o mais fácil de manter;

• Integração sistêmica continua: Sempre que um incremento está pronto, ele é integrado ao sistema como um todo.
Modelos de Processos de Software >> Ágile

Projetar
Especificar Desenvolver Validar
Arquitetura

Não

Definir Validar
produtos do Completo? Integrar
Sistema
Sistemas

Sim

Entregar
Sistema Final • Processos ágeis são geralmente iterativos
• Seguem uma série de incrementos/entregáveis
• Cada incremento inclui uma nova funcionalidade ao sistema
Modelos de Processos de Software >> Ágile
Vantagens
Para o cliente:

• Mais entrega de Valor ao Negócio, e consequente um melhor ROI (Return On Investment);


• Produto final com melhor qualidade;
• Entregas mais frequentes e regulares, os utilizadores podem ver os resultados parciais do projeto;
• Melhor Time-to-Market gerando um ganho de competitividade;
• Melhor Transparência e Visibidade da situação do projeto;
• Maior flexibilidade a mudanças e ajustes nos requisitos e nas prioridades de entrega.

Para a área de desenvolvimento:

• Melhor comunicação com o cliente e utilizadores finais;


• Antecipação de Problemas e tomadas de decisão mais rápidas;
• Definição de âmbito, objetivos e prioridades mais claros;
• Maior autonomia, responsabilidade e comprometimento das equipas,;
• Melhoria contínua do processo de desenvolvimento.
Modelos de Processos de Software >> Ágile
Desvantagens

• Gestão - Falta documentação para os gestores


• Fechar o contrato com o cliente - Não há especificação completa do sistema
• Validar o sistema - A equipa de verificação e validação não tem a especificação (exige entrosamento de toda a
equipa)
• Modificações contínuas podem corromper a estrutura do sistema
• Comunicação eficaz é necessária
Modelos de Processos de Software >> Ágile

• Indicado Quando Evitar Quando

• Grupos de 2 a 10 programadores • Sistemas grandes e complexos

• Quando as equipas trabalham em locais


• Projetos de 1 a 36 meses distribuídos
(calendário) • A comunicação é mais difícil

• De 1000 a 250 000 linhas de código • Em sistemas críticos


• Não pode haver falhas
• Os requisitos devem ser
completamente especificados
Modelos de Processos de Software >> Ágile
Exemplos

• Dynamic System Development Model (DSDM)

• Feature Driven Development (FDD)

• Enterprise Unified Processo (EUP)

• Scrum

• Crystal

• Programação Extrema (extreme programming - XP)

• Microsoft Solutions Framework (MSF)


Modelos de Processos >> QUAL????
Critérios a ter em conta

• Cultura organizacional e Nacional, do cliente e do fornecedor


• Natureza do projeto e da aplicação
• Dimensão e complexidade do produto
• Tipo de controle que se pretende

Combinação de Modelos
• Os modelos de processos não são mutuamente exclusivos
• Organizações tendem a combinar partes de diferentes modelos em seus processos
Modelação do Software
Definição

• Atividade de construir modelos que expliquem as características ou o comportamento de


um software

•  Implica a construção de modelos gráficos que simbolizam os artefactos dos componentes


de software utilizados e os seus inter-relacionamentos

A modelação normalmente utiliza alguma notação gráfica e são apoiadas por ferramentas
CASE
A abstração do sistema de software através de modelos A maior dificuldade nesta atividade está no equilíbrio
que o descrevem é um poderoso instrumento para o (tradeoff) entre simplicidade (favorecendo a comunicação) e
entendimento e comunicação do produto final que será a complexidade (favorecendo a precisão) do modelo.
desenvolvido.
Modelação do Software
Exemplos

• Modelos de Contexto

• Fluxogramas – Adequado a Programas Procedimentais

• UML - Adequado a Programas orientados a objetos

• BPMN – Adequado para a Modelação de processos de Negócios (Business Process Modelling Notation)

• Modelos de comportamento

• Modelo de Dados (Conceitual, Lógico, Físico)

• Modelos de Objetos
Ferramentas de Software >> CASE
CASE - Computer-Aided Software Engineering – todas as ferramentas baseadas em computadores que auxiliam atividades de
engenharia de software, desde a análise de requisitos e modelação até programação e testes

Classificação
• Front End ou Upper CASE: Apoia as etapas iniciais de criação dos sistemas: as fases de Planeamento, Análise e desenho
• Back End ou Lower CASE: apoia a codificação testes e manutenção da aplicação.
• Integrated CASE (Horizontais): produtos que cobrem todo o ciclo de vida do software, desde os requisitos do sistema até
o controle final da qualidade

Vantagens Desvantagens

• Qualidade no produto final • Manutenção difícil, principalmente para os integrados


• Produtividade
• Agilizar o tempo para tomada de decisão
• Menor quantidade de códigos de programação
• Melhoria e redução de custos na manutenção
• Agilidade no retrabalho do software
• Maior facilidade para desenvolvimento
Ferramentas de Software >> CASE
Tipos de Ferramentas:

• Editor (Microsoft Word, JBuilder, Wiki, Open Office, Eclipse, NetBeans, Rational Rose, Astah Community, ArgoUML…)

• Controle de Versões (CVS, GET, Mercurial…)

• Geração de código (Transformica, Unitech CodeFSW, JEE Spider, IGRP)

• Modelação (Visual Paradigma, Enterprise Arquitect, Rational Rose, Bizagi, DataModeller…)

• Deploy

• Testes automatizados (JUnit, cunit (unitários))

• Prototipagem (AxurePro, Adobe PageMaker, NetBeans, JBuilder, Delphi, Visual Basic, Lazarus, Balsamic)


Resumo

BOKs SWEBOK 15 KAs

Modelação
Ferramentas

Atividades de Cascata
Métodos Desenvolvimento
Camadas

Processos Exemplos Prototipagem

Qualidade 6 Caraterísticas Ágile


Trabalho

• Cada grupo/Pessoa deve pesquisar sobre uma Metodologias Ágil, fazer um


resumo e preparar uma apresentação.

1. Scrum
2. Programação Extrema (extreme programming - XP)
3. Microsoft Solutions Framework (MSF)

Os Processos devem definir


– O que Fazer – Atividades de desenvolvimento de software e os respetivos produtos
– Quem Faz – papel das pessoas envolvidas
– Quando Fazer cada atividade
– Como Fazer
Material Fornecido Leituras Sugeridas
• SWEBOK V3 • Ian Sommerville. Engenharia de Software
• Texto – Agile Software Development Methods Review • Roger Pressman. Engenharia de Software: Uma
• Texto - Compondo Métodos Ágeis de Desenvolvimento de Abordagem Profissional
Software • Agile Software Development Methods Review
• Ferramentas para Instalação • SWEBOK V3 (2010)
– DataModeller • Site da IEEE - http://www.computer.org/
– Bizagi
– Balsamic

Você também pode gostar