Engenharia de Software Fidedigno
Arndt von Staa
Departamento de Informática
PUC-Rio
Abril 2009
Especificação
• Objetivo
– persuadir os participantes que vale a pena estudar assuntos
relacionados com prevenção de defeitos, dos pontos de vista:
– acadêmico
– econômico, ou empresarial
– equipe técnica e usuário.
• Justificativa
– desenvolvimento e manutenção de software ainda é intensivo
em labor humano. Humanos são falíveis. Logo, é de se esperar
que software contenha (muitos?) defeitos.
– o que fazer para reduzir o número de defeitos remanescentes
ao disponibilizar o software?
– o que fazer para que o desenvolvimento de software continue a
ser uma atividade motivante?
• e prazerosa
Abr 2009

Arndt von Staa © LES/PUC-Rio
2 / 25
Terminologia
Resultados
Dados
Usuário
Produtor
cria elemento
Elemento
Falha
g
j
e
c
h
a
?
Observador
de erros
?
b
d
f
Defeito
Erro
Causa
endógena
provoca
um erro
?
i
?
Sistema
Engano do produtor
introduz defeito
Abr 2009
k
Lesão
(conseqüência
de erro não
observado)
Causa exógena
provoca um erro
Arndt von Staa © LES/PUC-Rio
3 / 25
Fidedignidade
Fidedignidade é definida como sendo a fidelidade
de um sistema intensivo em software de modo
que se possa justificavelmente depender dele
assumindo riscos (de danos) compatíveis com o
serviço por ele prestado.
•
•
fidedigno (Adjetivo) 1.Digno de fé; merecedor de crédito
fidelidade (Substantivo feminino) 3.Observância rigorosa da verdade; exatidão.
4.Fís. Propriedade duma balança que assume sempre a mesma posição quando
solicitada pelas mesmas forças.
Avizienis, A.; Laprie, J-C.; Randell, B.; "Dependability and Its Threats: A Taxonomy"; in: Jacquart, R.; eds.;
Proceedings of the IFIP 18th World Computer Congress: Building the Information Society; Dordrecht:
Kluwer; 2004; pags 91-120
Weinstock, C.B.; Goodenough, J.B.; Hudak, J.J.; Dependability Cases; CMU/SEI -2004-TN-016, Software
Engineering Institute, Carnegie Mellon University; 2004
Abr 2009
Arndt von Staa © LES/PUC-Rio
4 / 25
Características da fidedignidade, básicas
Disponibilidade:
Confiabilidade:
Segurança:
Proteção:
Privacidade:
Integridade:
Escalabilidade:
estar pronto para prestar serviço correto sempre
que solicitado
prestar continuamente serviço correto
(safety) habilidade de evitar conseqüências
catastróficas tanto aos usuários como ao ambiente
habilidade de evitar o sucesso de tentativas de
agressão
habilidade de proteger dados e código contra
acesso (uso) indevido acidental ou deliberada
habilidade de proteger dados e código contra
corrupção (ausência de alterações não permitidas)
acidental ou deliberada
habilidade da capacidade de processamento do
software crescer junto com o crescimento da
demanda
As características são adaptadas de (Avizienis, 2004) e de outros autores.
São portanto mais abrangentes do que as do autor citado
Abr 2009
Arndt von Staa © LES/PUC-Rio
5 / 25
Características da fidedignidade, tolerância
Robustez:
habilidade de, em tempo de execução, detectar
falhas de modo que as conseqüências (danos)
possam ser mantidas em um patamar aceitável
(um software robusto não permite lesões)
Resiliência:
habilidade de, em tempo de execução, amoldar-se
a condições anormais de funcionamento (tais como
erros endógenos ou exógenos) e recuperar-se
delas sem comprometer a sua fidedignidade
Recuperabilidade: habilidade em ser rapidamente reposto em
operação fidedigna preventivamente ou após a
ocorrência de uma falha.
Abr 2009
Arndt von Staa © LES/PUC-Rio
6 / 25
Características da fidedignidade, evolução
Manutenibilidade: habilidade de ser modificado ou corrigido sem que
novos defeitos sejam inseridos
– correção e melhorias – corrigibilidade
(argh!)
– adaptação e evolução – evolutibilidade
– habilidade de ser evoluído e corrigido com facilidade
– manutenção preventiva
Longevidade:
Abr 2009
habilidade do software e dos dados persistentes
por ele utilizados terem vida longa, evoluindo junto
com a plata-forma e a tecnologia utilizada para a
sua implementação
Arndt von Staa © LES/PUC-Rio
7 / 25
Características da fidedignidade, controle
Verificabilidade , Validabilidade , Aprovabilidade
habilidade de ter sua qualidade controlada com
facilidade e suficiente rigor sempre que desejado
Testabilidade habilidade de ser testado com o rigor necessário e
sempre que desejado – uma forma de realizar
(parcialmente) as três características anteriores
Detectabilidade
habilidade do software em execução observar
erros, iniciando alguma operação de recuperação
ou de prevenção de danos
Diagnosticabilidade
facilidade de determinar a causa de uma falha
Depurabilidade
facilidade de remover correta e completamente os
defeitos diagnosticados
Disponibilizabilidade
(argh!) facilidade de distribuir e por em uso
correto as novas versões
Abr 2009
Arndt von Staa © LES/PUC-Rio
8 / 25
Crenças
• Não se pode esperar que sistemas não contenham defeitos
– caso um sistema não contenha defeitos não o saberemos
• algumas vezes podemos saber se módulos têm defeitos ou não
• Mesmo sistemas perfeitos podem falhar
– falhas provocadas por causas exógenas
• mau uso, deliberado ou não
• falhas de hardware
• falhas da plataforma de software usada
• As características de fidedignidade não podem ser
adicionadas a posteriori
– as características precisam ser especificadas, arquitetadas,
projetadas etc. junto com os requisitos funcionais
– para atingir bons níveis de fidedignidade deve-se
• prevenir a inserção de defeitos
• controlar as falhas de causas exógenas
Abr 2009
Arndt von Staa © LES/PUC-Rio
9 / 25
Objetivos de qualidade
• Qualidade por construção
– Um artefato possui qualidade por construção caso possua qualidade
satisfatória, considerando todas as propriedades relevantes, antes do
primeiro teste
isto é um ideal, devemos tentar
• não contém defeitos
nos aproximar dele
• Qualidade por desenvolvimento
– Um artefato possui qualidade por desenvolvimento caso possua
qualidade satisfatória, considerando todas as propriedades relevantes,
antes de ser posto em uso
• podem sobrar defeitos não conhecidos!
• Qualidade por manutenção
– Um artefato possui qualidade por manutenção caso possua qualidade
satisfatória, considerando todas as propriedades relevantes, antes de
ser reposto em uso
• podem ser adicionados defeitos não conhecidos!
Abr 2009
Arndt von Staa © LES/PUC-Rio
10 / 25
O que realmente interessa
• O foco de interesse são as tarefas que o usuário realiza no
contexto da organização em que atua
– o usuário não quer meramente usar um artefato (sistema)
– o usuário quer realizar adequadamente uma tarefa com o apoio do artefato
Foco de interesse
Conseqüência
Usuário
Processo da
organização 1
Resultados
Dados
persistentes
Artefato
Processo da
organização 2
Controles
e dados
Interação com
outros artefatos
Outros
artefatos
Abr 2009
Arndt von Staa © LES/PUC-Rio
11 / 25
Observações sobre o estado da prática
• Bibliotecas de classes são freqüentemente não confiáveis
Thomas, D.; “The Deplorable State of Class Libaries”; Journal of Object Technology 1(1); Zürich, CH:
ETH Zürich; 2002; pags 21-27
• Cerca de 50% do software posto em uso contém defeitos
não triviais
• Entre 40 e 50% do esforço de desenvolvimento é gasto em
retrabalho inútil
• Disciplina individual pode reduzir a taxa de introdução de
defeitos em cerca de 75%
– boas práticas?
Boehm, B.W.; Basili, V.R.; “Software Defect Reduction Top 10 List”; IEEE Computer 34(1); Los Alamitos,
CA: IEEE Computer Society; 2001; pags 135-137
• Variação de produtividade entre indivíduos: 1:20 a 1:35
Glass, R.L.; “A Follow-the-Leader Story with a Strange Ending”; IEEE Software 22(6); Los Alamitos, CA:
IEEE Computer Society; 2005; pags 111-112
Abr 2009
Arndt von Staa © LES/PUC-Rio
12 / 25
Observações sobre o estado da prática
• Custos estimados da falta de qualidade (EEUU)
– Baseado em surveys envolvendo desenvolvedores e usuários, o
custo anual decorrente de um a infra estrutura inadequada
para o teste é estimada estar entre US$ 22.2 (12%) e
US$ 59.5 (33%) billion.
– Estatísticas EUA (2000)
• mercado de total aproximadamente US$180 billion
• cerca de 697,000 engenheiros de software mais cerca de 585,000
programadores
NIST; The Economic Impacts of Inadequate Infrastructure for Software Testing; Planning Report 02-3;
National Institute of Standards & Technology Program Office; Strategic Planning and Economic Analysis
Group; May 2002
Abr 2009
Arndt von Staa © LES/PUC-Rio
13 / 25
Produtividade
• Produtividade é medida como o volume (dimensão) de
funcionalidade de qualidade satisfatória por unidade de
tempo (ou de custo, ou de esforço)
• Não interessa somente a qualidade, interessa também a
produtividade, uma
Custo decorrente de falhas
vez que esta tem
impacto direto
Custo total
sobre a economia
do negócio
Valor do serviço
Custo do desenvolvimento
Perda por falta
de qualidade
C
u
s
t
o
Perda por excesso
de qualidade
Valor líqüido
Qualidade assegurada
Abr 2009
Arndt von Staa © LES/PUC-Rio
14 / 25
Produtividade
• Produtividade é conseqüência da qualidade
– Grande parte do esforço de desenvolvimento é perdido em
retrabalho inútil
– Retrabalho inútil é provocado pelos enganos dos
desenvolvedores
– Corretude por desenvolvimento aumenta a produtividade
• automação do controle contínuo da qualidade
• Produtividade através da redução do trabalho
– uso de geradores e transformadores
• linguagens (gráficas) de nível mais alto do que as que usamos hoje
– uso de software parcialmente pronto
• bibliotecas
• arcabouços (frameworks)
• componentes
• linhas de produto
Abr 2009
Arndt von Staa © LES/PUC-Rio
15 / 25
Causa e efeito para software fidedigno
Instrumentos
Controle da qualidade
Padrões e
Normas
Revisões
Inadequação
do instrumento
Especificação
Interação ativa
com os usuários
Informais
Inspeções
Aprovação a Não registradas
Verificação
cada iteração
“Deixa comigo”
estática
Não
Complexidade
Formalização
verificável
Metodologias
leve
Testes
Shelfware
Volatilidade
Especificações
Ferramentas
Automação
controladas
Padrões de
referência
Software
fidedigno
Formação
Capacitação
Certificação
Proficiência
Satisfação
profissional
Pessoal
Abr 2009
Baixa atratividade da área
Baixa formação
básica e superior
Agilidade Desinteresse
da direção
Iterações
Burocracia
Melhoria
induzida
contínua
Programas de
ensino inadequados Institucionalizado
Alterações
controladas
Individualismo
Complexidade
do processo
Processos
Arndt von Staa © LES/PUC-Rio
Contribui
Atrapalha
Adaptação de diagramas
de Ishikawa
16 / 25
O grande problema
• Desenvolvimento hoje é intensivo em pessoal
– muito suscetível a falhas humanas
– variação da competência: 1 para 20, há quem diga 1 para 35
• competência tende a ser medida como produtividade
• Alternativas
– Aumentar competência e reduzir falhas humanas através da
formação e capacitação de pessoal
• aumentar a proficiência
• aproximar-se dos 35 
– Reduzir a necessidade de pessoal
• tornar o desenvolvimento intensivo em capital, exemplos
– robotizar
– linhas de produto
– Antecipar e melhorar o controle da qualidade
Abr 2009
Arndt von Staa © LES/PUC-Rio
17 / 25
Desafio: aumentar a proficiência
• Exemplos de sugestões
– ensinar a empregar sistematicamente técnicas formais leves
• mostrar como usar em aplicações reais (ou quase reais)
• não só em toy problems
– ensinar a ler software
– ensinar a escrever software para que possa ser lido por outros
– ensinar e treinar trabalho em grupo (equipe)
– ensinar a corrigir e evoluir
• segundo alguns manutenção consome cerca de 80% dos recursos
de “desenvolvimento”
– ensinar a organizar o trabalho
Como e o que ensinar? O SWEBOK realmente ajuda a definir isso?
Abr 2009
Arndt von Staa © LES/PUC-Rio
18 / 25
Desafio: reduzir a dependência de humanos
• Desenvolvimento de ferramentas configuráveis (metaferramentas) que apóiem, de forma integrada, equipes
distribuídas, realizando ciclos de desenvolvimento, de
manutenção e de engenharia reversa em uma variedade de
linguagens de programação, projeto, arquitetura e
especificação
– análise estática
– transformação automática de representações
– reflexão automática de representações (engenharia reversa)
– geração e realização automática de testes
– ...
• MAS os desenvolvedores devem adorar utilizar as
ferramentas disponibilizadas
Abr 2009
Arndt von Staa © LES/PUC-Rio
19 / 25
Desafio: controle da qualidade contínuo
• O controle da qualidade deve ser realizado continuamente
ao longo de todo o processo de desenvolvimento
– precisa ser muito mais eficaz – ter uma taxa muito maior de
detecção de defeitos e vulnerabilidades a erros exógenos
– precisa ser muito mais eficiente – necessitar de muito menos
recursos (tempo, labor humano, custo) para realizar o controle
– precisa ser capaz de coevoluir fidedigna e economicamente
junto com a evolução ou correção do software
Abr 2009
Arndt von Staa © LES/PUC-Rio
20 / 25
Desafio: manter sem deteriorar
• Uma parte substancial (80%) do esforço é dirigido à
manutenção de software
– ensinar a fazer isso
– habilitar o software a ser manutenível
– como realizar isso de forma sistemática?
• Alguns exemplos
– engenharia reversa e reengenharia
– rejuvenescimento de sistemas legados
• o sistema entregue hoje, amanhã já é um sistema legado 
– redesenvolvimento sem perda de continuidade do sistema
existente
• sistemas essenciais que precisam mudar de tecnologia
Abr 2009
Arndt von Staa © LES/PUC-Rio
21 / 25
Melhoria contínua  feedback
Atua sobre
especificação
Desenvolve
Evolui
Especificação
Artefato
Defeito na
especificação
Laudo
Idéias, estado da arte
Avalia
Mede
Pesquisa precisa mostrar
não somente uma
proposta ou inovação,
precisa também mostrar
de forma convincente
(achologia não vale...)
porque seria melhor do
que o que já existe.
Atua sobre
pessoas
Atua sobre
ferramentas
Atua sobre
processo
Processo
Falta de
habilitação
Ferramentas
inadequadas
Defeito no
processo
Artefato
aceito
Evolução do estado
da arte
No sentindo mais
amplo: técnicas,
métodos,
metodologias, novas
formas arquiteturais,
ferramentas ppd, ...
Ferramentas
Pessoas
Abr 2009
Arndt von Staa © LES/PUC-Rio
22 / 25
Exemplos de trabalhos
• Desenvolvimento / aprimoramento de ferramentas de
análise estática
• Desenvolvimento de ferramenta para a geração e execução
automática de casos de teste
• Utilizando ferramentas disponíveis:
– como automatizar e o quanto podemos automatizar o
desenvolvimento e a manutenção?
– como institucionalizar processos ágeis ou agilizar processos
dirigidos por planos para desenvolver e para manter?
• Desenvolvimento de uma “super meta-ferramenta” 
• Utilizando técnicas formais leves como:
– desenvolver sistemas auto-monitorantes, auto-recuperantes?
– como gerar casos de teste?
• Que métricas medem algo que realmente interessa?
• Como medir, o que medir e como registrar as medições?
Abr 2009
Arndt von Staa © LES/PUC-Rio
23 / 25
Conclusão
• Promover boa formação e adequado treinamento
• Desenvolver e avaliar boas práticas
– documentadas e institucionalizadas
• Desenvolver ferramentas adequadas, integradas e coerentes
com as práticas
• Desenvolver e avaliar sistematicamente modelos, processos,
tecnologias, ...
• Institucionalizar adequada organização do trabalho
(processo definido)
todos conduzem para o desenvolvimento com
qualidade assegurada e produtividade
todos representam desafios que ainda
não foram satisfatoriamente resolvidos
Abr 2009
Arndt von Staa © LES/PUC-Rio
24 / 25
Perguntas?
Arndt von Staa
[email protected]
Departamento de Informática
PUC-Rio
Abril 2009
Abr 2009
Arndt von Staa © LES/PUC-Rio
25 / 25
Download

Arndt_20090403 - (LES) da PUC-Rio