Software Seguro
-
Upload
rafael-alves -
Category
Software
-
view
90 -
download
2
description
Transcript of Software Seguro
Engenharia de Software
Grupo 5 – Validação e verificação de
proteção
Membros:
Davi Catunda
Eduardo Rocha
Horta
Rafael Anastácio
Agenda
1. O que é proteção
2. Definição e Importância da Validação e
Verificação
3. Como verificar e validar a proteção de um
software?
4. Papel do Engenheiro de Software
1. O que é proteção
Software Safety:
"É o julgamento das
possibilidades de que o
sistema desenvolvido possa
causar danos aos usuários
ou ao ambiente em uso".
(Sommerville, 2011)
1. O que é proteção
Outra interpretação:
● Protegido contra ataques?
● Dados protegidos?
● Acesso a dados protegido?
● Protegido contra hardware
defeituoso?
1. O que é proteção
Exemplo:
1. O que é proteção
➔O software atende a todos os requisitos
funcionais e não funcionais...
➔… mas será que ele está protegido?
◆ Um software nunca é 100% livre de erros ou
tolerante a falhas;
◆ Alguns erros não percebidos podem passar muito
tempo sem se manifestarem;
1. O que é proteção
➔O software atende a todos os requisitos
funcionais e não funcionais...
➔… mas será que ele está protegido?
(continuação)
◆ Especificação incompleta (não prevê o
comportamento do sistema em situações críticas);
◆ Mau funcionamento de hardware (o sistema passa a
se comportar de maneira não prevista);
1. O que é proteção
➔O software atende a todos os requisitos
funcionais e não funcionais...
➔… mas será que ele está protegido?
(continuação)
◆ Quem utiliza o sistema pode utilizar funcionalidades
do sistema que respondem corretamente ao
solicitado, mas pode levar o sistema a funcionar
incorretamente de uma maneira geral.
1. O que é proteção
➔Por que se preocupar?
◆ O custo da falha;
● Mais barato remover defeitos e erros antes do
software ser entregue do que arcar com custos
dos danos ocasionados por eles.
1. O que é proteção
➔Por que se preocupar? (continuação)
◆ Validação de atributos de proteção.
● Entidades reguladoras;
● Padrões a ser seguidos;
1. O que é proteção
➔Algumas abordagens de proteção:
◆ Evitar o perigo;
◆ Detecção e remoção do perigo;
◆ Limitação dos danos;
2. Definição de Validação &
Verificação
➔ “Doveryai, no proveryai” (“Confie, mas verifique”)
➔ Seu principal objetivo é assegurar que os produtos
cumprem suas especificações e atendem sua utilização
prevista.
➔ Verificação (construir corretamente o produto)◆ Assegurar que o software está sendo desenvolvido de
um modo apropriado e consistente
➔ Validação (construir o produto correto)◆ Visa assegurar que o software cumpre os requisitos e
expectativas estabelecidos pelo cliente
2. Importância da V & V
➔ Ciclo de vida da Falha:
◆ Designers e desenvolvedores são humanos.
◆ Humanos cometem erros.
◆ Erros não detectados causam falhas no sistema.
◆ Falhas afetam a segurança dos dados, os usuários
e deste modo financeiramente o software.
➔ Para quebrar esse ciclo é preciso:
◆ Encontrar e corrigir, o mais cedo possível, os erros
durante todo o desenvolvimento do software.
◆ Ou previni-los com especificações mais rigorosas,
com padrões ou com testes antes da codificação.
O que deve ser validado e verificado
➔ Fatores de qualidade operacionais
◆ Correção, eficiência, robustez, confiabilidade,
usabilidade, utilidade
➔Fatores de qualidade de revisão
◆ Manutenção, evolução e avaliação
➔Fatores de qualidade de transição
◆ Instalação, reutilização e interação
2. Atividades de V & V
➔ Estásticas - análise e checagem de documentos
◆ Inspeção● Análise da representação estática do software para descobrir
problemas
● Pode ser suplementada pelo uso de ferramentas de
documentação e de análise de código
◆ Verificação formal
➔ Dinâmicas - execução de código
◆ Testes (séries de casos de testes)● Detecção de defeitos
● De validação
◆ Verificação automática
2. Inspeção
➔ Podem ser feitas sem a execução do software,
podendo ser feita a qualquer momento.
➔ Etapas
◆ Planejamento: materiais e inspetores são
selecionados
◆ Apresentação e preparação: Grupo recebe
instruções essenciais e se prepara.
◆ Reunião: Os defeitos encontrados são
categorizados
◆ Retrabalho: O autor deve corrigir os erros
◆ Acompanhamento: Os testes são refeitos para
assegurar que nenhum erro foi introduzido.
2. Testes
➔ Etapas:
Planejamento => Especificação dos casos de testes
=>Execução => Análise dos resultados
➔ Técnicas
◆ Funcional (caixa-preta)
◆ Estrutural (caixa-branca)
➔ Estratégias de Testes
◆ Unidade: testar cada modulo separadamente
◆ Integração: testar interfaces entre módulos
◆ Validação
3. Como verificar e validar a
proteção de um software?
➔ Principal referência:
NASA Software Safety Guidebook, 2004.
➔ Safe software does not just “happen”. It is crafted by a
team of software engineers and designers from well-
understood requirements.
➔ 5 regras para o desenvolvimento de software seguro:
1. Comunique-se!
2. Siga boas práticas de programação!
3. Realize análises de segurança e desenvolvimento!
4. Incorpore metodologias, técnicas e design apropriados!
5. "Caveat Emptor"
3. Como verificar e validar a
proteção de um software?
➔ 1. Comunique-se!
➔ Previna desentendimentos: suposições fazem parte da
rotina, mas não são sempre iguais.
➔ Identifique riscos antes que se tornem problemas:
prática do Brainstorming! Um time diversificado
gerencia melhor os riscos e produz as melhores
soluções.
3. Como verificar e validar a
proteção de um software?
➔ 2. Siga boas práticas de programação!
➔ Não existe uma "silver bullet": estude as opções
disponíveis antes de definir quais metodologias
empregar!
➔ Nem sempre as soluções mais modernas são as mais
seguras: processos e técnicas já consolidadas geram
software com menos erros que processos recém
criados.
3. Como verificar e validar a
proteção de um software?
➔ 3. Realize análises de segurança e desenvolvimento!
➔ Análises de segurança do sistema: Têm o objetivo de
exercitar o sistema de tal modo que todas as
funcionalidades e limites sejam testados, e sua
capacidade de suportar falhas seja bem conhecida.
➔ Ao acrescentar código, verificar se erros não foram
inseridos.
➔ E se não houver tempo para testes exaustivos? Testar
todos os casos é praticamente impossível! Utilize a
análise de risco para priorizar testes.
3. Como verificar e validar a
proteção de um software?
➔ 4. Incorpore metodologias, técnicas e design
apropriados!
➔ Alguns consagrados: Design patterns, refatoração,
técnicas de software inspection
➔ Gerenciamento de requisitos (ou Requirement
management): especificação através de requisitos não-
ambíguos, completos, consistentes, verificáveis e
rastreáveis.
3. Como verificar e validar a
proteção de um software?
➔ 5. "Caveat Emptor"
➔ Ao usar algum recurso "off-the-shelf", saiba de suas
possíveis falhas: se não foi programado por você,
considere possíveis falhas! (Incluindo compilador, editor,
debugger…)
➔ Como validar? Não se desespere! Solução: estudo
minucioso de bibliotecas e APIs sendo utilizadas. Saiba
como tais ferramentas podem falhar e verifique!
4. Papel do Engenheiro de Software
➔ O processo de desenvolvimento de software deve ser
um processo disciplinado e planejado
➔ A criação de qualquer software envolve mais do que
simplesmente codificar
➔ É importante existir uma metodologia de
desenvolvimento que inclua a análise dos requisitos,
design e verificação
4. Papel do Engenheiro de Software
➔ Um processo de desenvolvimento de software bem
definido ajuda a assegurar que:
◆ todos os requerimentos foram entendidos, bem
documentados e incorporados no software
◆ todas as funcionalidades estão de fato incorporadas
no sistema e todos os elementos funcionam sem
conflito
◆ a análise e verificação garantem a viabilidade do
produto dentro das condições estabelecidas
4. Papel do Engenheiro de Software
➔ Trabalhar com engenheiros de sistemas e engenheiros
de proteção para ajudar a formular as funcionalidades
do sistema e determinar o papel do software no projeto
➔ Planos completos de gerenciamento e desenvolvimento
◆ horários, resultados, comentários e outros detalhes
◆ ciclo de vida, metodologia, linguagem, normas e
técnicas a serem utilizadas
➔ Analisar os requerimentos e criar especificação
4. Papel do Engenheiro de Software
➔ Criar um design que implementa os requerimentos. A
análise garante que o design será capaz de atingir os
requerimentos funcionais e de performance
➔ Implementação do código e utilização de teste unitário
➔ Testar o software. O teste de aceitação final é feito
quando o sistema está pronto para ser entregue
4. Papel do Engenheiro de Proteção
de Software
➔ Fazer análises ou verificar as análises dos outros. Esse
trabalho de análise se estende durante todo o período
de desenvolvimento do software e durante a fase de
manutenção
➔ Implementar as tarefas encontradas durante o processo
de análise e garantir que serão incluídas nos
requerimentos do software e nas demais fases do
processo de desenvolvimento
4. Papel do Engenheiro de Proteção
de Software
➔ Verificar as mudanças após as correções dos problemas
(normalmente por inspeção ou teste). Além disso, deve
verificar que as mudanças não afetaram negativamente
alguma outra porção do sistema
➔ Sugerir mudanças no processo de desenvolvimento e
nas atividades de verificação para aumentar a proteção
Um bom processo de desenvolvimento, bem entendido e
executado, facilita a criação de um software mais seguro e
confiável