Você está na página 1de 78

O que é a Engenharia de Software?

Áreas de Conhecimento em Engenharia de Software Classific

Introdução à Engenharia de Software

Prof. Fabrício B. Gonçalves

Instituto Federal Fluminense


Campus Bom Jesus do Itabapoana

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 14 de setembro de 2023


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Agenda

1 O que é a Engenharia de Software?

2 Áreas de Conhecimento em Engenharia de Software

3 Classificação de Sistemas de Software

4 Exercícios de Fixação

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 1


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

O que é a Engenharia de Software?

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 2


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

O que é a Engenharia de Software?

Definição
É uma área da Computação destinada a investigar os desafios e propor solu-
ções que permitam desenvolver sistemas de software – principalmente aqueles
mais complexos – de maior tamanho – de forma produtiva e com qualidade.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 3


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Áreas de Conhecimento em Engenharia de


Software

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 4


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Áreas de Conhecimento em Engenharia de Software

De acordo com o Guide to the Software Engineering Body of Knowledge (SWE-


BOK), são doze as áreas de conhecimento em Engenharia de Software:
• Requisitos de Software; • Processos de Engenharia de
• Projeto de Software; Software;
• Modelos e Métodos de
• Construção de Software;
Engenharia de Software;
• Testes de Software;
• Qualidade de Software;
• Manutenção de Software;
• Prática Profissional de Engenharia
• Gerência de Configuração; de Software;
• Gerência de Engenharia de • Economia de Engenharia de
Software; Software.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 5


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Engenharia de Requisitos

Engenharia de Requisitos

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 6


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Engenharia de Requisitos

Áreas de Conhecimento em Engenharia de Software


Engenharia de Requisitos

Definição
Requisitos de software é a área de conhecimento preocupada com a elicita-
ção, especificação, e validação de requisitos de software, bem como o gerenci-
amento dos requisitos durante todo o ciclo de vida do produto de software.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 7


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Engenharia de Requisitos

Áreas de Conhecimento em Engenharia de Software


Engenharia de Requisitos: Requisitos

Requisitos
Os requisitos de um software definem o que ele deve fazer e como ele deve
operar. Os requisitos podem ser funcionais ou não funcionais.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 8


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Engenharia de Requisitos

Áreas de Conhecimento em Engenharia de Software


Engenharia de Requisitos: Requisitos Funcionais

Definição
Os requisitos funcionais definem o que um software deve fazer, ou seja, quais
as funcionalidades e/ou serviços ele deve implementar.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 9


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Engenharia de Requisitos

Áreas de Conhecimento em Engenharia de Software


Engenharia de Requisitos: Requisitos Não-Funcionais

Definição
Os requisitos não-funcionais definem como um software deve operar, sob
quais restrições e com qual qualidade de serviço. São exemplos de requisitos
não funcionais: desempenho, disponibilidade, tolerância a falhas, segurança,
privacidade, interoperabilidade, capacidade, manutenabilidade e usabilidade.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 10


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Engenharia de Requisitos

Áreas de Conhecimento em Engenharia de Software


Engenharia de Requisitos: Exemplo

Suponha um software de home-banking.

Requisitos Funcionais Requisitos Não-Funcionais


• Informar o saldo da conta bancária; • Desempenho: informar o saldo da
• Informar o extrato da conta bancária; conta em menos de 3 segundos;
• Disponibilidade: estar no ar 99% do
• Realizar transferências entre contas
tempo;
bancárias;
• Tolerância a falhas: continuar
• Pagar um boleto bancário;
operando mesmo se um determinado
• Cancelar um cartão de crédito; data center cair;
• Bloquear cartão de crédito; • Segurança: criptografar todos os
• Consultar fatura do cartão de crédito; dados trocados com as agências;
• Simular financiamento de veículo novo; • Privacidade: não disponibilizar dados
dos clientes para terceiros;
• Realizar financiamento de veículo
• Interoperabilidade: integrar-se com o
novo;
sistema do banco central;
• Cadastrar chave PIX;
• Usabilidade: ter uma versão para
• Gerar chave PIX aleatória. deficientes visuais.
Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 11
O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Projeto de Software

Projeto de Software

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 12


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Projeto de Software

Áreas de Conhecimento em Engenharia de Software


Projeto de Software

Definição
Projeto de software se preocupa com o processo de definição da arquitetura,
componentes, interfaces e outras características de um sistema ou componente
de software.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 13


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Projeto de Software

Áreas de Conhecimento em Engenharia de Software


Projeto de Software: Atividades do Projeto de Software

Projeto de software consiste de duas atividades:


• Projeto Arquitetural de Software;
• Projeto Detalhado de Software.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 14


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Projeto de Software

Áreas de Conhecimento em Engenharia de Software


Projeto de Software: Projeto Arquitetural de Software

Definição
Projeto arquitetural de software desenvolve a estrutura de alto nível e orga-
nização do software, e identifica os vários componentes do software.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 15


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Projeto de Software

Áreas de Conhecimento em Engenharia de Software


Projeto de Software: Projeto Detalhado de Software

Definição
Projeto detalhado de software preocupa-se em especificar cada componente
de software com maior detalhamento possível para facilitar sua construção.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 16


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Projeto de Software

Áreas de Conhecimento em Engenharia de Software


Projeto de Software: Interfaces de Software

Durante a execução das atividades de projeto de software, são definidas as


interfaces do software, incluindo:
• Interfaces Providas: são aqueles serviços que uma unidade de código
torna público para uso pelo resto do software;
• Interfaces Requeridas: são aquelas interfaces das quais uma unidade
de código depende para funcionar.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 17


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Projeto de Software

Áreas de Conhecimento em Engenharia de Software


Projeto de Software: Exemplo

Implementação de uma classe 1 ContaBancaria oferece uma interface


class ContaBancaria { para as demais classes do sistema,
private Cliente cliente; por meio de três métodos públicos, que
private double saldo; constituem a interface provida pela
classe;
public double getSaldo() {
... 2 ContaBancaria também depende de
} outra classe, Cliente; logo, a interface
public String getNomeCliente() { de Cliente é uma interface requerida
... por ContaBancaria;
}
public String getExtrato (Date inicio) { 3 Muitas vezes, as interfaces requeridas
... são chamadas de dependências. Isto
} é, ContaBancaria possui uma depen-
... dência para Cliente.
}

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 18


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Construção de Software

Construção de Software

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 19


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Construção de Software

Áreas de Conhecimento em Engenharia de Software


Construção de Software

Definição
A construção de software preocupa-se com a construção detalhada do soft-
ware mediante a combinação de codificação, verificação, testes unitários, tes-
tes de integração e depuração. Esta área de conhecimento está ligada às
outras áreas de conhecimento da engenharia de software, mas é fortemente
ligada às áreas de Projeto de Software e Teste de Software.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 20


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Construção de Software

Áreas de Conhecimento em Engenharia de Software


Construção de Software: Exemplo

Exemplo
Durante a construção de um software, os engenheiros de software precisam
tomar diversas decisões, como, por exemplo:
• Definir algoritmos e estruturas de dados que serão usadas;
• Definir frameworks e bibliotecas de terceiros que serão usados;
• Definir técnicas de tratamento de exceções;
• Definir padrões de nomes, layout e documentação de código;
• Definir as ferramentas que serão usadas no desenvolvimento, incluindo
compiladores, ambientes integrados de desenvolvimento (IDEs), depura-
dores, gerenciadores de bancos de dados, ferramentas para construção
de interfaces, etc.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 21


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Testes de Software

Testes de Software

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 22


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Testes de Software

Áreas de Conhecimento em Engenharia de Software


Testes de Software

Definição
Testes de Software preocupa-se com a verificação de um software, a fim de
que ele forneça os comportamentos esperados com base em um conjunto finito
de casos de testes, adequadamente selecionados de um domínio de execução
geralmente finito.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 23


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Testes de Software

Áreas de Conhecimento em Engenharia de Software


Testes de Software

De forma introdutória acerca de testes de software, pelo menos três pontos


podem ser comentados nesse momento:
• Tipos de testes;
• Verificação e validação de software;
• Defeitos, bugs e falhas.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 24


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Testes de Software

Áreas de Conhecimento em Engenharia de Software


Testes de Software: Tipos de Testes

Dentre diversos tipos de testes, destacam-se os seguintes:


• Testes de unidade: utilizados para testar uma pequena unidade de có-
digo;
• Testes de integração: utilizados para testar uma unidade de código de
maior granularidade, como um módulo de software;
• Testes de performance: utilizados para submeter o software a uma carga
de processamento para verificar seu desempenho;
• Testes de usabilidade: utilizados para testar a usabilidade da interface
do software.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 25


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Testes de Software

Áreas de Conhecimento em Engenharia de Software


Verificação e Validação de Software

Definições
• A Validação de Software é a atividade que usa testes com o objetivo de
garantir que um software atende à sua especificação;
• A Verificação de Software é a atividade que usa testes com o objetivo de
garantir que um sistema atende às necessidades de seus clientes.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 26


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Testes de Software

Áreas de Conhecimento em Engenharia de Software


Verificação e Validação de Software

Verificação X Validação
Existem duas frases, muito usadas, que resumem as diferenças entre verifica-
ção e validação:
• Verificação: estamos implementando o sistema corretamente? Isto é, de
acordo com os requisitos.
• Validação: estamos implementando o sistema correto? Isto é, aquele que
os clientes ou o mercado está querendo.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 27


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Testes de Software

Áreas de Conhecimento em Engenharia de Software


Defeitos, Bugs e Falhas

1 Esse código possui um defeito, pois a


Cálculo da Área de um Círculo área de um círculo é pi vezes raio ao
quadrado, e não ao cubo;
double calcAreaCirculo(double raio) {
2 Bug é um termo mais informal, usado
double area = -1; com objetivos às vezes diversos. Mas
o uso mais comum é como sinônimo de
if (raio > 0) { defeito;
area = 3.14 * (raio * raio * raio);
} 3 Uma falha ocorre quando um código
com defeito for executado – por exem-
return area; plo, a condição do if do programa
acima for verdadeira – e, com isso, le-
} var o programa a apresentar um resul-
tado incorreto.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 28


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Testes de Software

Áreas de Conhecimento em Engenharia de Software


Defeitos, Bugs e Falhas

Resumindo
O código defeituoso é aquele que não está de acordo com a sua especificação.
Se esse código for executado e de fato levar o programa a apresentar um re-
sultado incorreto, dizemos que ocorreu uma falha.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 29


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Manutenção e Evolução do Software

Manutenção e Evolução do Software

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 30


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Manutenção e Evolução do Software

Áreas de Conhecimento em Engenharia de Software


Manutenção e Evolução de Software

Definição
Uma vez que o software tenha sido criado e entregue, Manutenção e Evo-
lução de Software preocupa-se com as melhorias e atualizações para que a
qualidade do produto de software se matenha.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 31


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Manutenção e Evolução do Software

Áreas de Conhecimento em Engenharia de Software


Manutenção e Evolução de Software

São quatro os tipos de manutenção realizadas em software:


• Corretiva;
• Preventiva;
• Refactoring;
• Evolutiva.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 32


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Manutenção e Evolução do Software

Áreas de Conhecimento em Engenharia de Software


Manutenção e Evolução de Software: Manutenção Corretiva

Definição
Manutenção corretiva é aquela que tem como objetivo corrigir bugs reporta-
dos por usuários ou outros desenvolvedores.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 33


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Manutenção e Evolução do Software

Áreas de Conhecimento em Engenharia de Software


Manutenção e Evolução de Software: Manutenção Preventiva

Definição
Manutenção preventiva é aquela que tem como objetivo corrigir bugs latentes
no código, que ainda não causaram falhas junto aos usuários do sistema.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 34


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Manutenção e Evolução do Software

Áreas de Conhecimento em Engenharia de Software


Manutenção e Evolução de Software: Manutenção Preventiva

Exemplo de Manutenção Preventiva


Um exemplo de manutenção preventiva foram as atividades de manutenção
realizadas por diversas empresas antes da virada do último milênio, de 1999
para 2000. Nessa época, diversos sistemas armazenavam o ano de uma data
com dois dígitos, isto é, as datas tinham o formato DD-MM-AA. As empresas
ficaram receosas de que, em 2000 e nos anos seguintes, algumas operações
envolvendo datas retornassem valores incorretos, pois uma subtração 00 - 99,
por exemplo, poderia dar um resultado inesperado. As empresas montaram
então grupos de trabalho para realizar manutenções em seus sistemas e con-
verter todas as datas para o formato DD-MM-AAAA. Como essas atividades
foram realizadas antes da virada do milênio, elas são um exemplo de manuten-
ção preventiva.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 35


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Manutenção e Evolução do Software

Áreas de Conhecimento em Engenharia de Software


Manutenção e Evolução de Software: Manutenção Adaptativa

Definição
Manutenção adaptativa é aquela que tem como objetivo adaptar um sistema
a uma mudança em seu ambiente, incluindo tecnologia, legislação, regras de
integração com outros sistemas ou demandas de novos clientes.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 36


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Manutenção e Evolução do Software

Áreas de Conhecimento em Engenharia de Software


Manutenção e Evolução de Software: Manutenção Adaptativa

Exemplo de Manutenção Adaptativa


Como exemplos de manutenção adaptativa cita-se:
• A migração de um sistema de Python 2.7 para Python 3.0;
• A customização de um sistema para atender a requisitos de um novo
cliente — isto é, quando se instala um sistema em um cliente é comum ter
que realizar algumas alterações, para atender a particularidades de seu
negócio;
• A adaptação de um sistema para atender a uma mudança de legislação
ou outra mudança contextual.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 37


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Manutenção e Evolução do Software

Áreas de Conhecimento em Engenharia de Software


Manutenção e Evolução de Software: Refactorings

Definição
Refactoring são modificações realizadas em um software preservando seu
comportamento e visando exclusivamente a melhoria de seu código ou pro-
jeto.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 38


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Manutenção e Evolução do Software

Áreas de Conhecimento em Engenharia de Software


Manutenção e Evolução de Software: Refactoring

Exemplo de Refactoring
São exemplos de refactorings:
• Operações como renomeação de método ou variável (para um nome mais
intuitivo e fácil de lembrar);
• Divisão de um método longo demais dois métodos menores (para facilitar
o entendimento);
• Movimentação de um método para uma classe apropriada.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 39


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Manutenção e Evolução do Software

Áreas de Conhecimento em Engenharia de Software


Manutenção e Evolução de Software: Manutenção Evolutiva

Definição
Manutenção evolutiva é aquela realizada para incluir uma nova funcionalidade
ou introduzir aperfeiçoamentos importantes em funcionalidades existentes.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 40


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Gerência de Configuração

Gerência de Configuração

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 41


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Gerência de Configuração

Áreas de Conhecimento em Engenharia de Software


Gerência de Configuração

Definição
Gerência de Configuração preocupa-se com definição de um conjunto de polí-
ticas para gerenciar diversas versões de um software, identificando a configura-
ção de um software em diferentes pontos ao longo do tempo, a fim de controlar
sistematicamente as mudanças na configuração e manter a integridade e ras-
trabilidade da configuração ao longo do ciclo de vida do software.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 42


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Gerência de Engenharia de Software

Gerência de Engenharia de Software

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 43


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Gerência de Engenharia de Software

Áreas de Conhecimento em Engenharia de Software


Gerência de Engenharia de Software

Definição
Gerência de Engenharia de Software preocupa-se com aplicação de ativi-
dades de gerenciamento (planejamento, coordenação, mensuração, monitora-
mento, controle e registro) para garantir que produtos de software e serviços
de engenharia de software sejam entregues de forma eficiente e efetiva para
os stakeholders.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 44


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Gerência de Engenharia de Software

Áreas de Conhecimento em Engenharia de Software


Gerência de Engenharia de Software: Stakeholders

Stakeholders
Em um projeto, normalmente usa-se o termo stakeholder para designar todas
as partes interessadas no mesmo; ou seja, os stakeholders são aqueles que
afetam ou que são afetados pelo projeto, podendo ser pessoas físicas ou orga-
nizações.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 45


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Gerência de Engenharia de Software

Áreas de Conhecimento em Engenharia de Software


Gerência de Engenharia de Software: Exemplos

Exemplos de stakeholders
Stakeholders comuns em projetos de software incluem:
• Seus desenvolvedores e seus clientes;
• Gerentes da equipe de desenvolvimento; ’
• Empresas subcontratadas;
• Fornecedores de qualquer natureza;
• Talvez algum nível de governo, etc.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 46


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Processo de Engenharia de Software

Processo de Engenharia de Software

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 47


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Processo de Engenharia de Software

Áreas de Conhecimento em Engenharia de Software


Processo de Engenharia de Software

Definição
Processo de Engenharia de Software preocupa-se com as atividades de tra-
balho realizadas por engenheiros de software dentro do ciclo de vida de soft-
ware, levantamento de requisitos, análise, projeto, codificação, testes, implan-
tação e manutenção.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 48


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Modelos e Métodos de Engenharia de Software

Modelos e Métodos de Engenharia de


Software

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 49


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Modelos e Métodos de Engenharia de Software

Áreas de Conhecimento em Engenharia de Software


Modelos e Métodos de Engenharia de Software

Definição
Modelos e Métodos de Engenharia de Software preocupa-se em impor es-
trutura à engenharia de software com o objetivo de tornar essa atividade siste-
mática, repetível e, em última análise, mais orientada a sucesso.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 50


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Modelos e Métodos de Engenharia de Software

Áreas de Conhecimento em Engenharia de Software


Modelos e Métodos de Engenharia de Software: Modelos x Métodos

Modelos X Métodos
• Modelos fornecem uma abordagem para a solução de problemas,
notações e procedimentos para construção e análise de modelos.
• Métodos fornecem uma abordagem para a especificação sistemática,
projeto, construção, teste e verificação de software.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 51


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Modelos e Métodos de Engenharia de Software

Áreas de Conhecimento em Engenharia de Software


Modelos e Métodos de Engenharia de Software: Exemplos

Exemplo de modelo

Diagrama de classes UML

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 52


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Modelos e Métodos de Engenharia de Software

Áreas de Conhecimento em Engenharia de Software


Modelos e Métodos de Engenharia de Software: Exemplos

Exemplo de método
São exemplos de métodos de engenharia de software:
• XP (eXtreme Programming);
• Scrum;
• Lean Software Development;
• etc.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 53


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Qualidade de Software

Qualidade de Software

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 54


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Qualidade de Software

Áreas de Conhecimento em Engenharia de Software


Qualidade de Software

Definição
Qualidade de Software preocupa-se em garantir a qualidade do software por
meio da definição e normatização de processos de engenharia de software.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 55


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Qualidade de Software

Áreas de Conhecimento em Engenharia de Software


Qualidade de Software

A qualidade de um software pode ser avaliada em duas dimensões:


• Qualidade externa;
• Qualidade interna.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 56


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Qualidade de Software

Áreas de Conhecimento em Engenharia de Software


Qualidade de Software: Qualidade Externa

Definição
Qualidade Externa considera fatores que podem ser aferidos sem analisar o
código, tais como correção, robustêz, eficiência, portabilidade, facilidade e com-
patibilidade.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 57


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Qualidade de Software

Áreas de Conhecimento em Engenharia de Software


Qualidade de Software: Qualidade Interna

Definição
Qualidade Interna considera propriedades e características relacionadas com
a implementação de um sistema, tais como modularidade, legibilidade de có-
digo, manutenibilidade e testabilidade.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 58


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Prática Profissional de Engenharia de Software

Prática Profissional de Engenharia de


Software

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 59


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Prática Profissional de Engenharia de Software

Áreas de Conhecimento em Engenharia de Software


Prática Profissional de Engenharia de Software

Definição
Prática Profissional de Engenharia de Software preocupa-se com o conhe-
cimento, habilidades e atitudes que os engenheiros de software devem possuir
para praticar a engenharia de software de maneira profissional, responsável e
ética.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 60


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Prática Profissional de Engenharia de Software

Áreas de Conhecimento em Engenharia de Software


Prática Profissional de Engenharia de Software: Exemplo

Código de Ética da IEEE Computer Society


Engenheiros de Software devem se comprometer em fazer da análise, especi-
ficação, projeto, desenvolvimento, teste e manutenção de software uma profis-
são benéfica e respeitada.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 61


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Prática Profissional de Engenharia de Software

Áreas de Conhecimento em Engenharia de Software


Prática Profissional de Engenharia de Software: Exemplo

Código de Ética da Sociedade Brasileira de Computação


Art. 1º: Contribuir para o bem-estar social, promovendo, sempre que possível,
a inclusão de todos os setores da sociedade.

Art. 2º: Exercer o trabalho profissional com responsabilidade, dedicação, ho-


nestidade e justiça, buscando sempre a melhor solução.

Art. 3º: Esforçar-se para adquirir continuamente competência técnica e profis-


sional, mantendo-se sempre atualizado com os avanços da profissão.

Art. 4º: Atuar dentro dos limites de sua competência profissional e orientar-se
por elevado espírito público.

Art. 5º: Guardar sigilo profissional das informações a que tiver acesso em
decorrência das atividades exercidas.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 62


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Prática Profissional de Engenharia de Software

Áreas de Conhecimento em Engenharia de Software


Prática Profissional de Engenharia de Software: Exemplo

Código de Ética da Sociedade Brasileira de Computação (Cont.)


Art. 6º: Conduzir as atividades profissionais sem discriminação, seja de raça,
sexo, religião, nacionalidade, cor da pele, idade, estado civil ou qualquer outra
condição humana.

Art. 7º: Respeitar a legislação vigente, o interesse social e os direitos de tercei-


ros.

Art. 8º: Honrar compromissos, contratos, termos de responsabilidade, direitos


de propriedade, copyrights e patentes.

Art. 9º: Pautar sua relação com os colegas de profissão nos princípios de
consideração, respeito, apreço, solidariedade e da harmonia da classe.

Art. 10º: Não praticar atos que possam comprometer a honra, a dignidade e
privacidade de qualquer pessoa.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 63


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Prática Profissional de Engenharia de Software

Áreas de Conhecimento em Engenharia de Software


Prática Profissional de Engenharia de Software: Exemplo

Código de Ética da Sociedade Brasileira de Computação (Cont.)


Art. 11º: Nunca se apropriar de trabalho intelectual, iniciativas ou soluções
encontradas por outras pessoas.

Art. 12º: Zelar pelo cumprimento deste código.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 64


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Economia de Engenharia de Software

Economia de Engenharia de Software

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 65


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Economia de Engenharia de Software

Áreas de Conhecimento em Engenharia de Software


Economia de Engenharia de Software

Definição
Economia de Engenharia de Software preocupa-se com a tomada de deci-
sões em um contexto de negócios.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 66


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Classificação de Sistemas de Software

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 67


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Classificação de Sistemas de Softwares

Os três tipos principais de software são os seguintes:


• Sistemas A (Acute ou Missão Crítica);
• Sistemas B (Business);
• Sistemas C (Casuais).

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 68


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Sistemas A (Acute ou Missão Crítica)

Sistemas A (Acute ou Missão Crítica)

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 69


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Sistemas A (Acute ou Missão Crítica)

Classificação de Sistemas de Softwares


Sistemas A (Acute ou Missão Crítica)

Definição
São sistemas nos quais qualquer falha pode causar um imenso prejuízo, in-
cluíndo a perda de vidas humanas. São sistemas para controlar um carro autô-
nomo, uma usina nuclear, um avião, os equipamentos de uma UTI, um trem de
metrô, etc.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 70


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Sistemas B (Business)

Sistemas B (Business)

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 71


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Sistemas B (Business)

Classificação de Sistemas de Softwares


Sistemas B (Business)

Definição
São sistemas que incluem as mais variadas aplicações corporativas (financei-
ras, recursos humanos, logística, vendas, contabilidade, etc.), sistemas Web
dos mais variados tipos, biblioteca e frameworks de software, aplicações de
uso geral (editores de texto, planilhas, editores de imagem) e sistemas de soft-
ware básico (compiladores, gerenciadores de bancos de dados, IDEs, etc.).

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 72


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Sistemas C (Casuais)

Sistemas C (Casuais)

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 73


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Sistemas C (Casuais)

Classificação de Sistemas de Softwares


Sistemas C (Casuais)

Definição
São sistemas que podem ter alguns bugs, os quais não vão comprometer fun-
damentalmente o seu funcionamento, tais como um script feito para um traba-
lho acadêmico, um programa de conversão de dados, um sistema para controlar
os sócios do Diretório Acadêmico da universidade, um sistema para gerenciar
as salas disponíveis para reuniões em uma empresa.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 74


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Exercícios de Fixação

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 75


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Exercícios de Fixação

1 Segundo Frederick Brooks, desenvolvimento de software enfrenta dificuldades es-


senciais (para as quais não há bala de prata) e acidentais (para as quais existe
uma solução melhor). Dê um exemplo de dificuldade acidental que já tenha experi-
mentado ao desenvolver programas, mesmo que pequenos. Sugestão: elas podem
estar relacionadas a ferramentas que tenha usado, como compiladores, IDEs, ban-
cos de dados, sistemas operacionais, etc.

2 Diferencie requisitos funcionais de requisitos não-funcionais.

3 Explique por que testes podem ser considerados tanto uma atividade de verificação
como de validação de software. Qual tipo de teste é mais adequado se o objetivo for
verificação? Qual tipo de teste é mais adequado se o objetivo for validar um sistema
de software?

4 Por que testes não conseguem provar a ausência de bugs?

5 Suponha um programa que tenha uma única entrada: um inteiro de 64 bits. Em


um teste exaustivo, temos que testar esse programa com todos os possíveis inteiros
(logo, 264). Se cada teste levar 1 nanossegundo (10-9 segundos), quanto tempo
levará esse teste exaustivo?

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 76


O que é a Engenharia de Software? Áreas de Conhecimento em Engenharia de Software Classific

Exercícios de Fixação

6 Se considerarmos o contexto histórico, por que foi natural que os primeiros proces-
sos de desenvolvimento de software tivessem características sequenciais e fossem
baseados em planejamento e documentação detalhados?

7 Alguns estudos mostram que os custos com manutenção e evolução podem alcan-
çar 80% ou mais dos custos totais alocados a um sistema de software, durante todo
o seu ciclo de vida. Explique por que esse valor é tão alto.

8 Refactoring é uma transformação de código que preserva comportamento. Qual o


significado da expressão preservar comportamento? Na prática, qual restrição ela
impõe a uma operação de refactoring?

9 Dê exemplos de sistemas A (Acute, ou críticos) e B (Business, ou comerciais) com


os quais já tenha interagido.

10 Dê exemplos de sistemas C (casuais) que você já tenha desenvolvido.

Prof. Fabrício B. Gonçalves Introdução à Engenharia de Software 77

Você também pode gostar