Teste de Programas Concorrentes. Simone Senger de Souza LABES/ SSC / ICMC / USP
|
|
|
- João Henrique Aires Morais
- 8 Há anos
- Visualizações:
Transcrição
1 Teste de Programas Concorrentes Simone Senger de Souza LABES/ SSC / ICMC / USP [email protected]
2 Assuntos Teste de software Programação concorrente Teste de software concorrente Seleção de técnicas de teste
3 Teste de software Fundamental em todos os ramos de engenharia o Software: produto da Engenharia de Software Atividade essencial para ascensão ao nível 3 do Modelo CMMI/SEI Atividade relevante para avaliação da característica funcionalidade (ISO 9126, ISO 25010, ISO 25041)
4 Teste de software
5 Teste de software O que é o Teste de Software? o Teste Examina comportamento do programa Execução de entradas específicas e saídas esperadas o Teste não é depuração! Depuração localiza causas que levam à falha
6 Teste de software Teste busca por falhas ou erros exercitando o software como um todo ou partes dele Depuração busca e corrige defeitos que são responsáveis por falhas ou erros do software
7 Limitações do teste int blech (int j){ j = j 1 ; // deveria ser j = j + 1 j = j / 30000; return j ; } Quais valores escolher? Entrada (j) Saída Esperada Saída Obtida Quais valores de entrada revelam o erro?
8 Limitações do teste Nenhum dos casos de teste anteriores revelou o erro Somente quatro valores do intervalo de entrada válido revelam o erro Entrada (j) Saída Esperada Saída Obtida
9 Limitações do teste Observe o exemplo a seguir: 1 int blech (int j){ 2 j = j 1 ; // deveria ser j = j j = j / 30000; 4 return j ; 5 } Código-fonte: blech.java Considerando o tipo inteiro com 16 bits (2 bytes), o menor valor possível seria e o maior seria , resultando em valores diferentes possíveis. Haverá tempo suficiente para se criar casos de teste? E se os programas forem maiores? Quantos casos de teste serão necessários?
10 Limitações do teste Solução selecionar um subconjunto reduzido do domínio de entrada que tenha alta probabilidade de revelar a presença de possíveis defeitos. Como selecionar os subdomínios? o Utilizar técnicas de teste de software
11 Técnicas de teste As técnicas de teste são definidas conforme o tipo de informação utilizada para realizar o teste. Maneira sistemática e planejada para conduzir os testes o Técnicas e Critérios de Teste Conjunto de Casos de Teste T o Características desejáveis Deve ser finito Custo de aplicação deve ser razoável
12 Critérios de teste Critério de Teste C o Objetivo Obter, de maneira sistemática, um conjunto T de casos de teste que seja efetivo quanto à meta principal de teste (revelar a presença de erros no programa)
13 Técnicas e Critérios de teste Técnica Funcional o Requisitos funcionais do software Critério Particionamento em Classes de Equivalência Técnica Estrutural o Estrutura interna do programa Critérios Baseados em Fluxo de Controle e Dados Técnica Baseada em Erros Erros mais frequentes cometidos durante o processo de desenvolvimento de software Critério Análise de Mutantes
14 Técnica funcional (teste de caixa preta) Baseia-se na especificação do software para derivar os requisitos de teste Aborda o software de um ponto de vista macroscópico Envolve dois passos principais: o Identificar as funções que o software deve realizar (especificação dos requisitos) o Criar casos de teste capazes de checar se essas funções estão sendo executadas corretamente
15 Técnica funcional Critérios da Técnica Funcional o Particionamento em Classes de Equivalência Divide o domínio de entrada do programa em classes de dados (classes de equivalências) Os dados de teste são derivados a partir das classes de equivalência o Análise do Valor Limite o Grafo de Causa-Efeito
16 Técnica funcional: Exemplo Passos o Identificar classes de equivalência Condições de entrada Classes válidas e inválidas o Definir os casos de teste Enumeram-se as classes de equivalência Casos de teste para as classes válidas Casos de teste para as classes inválidas
17 Técnica funcional: Exemplo Especificação do programa Identifier o O programa deve determinar se um identificador é válido ou não. Um identificador válido deve começar com uma letra e conter apenas letras ou dígitos. Além disso, deve ter no mínimo um caractere e no máximo seis caracteres de comprimento. o Exemplo abc12 (válido); cont*1 (inválido); 1soma (inválido); a (inválido)
18 Técnica funcional: Exemplo Classes de equivalência Tamanho t do identificador Condições de Entrada Classes Válidas Classes Inválidas Tamanho t do identificador 1 t 6 (1) Primeiro caractere c é uma letra Só contém caracteres válidos Sim (3) Sim (5) 1 > t > 6 (2) Não (4) Não (6) Exemplo de Conjunto de Casos de Teste o T0 = {(a1,válido), (2B3, Inválido), (Z-12, Inválido), (A1b2C3d, Inválido)} (1, 3, 5) (4) (6) (2)
19 Teste estrutural (teste de caixa branca) Baseia-se no conhecimento da estrutura interna(implementação) do programa. o Teste dos detalhes procedimentais. A maioria dos critérios dessa técnica utiliza uma representação de programa conhecida como grafo de programa.
20 Critérios de teste estrutural Representação do programa que visa auxiliar a geração dos requisitos de teste. Seja um GFC o GFC = (N, E, s) onde N representa o conjunto de nós, E o conjunto de arcos, e s o nó de entrada. o Nós: blocos de comandos indivisíveis. o Não existe desvio para o meio do bloco. o Uma vez que o primeiro comando do bloco é executado, os demais comandos são executados sequencialmente. o Arestas ou Arcos: representam o fluxo de controle entre os nós. Caminhos: sequências de execução de comandos que iniciam em um nó de entrada e terminam em um nó de saída.
21 Critérios de teste estrutural Construções Básicas do GFC
22 Teste estrutural Nós: 1, 2, 3,... Arcos: <1,2>, <1,3>,... Caminhos Simples: (2,3,4,5,6,7) Completo: (1,2,3,4,5,7,4,8,9,11)
23 Critérios de teste estrutural a 1
24 Exercício Nós: Arestas: (1,2) (1,3) (5,6) (5,7) (8,9) (8,10) T0 = {(a1,válido), (2B3, Inválido), (Z-12, Inválido), (A1b2C3d, Inválido)}
25 Critérios de teste estrutural Critérios de fluxo de controle o 1- testar todos os comandos o 2- testar todos os desvios condicionais o 3- testar todos os caminhos básicos Critério de Fluxo de dados o 1- Testar todos os usos a partir de uma definição de variável
26 Fases de teste Assim como outras atividades de Engenharia de Software, a atividade de teste também é dividida em fases. o Cada fase aborda diferentes tipos de erros e aspectos do software. Conceito de dividir para conquistar. Objetivo: minimizar a complexidade na condução dos testes. Ideia: Iniciar os testes a partir da menor unidade executável até atingir o programa como um todo.
27 Fases de teste Teste de Unidade o Identificar erros de lógica e de implementação em cada módulo do software, separadamente Teste de Integração o Identificar erros associados às interfaces entre os módulos do software Teste de Sistema o Verificar se as funções estão de acordo com a especificação e se todos os elementos do sistema combinam-se adequadamente
28 Concluindo... A atividade de teste é um processo executado em paralelo com as demais atividades do ciclo de vida de desenvolvimento do software. A principal etapa da atividade de teste é o projeto de casos de teste. o A ideia é selecionar casos de teste com maior probabilidade de revelar os erros existentes. Diferentes técnicas e critérios de teste existem para auxiliar na atividade de teste. Além disso, o teste deve ser conduzido em fases para reduzir a complexidade.
29 Programação concorrente Programação concorrente é essencial para reduzir o tempo de execução em diferentes domínios de aplicações: o Simulação de dinâmica molecular o Bioinformática o Processamento de imagens o Previsão do tempo o Web server o Sistemas embarcados
30 Programação concorrente Dificuldades para desenvolver programas concorrentes o Complexidade o Solução computacional x recursos computacionais o Propenso a erros (error prone) o Desenvolvedores não treinados o Testes não são realizados...
31 Programação Concorrente Um programa concorrente contém dois ou mais processos ou threads que trabalham juntos para realizar uma tarefa. processos concorrentes = começaram a sua execução e em um determinado instante do tempo ainda não a finalizaram processos paralelos = executam em diferentes processadores no mesmo intervalo de tempo.
32 Programação Concorrente processo processo P2 P2 P1 P1 tempo tempo processos concorrentes processos paralelos
33 Programação Concorrente Paradigmas: o Memória compartilhada: threads compartilham espaço de endereçamento (variáveis compartilhadas) Sincronização através de monitores e semáforos. o Passagem de mensagens: Processos possuem memória distribuída Sincronização por troca de mensagens: Primitivas send/receive
34 Programação Concorrente Exemplos clássicos: o Produtor-consumidor o Jantar dos filósofos o Leitores escritores em área comum o Macacos no precipício o Multiplicação de matrizes
35 Programação Concorrente - Exemplos Produtor-consumidor
36 Programação Concorrente - Exemplos Jantar dos filósofos
37 Programação Concorrente - Exemplos Leitura e escrita em área comum
38 Programação Concorrente - Exemplos Macacos no precipício o 1 corda para travessia - não pode atravessar se existir macaco no sentido contrário atravessando semáforo oeste = 0; semáforo leste = 1; Cruza Oeste { wait(oeste); Cruza; post(leste); }Cruza Leste { wait(leste); Cruza; post(oeste); }
39 Programação Concorrente - Exemplos Multiplicação de matrizes
40 Programação Concorrente Programas seqüenciais X Programas concorrentes: 1. Primitivas para definir quais processos serão executados em paralelo; 2. Primitivas para iniciar e finalizar processos concorrentes; 3. Primitivas para coordenar e especificar a interação entre os processos. Impacto na validação da aplicação!
41 Programação Concorrente Desenvolvimento de aplicações paralelas: o Ambientes automáticos que geram código paralelo o Linguagens de programação concorrente (Ada) o Extensões para linguagens seqüenciais (Fortran, C. Java): Ambientes de passagem de mensagens: MPI Message Passing Interface Bibilotecas para threads Pthreads, openmp
42 Teste para programas concorrentes Desafios: Número elevado de requisitos de teste comunicação e sincronização Execução não determinística Todos as sinc foram testadas? Todas as saídas produzidas são corretas? Quais sinc podem levar a um erro?
43 Exemplo de não determinismo P1 P0 P2 recv(p0) 1 1 send(p1) 2 send(p2) 1 recv(p0) send(p0) 2 3 recv(-1,-1) 2 send(p0) 4 recv(-1, -1) Sincronizações: (1 0,1 1 ), (2 0,1 2 ), (2 2,3 0 ), (2 1,4 0 ) Sincronizações: (1 0,1 1 ), (2 0,1 2 ), (2 1,3 0 ), (2 2,4 0 )?
44 Exemplo de não determinismo Sincronizações: (1 0,1 1 ), (2 0,1 2 ), (2 2,3 0 ), (2 1,4 0 ) Sincronizações: (1 0,1 1 ), (2 0,1 2 ), (2 1,3 0 ), (2 2,4 0 )? Duas comunicações possíveis: Como saber qual delas ocorreu na execução do programa? Qual a chance de uma delas ser executada? Como forçar uma delas para ocorrer?
45 Exemplo de não determinismo Sincronizações: (1 0,1 1 ), (2 0,1 2 ), (2 2,3 0 ), (2 1,4 0 ) Sincronizações: (1 0,1 1 ), (2 0,1 2 ), (2 1,3 0 ), (2 2,4 0 )? Solução conservadora: Forçar a ocorrência de todas as possíveis Problema?
46 Desafios Número elevado de requisitos de teste Interleaving dos processos ou threads Programa LOC Sync-pairs Infeasible All Sync Crivo de Erastótenes Gcd Mmult Filósofos Qsort Jacobi
47 Erro de Observabilidade bool saque( int quantia ) 2 { 3 if( saldo >= quantia ) 4 { 5 saldo = saldo - quantia; 6 return true; 7 } 8 else 9 { 10 return false; 11 } 12 } Saldo= 500 P1 chama saque(300) P2 chama saque(200) Saldo final =?
48 Erro de Observabilidade bool saque( int quantia ) 2 { 3 pthread_mutex_lock(v_bloqueio); 4 if( saldo > = quantia ) 5 { 6 saldo = saldo - quantia; 7 pthread_mutex_unlock(v_bloqueio); 8 return true; 9 } 10 else 11 { 12 pthread_mutex_unlock(v_bloqueio); 13 return false; 14 } 15 }
49 Erro de Travamento
50 Tipos de erros em programas concorrentes Deadlock Starvation Data race Livelock Atomicity violation Communication error Synchronization error Erros de observabilidade Erros de travamento Arora, V., Bhatia, R., and Singh, M. (2016) A systematic review of approaches for testing concurrent programs. Concurrency Computation: Pract. Exper., 28: doi: /cpe.3711
51 Teste de programas concorrentes Como testar um programa concorrente? o Como gerar/executar os casos de teste? o Como analisar a saída obtida?
52 Desafios Conceito de caso de teste: Caso de teste: (Input, Output, Sync) Desafio: execução dos casos de teste Todos as sincronizações foram testadas? Todas as saídas produzidas são corretas? Quais sincronizações podem levar a um erro?
53 Execução de programas concorrentes Execução ad hoc (sem controle) Execução controlada o Determinística o Temporal testing
54 Abordagens de Teste para Software Concorrente Teste de alcançabilidade Teste Estrutural Teste de Mutação Teste de baseado em Modelos Teste baseado em busca Arora, V., Bhatia, R., and Singh, M. (2016) A systematic review of approaches for testing concurrent programs. Concurrency Computation: Pract. Exper., 28: doi: /cpe.3711
55 Exemplo Programa GCD Programa GCD para três números P o {gcd.c} x,y x {mgcd.c} P mestre y,z y P 2 {gcd.c} x,y z P 1 {gcd.c}
56 Exemplo Programa GCD /* Master program GCD - mgcd */ /* Slave program GCD - gcd 3x */ main() { /*1*/ integer x,y,z, slv[3], buf[2]; /*1*/ read (x, y, z); /*1*/ spawn_process("gcd", NULL, 3, slv); /*2*/ buf[0] = x; buf[1] = y; /*2*/ send(slv[0], 2, buf); /*3*/ buf[0] = y; buf[1] = z; /*3*/ send(slv[1], 2, buf); /*4*/ recv(*, x); // não determinismo /*5*/ recv(*, y); // não determinismo /*6*/ if ( ( x>1 ) && ( y>1 ) ) { /*7*/ buf[0] = x; buf[1] = y; /*7*/ send(slv[2], 2, buf); /*8*/ recv(*, z); /*9*/ else { /*9*/ finalize_process(slv[2]); /*9*/ z = 1; /*9*/ } /*10*/ print (z); /*10*/ finalize(); /*10*/ } main(){ /*1*/ integer pid, x, y, buf[2]; /*1*/ pid = my_father(); /*2*/ recv(pid, 2, buf); /*2*/ x = buf[0]; /*2*/ y = buf[1]; /*3*/ while (x!= y){ /*4*/ if (x<y) /*5*/ y = y-x; /*6*/ else /*6*/ x = x-y; /*7*/ } /*8*/ send(pid,1, x); /*9*/ finalize(); /*9*/ }
57 Exemplo Programa GCD Programa GCD para três números para x = 1, y = 2 e z = 1 x = 1, y = 2 {mgcd} y = 2, z = 1 P 0 {gcd} P mestre x' = 1 y' = 1 P 1 {gcd} z = 1 (gcd) P 2 {gcd}
58 Exemplo Programa GCD Programa GCD para três números para x = 2, y = 4 e z = 6 x = 2, y = 4 {mgcd} y = 4, z = 6 P 0 {gcd} P mestre x' = 2 y' = 2 P 1 {gcd} x = 2, y =2 z = 2 (gcd) P 2 {gcd}
59 Exemplo Programa GCD Programa GCD para três números para x = 3, y = 6 e z = 4 x = 3, y = 6 {mgcd} y = 6, z = 4 P 0 {gcd} P mestre x' = 3 y' = 2 P 1 {gcd} x = 3, y = 2 z = 1 (gcd) P 2 {gcd} foi testado suficiente?
60 Exemplo Programa GCD /* Master program GCD - mgcd */ /* Slave program GCD - gcd 3x */ main() { /*1*/ integer x,y,z, slv[3], buf[2]; /*1*/ read (x, y, z); /*1*/ spawn_process("gcd", NULL, 3, slv); /*2*/ buf[0] = x; buf[1] = y; /*2*/ send(slv[0], 2, buf); /*3*/ buf[0] = y; buf[1] = z; /*3*/ send(slv[1], 2, buf); /*4*/ recv(*, x); // não determinismo /*5*/ recv(*, y); // não determinismo /*6*/ if ( ( x>1 ) && ( y>1 ) ) { /*7*/ buf[0] = x; buf[1] = y; /*7*/ send(slv[2], 2, buf); /*8*/ recv(*, z); /*9*/ else { /*9*/ finalize_process(slv[2]); /*9*/ z = 1; /*9*/ } /*10*/ print (z); /*10*/ finalize(); /*10*/ } main(){ /*1*/ integer pid, x, y, buf[2]; /*1*/ pid = my_father(); /*2*/ recv(pid, 2, buf); /*2*/ x = buf[0]; /*2*/ y = buf[1]; /*3*/ while (x!= y){ /*4*/ if (x<y) /*5*/ y = y-x; /*6*/ else /*6*/ x = x-y; /*7*/ } /*8*/ send(pid,1, x); /*9*/ finalize(); /*9*/ }
61 /* Master program GCD - mgcd */ Exemplo Programa GCD main() { /*1*/ integer x,y,z, slv[3], buf[2]; /*1*/ read (x, y, z); /*1*/ spawn_process("gcd", NULL, 3, slv); /*2*/ buf[0] = x; buf[1] = y; /*2*/ send(slv[0], 2, buf); /*3*/ buf[0] = y; buf[1] = z; /*3*/ send(slv[1], 2, buf); /*4*/ recv(*, x); /*5*/ recv(*, y); y =? /*6*/ if ( ( x>1 ) && ( y>1 ) ) { /*7*/ buf[0] = x; buf[1] = y; /*7*/ send(slv[2], 2, buf); /*8*/ recv(*, z); /*9*/ else { /*9*/ finalize_process(slv[2]); /*9*/ z = 1; /*9*/ } /*10*/ print (z); /*10*/ finalize(); /*10*/ } x = 1 z =? (esperava 1 ) /* Slave program GCD - gcd */ main(){ /*1*/ integer pid, x, y, buf[2]; /*1*/ pid = my_father(); /*2*/ recv(pid, 2, buf); /*2*/ x = buf[0]; /*2*/ y = buf[1]; /*3*/ while (x!= y){ /*4*/ if (x<y) /*5*/ y = y + x; /*6*/ else /*6*/ x = x - y; /*7*/ } /*8*/ send(pid,1, x); /*9*/ finalize(); /*9*/ } nó 5 1 como y = y + x (o correto é y = y x) entrada {x=1, y=2, z=1} executa o nó 5 1 e revela o defeito
62 /* Master program GCD - mgcd */ Exemplo Programa GCD main() { /*1*/ integer x,y,z, slv[3], buf[2]; /*1*/ read (x, y, z); /*1*/ spawn_process("gcd", NULL, 3, slv); /*2*/ buf[0] = x; buf[1] = y; /*2*/ send(slv[0], 2, buf); /*3*/ buf[0] = y; buf[1] = z; /*3*/ send(slv[1], 2, buf); /*4*/ recv(*, x); /*5*/ recv(*, y); /*6*/ if ( ( x>1 ) && ( y>1 ) ) { /*7*/ buf[0] = x; buf[1] = y; /*7*/ send(slv[2], 2, buf); x = 1 y = 1 /*8*/ recv(*, x); /*9*/ else { /*9*/ finalize_process(slv[2]); /*9*/ z = 1; /*9*/ } z = 1 (saída esperada ) /*10*/ print (z); /*10*/ finalize(); /*10*/ } /* Slave program GCD - gcd */ main(){ /*1*/ integer pid, x, y, buf[2]; /*1*/ pid = my_father(); /*2*/ recv(pid, 2, buf); /*2*/ x = buf[0]; /*2*/ y = buf[1]; /*3*/ while (x!= y){ /*4*/ if (x<y) /*5*/ y = y - x; /*6*/ else /*6*/ x = x - y; /*7*/ } /*8*/ send(pid,1, x); /*9*/ finalize(); /*9*/ } nó 8 m recebe msg em x - o correto seria z entrada {x=1, y=2, z=1} não revela defeito
63 /* Master program GCD - mgcd */ Exemplo Programa GCD main() { /*1*/ integer x,y,z, slv[3], buf[2]; /*1*/ read (x, y, z); /*1*/ spawn_process("gcd", NULL, 3, slv); /*2*/ buf[0] = x; buf[1] = y; /*2*/ send(slv[0], 2, buf); /*3*/ buf[0] = y; buf[1] = z; /*3*/ send(slv[1], 2, buf); /*4*/ recv(*, x); /*5*/ recv(*, y); /*6*/ if ( ( x>1 ) && ( y>1 ) ) { /*7*/ buf[0] = x; buf[1] = y; /*7*/ send(slv[2], 2, buf); x = 2 y = 2 /*8*/ recv(*, x); /*9*/ else { /*9*/ finalize_process(slv[2]); /*9*/ z = 1; /*9*/ } z = 6 (esperava 2 ) /*10*/ print (z); /*10*/ finalize(); /*10*/ } /* Slave program GCD - gcd */ main(){ /*1*/ integer pid, x, y, buf[2]; /*1*/ pid = my_father(); /*2*/ recv(pid, 2, buf); /*2*/ x = buf[0]; /*2*/ y = buf[1]; /*3*/ while (x!= y){ /*4*/ if (x<y) /*5*/ y = y - x; /*6*/ else /*6*/ x = x - y; /*7*/ } /*8*/ send(pid,1, x); /*9*/ finalize(); /*9*/ } nó 8 m recebe msg em x - o correto seria z entrada {x=2, y=4, z=6} executa o nó 8 m e revela defeito
64 /* Master program GCD - mgcd */ Exemplo Programa GCD main() { /*1*/ integer x,y,z, slv[3], buf[2]; /*1*/ read (x, y, z); /*1*/ spawn_process("gcd", NULL, 3, slv); /*2*/ buf[0] = x; buf[1] = y; /*2*/ send(slv[0], 2, buf); /*3*/ buf[0] = y; buf[1] = z; /*3*/ send(slv[1], 2, buf); x = 2 /*4*/ recv(*, x); y =? /*5*/ nb_recv(*, y); /*6*/ if ( ( x>1 ) && ( y>1 ) ) { /*7*/ buf[0] = x; buf[1] = y; /*7*/ send(slv[2], 2, buf); x = 2 e y = 4 /*8*/ recv(*, z); /*9*/ else { /*9*/ finalize_process(slv[2]); /*9*/ z = 1; /*9*/ } /*10*/ print (z); /*10*/ finalize(); /*10*/ } /* Slave program GCD - gcd */ main(){ /*1*/ integer pid, x, y, buf[2]; /*1*/ pid = my_father(); /*2*/ recv(pid, 2, buf); /*2*/ x = buf[0]; /*2*/ y = buf[1]; /*3*/ while (x!= y){ /*4*/ if (x<y) /*5*/ y = y - x; /*6*/ else /*6*/ x = x - y; /*7*/ } /*8*/ send(pid,1, x); /*9*/ finalize(); /*9*/ } nó 5 m como recv não bloqueante - o correto é bloqueante z = 2 (saída esperada ) {x=2, y=4, z=6} não revela o defeito
65 /* Master program GCD - mgcd */ Exemplo Programa GCD main() { /*1*/ integer x,y,z, slv[3], buf[2]; /*1*/ read (x, y, z); /*1*/ spawn_process("gcd", NULL, 3, slv); /*2*/ buf[0] = x; buf[1] = y; /*2*/ send(slv[0], 2, buf); /*3*/ buf[0] = y; buf[1] = z; /*3*/ send(slv[1], 2, buf); x = 3 /*4*/ recv(*, x); y =? /*5*/ nb_recv(*, y); /*6*/ if ( ( x>1 ) && ( y>1 ) ) { /*7*/ buf[0] = x; buf[1] = y; /*7*/ send(slv[2], 2, buf); x = 3 e y = 6 /*8*/ recv(*, z); /*9*/ else { /*9*/ finalize_process(slv[2]); /*9*/ z = 1; /*9*/ } /*10*/ print (z); /*10*/ finalize(); /*10*/ } z = 3 (esperava 1 ) /* Slave program GCD - gcd */ main(){ /*1*/ integer pid, x, y, buf[2]; /*1*/ pid = my_father(); /*2*/ recv(pid, 2, buf); /*2*/ x = buf[0]; /*2*/ y = buf[1]; /*3*/ while (x!= y){ /*4*/ if (x<y) /*5*/ y = y - x; /*6*/ else /*6*/ x = x - y; /*7*/ } /*8*/ send(pid,1, x); /*9*/ finalize(); /*9*/ } nó 5 m como recv não bloqueante - o correto é bloqueante {x=3, y=6, z=4} pode revelar o defeito
66 /* Master program GCD - mgcd */ Exemplo Programa GCD main() { /*1*/ integer x,y,z, slv[3], buf[2]; /*1*/ read (x, y, z); /*1*/ spawn_process("gcd", NULL, 3, slv); /*2*/ buf[0] = x; buf[1] = y; /*2*/ send(slv[0], 2, buf); /*3*/ buf[0] = y; buf[1] = z; /*3*/ send(slv[1], 2, buf); x = 3 /*4*/ recv(*, x); y = 2 /*5*/ nb_recv(*, y); /*6*/ if ( ( x>1 ) && ( y>1 ) ) { /*7*/ buf[0] = x; buf[1] = y; /*7*/ send(slv[2], 2, buf); x = 3 e y = 2 /*8*/ recv(*, z); /*9*/ else { /*9*/ finalize_process(slv[2]); /*9*/ z = 1; /*9*/ } /*10*/ print (z); /*10*/ finalize(); /*10*/ } z = 1 (Saída esperada ) /* Slave program GCD - gcd */ main(){ /*1*/ integer pid, x, y, buf[2]; /*1*/ pid = my_father(); /*2*/ recv(pid, 2, buf); /*2*/ x = buf[0]; /*2*/ y = buf[1]; /*3*/ while (x!= y){ /*4*/ if (x<y) /*5*/ y = y - x; /*6*/ else /*6*/ x = x - y; /*7*/ } /*8*/ send(pid,1, x); /*9*/ finalize(); /*9*/ } nó 5 m como recv não bloqueante - o correto é bloqueante {x=3, y=6, z=4} pode revelar o defeito
67 /* Master program GCD - mgcd */ main() { /*1*/ integer x,y,z, slv[3], buf[2]; /*1*/ read (x, y, z); /*1*/ spawn_process("gcd", NULL, 3, slv); /*2*/ buf[0] = x; buf[1] = y; /*2*/ send(slv[0], 2, buf); /*3*/ buf[0] = y; buf[1] = z; /*3*/ send(slv[1], 2, buf); /*4*/ recv(*, x); // não determinismo /*5*/ recv(*, y); // não determinismo /*6*/ if ( ( x>1 ) && ( y>1 ) ) { /*7*/ buf[0] = x; buf[1] = y; /*7*/ send(slv[2], 2, buf); /*8*/ recv(*, z); /*9*/ else { /*9*/ finalize_process(slv[2]); /*9*/ z = 1; /*9*/ } /*10*/ print (z); /*10*/ finalize(); /*10*/ } /* Slave program GCD - gcd 3x */ main(){ /*1*/ integer pid, x, y, buf[2]; /*1*/ pid = my_father(); /*2*/ recv(pid, 2, buf); /*2*/ x = buf[0]; /*2*/ y = buf[1]; /*3*/ while (x!= y){ /*4*/ if (x<y) /*5*/ y = y-x; /*6*/ else /*6*/ x = x-y; /*7*/ } /*8*/ send(pid,1, x); /*9*/ finalize(); /*9*/ }
68 Critérios de teste estruturais Modelo de Teste o GFCP (Grafo de Fluxo de Controle Paralelo): Similar ao GFC de programas seqüenciais Definição de arestas intra-processo e interprocesso Extrai os pares send/receive: considera toda possível sincronização extraída estaticamente Aplica conceitos de fluxo de controle e estende para tratar sincronização. Aplica conceitos de fluxo de dados e estende para tratar uso-comunicacional (s-uso)
69 Critérios de teste estruturais Modelo de teste extrai do programa concorrente: o Informações de fluxo de controle: Nós e arestas como ocorre em programas seqüenciais Nós com comandos send (Ns) Nós com comandos receive (Nr) Arestas de sincronização (s-uso) o Informações de fluxo de dados: Definição Uso computacional Uso predicativo Uso comunicacional
70 Contribuições em Teste de Software Concorrente Geração automática de Dados de Teste; 10% Teste Determinístico; 18,30% Teste Baseado em Defeitos; 26% Teste Estrutural; 25,50% Teste Baseado Modelos; 20% S. M. Melo, Definição de um Framework para Avaliação Sistemática de Técnicas de Teste no Contexto de Software Concorrente, Teste de doutorado, ICMC/USP, em andamento
71 Teste de software concorrente Programação Concorrente com qualidade: É necessária nos dias de hoje e será também no futuro Está repleta de novos desafios maior demanda com novas arquiteturas necessidade de maior produtividade redução dos custos de manutenção explorar o desempenho de pico das arquiteturas Teste ainda é muito limitado complexidade e custo
72 O objetivo das abordagens de seleção é auxiliar os testadores a escolher a técnica de teste adequada ao seu projeto de software Teste baseado em erros Teste baseado em busca Análise simbólica Análise preditiva Teste de alçabilidade Execução determinística Teste baseado em cobertura Teste de mutação Teste funcional Teste baseado em métodos formais Teste randômico Teste baseado em modelos Teste estrutural Teste ativo
73 Seleção de técnicas de teste Pesquisadores têm desenvolvido diversas técnicas de teste de software para o contexto da programação concorrente Porém, na maioria dos projetos de software a escolha da técnica de teste é baseada no conhecimento ou hábitos da equipe de teste
74 Seleção de técnicas de teste
75 Seleção de técnicas de teste Técnica de teste Nível de teste Entradas requeridas Linguagem de programação
76 Seleção de técnicas de teste
77 Desafios Prover a qualidade de aplicações concorrentes o Aplicação de técnicas de teste o Usar na indústria oque é produzido na academia o Selecionar técnicas de teste mais adequadas a um projeto de software Características Limitações
78 Exercício Turma 1 Essa atividade tem como objetivo selecionar a técnica de teste mais adequada ao projeto de software apresentado, para isso deverão ser consideradas as características do projeto e das técnicas de teste fornecidas. o Considere o projeto de software apresentado na Tabela 1. Leia a sua especificação. o Dadas as duas técnicas a seguir (Tabela 2 e 3) você deve selecionar a técnica mais adequada ao projeto apresentado na Tabela 1.
79 Caracterização do Projeto de Estacionamento Descrição do sistema a ser desenvolvido O objetivo é construir um software que gerencie vagas de estacionamento, utilizando sensores, para verificar se está ou não ocupado e uma central que informe os motoristas sobre informações do estacionamento. O sistema deve ser composto por dois módulos principais: (1) Módulo de vagas, que utiliza um micro controlador e um sensor que capta, processa os dados da vaga e envia a uma central, através de uma rede sem fio. (2) Central de controle, que capta as informações recebidas pelo módulo 1 e converte em informações apresentadas ao usuário em uma tela/monitor. Atributos de caracterização Valor Características do software a ser desenvolvido Plataforma de execução do software Windows Contexto/Objetivo Sistema distribuído, Sistema embarcado Linguagem de programação utilizada para Ada construir o software Paradigma concorrente de iteração de processos Memória compartilhada Complexidade do problema Duração estimada do projeto Alta (muitas fórmulas) 2 meses para os testes Tamanho estimado da aplicação Pequeno Frequência de mudança nos requisitos Baixa Características desejadas para os testes a serem realizados Nível de teste desejado para o projeto Teste de sistema, teste de integração Tipo de técnica de teste a ser aplicada no Teste funcional software Tipo de análise Dinâmica Características de qualidade de software Funcionalidade, segurança, definidas nos requisitos e que devem ser eficiência avaliadas ao longo do projeto Tipos de falhas que desejam ser reveladas Código faltando, erro de navegação, erro de exceção, tipo de dados incorreto, deadlock, livelock, condição de corrida Custo desejado para os testes Ferramentas para realização dos testes Entradas disponíveis para a técnica de teste Saídas esperadas Representação do programa A empresa não possui verba para aquisição de ferramentas A empresa não possui ferramentas Código fonte Quantidade de erros detectados, tempo de execução Modelo em linguagem Lustre Técnica 1 (Teste baseado em métodos formais checagem de modelos) [Musuvathi et al., 2007] Atributo de caracterização Valores Plataforma de execução Windows Contexto/Objetivo Computação de alto desempenho (HPC) Linguagem de programação Nível de teste Saídas (Resultados gerados) Características de qualidade do software que podem ser avaliadas pela abordagem Tipo de estudo (avaliação empírica) Tipo de análise Tipos de erros revelados (erros concorrentes) Ferramenta de apoio Compreensibilidade (necessidade de conhecimento de alguma tecnologia adicional) Dependências (a abordagem depende de outra) C/C++/C# Teste de sistema Quantidade de execuções Eficácia Estudo de caso Estática Erros de sincronização, condição de corrida CHESS Conhecimento sobre análise de modelos Não Técnica 2 (Teste estrutural - escalonamento randômico) [Burckhardt et al., 2010] Atributo de caracterização Valores Plataforma de execução Windows Contexto/Objetivo Sistemas distribuídos Linguagem de programação Nível de teste Saídas (Resultados gerados) Características de qualidade do software que podem ser avaliadas pela abordagem Tipo de estudo (avaliação empírica) Tipo de análise Tipos de erros revelados (erros concorrentes) Ferramenta de apoio Compreensibilidade (necessidade de conhecimento de alguma tecnologia adicional) Dependências (a abordagem depende de outra) C/C++ Teste de sistema Porcentagem de erros detectados Eficiência Estudo de caso Dinâmica Violação de atomicidade, deadlock, preempção PCT Conhecimento sobre a linguagem em que o software é implementado Dependente da instrumentação
80 Grupo 2 Grupo 4 Grupo 1 Grupo 3 Turma 1 - Grupos Allan Silva Domingues Barbara Darques Barros Bernardo Barcellos de Castro Cunha Bruno Henrique Rasteiro Chan Ken Chen Cho Young Lim Danilo de Moraes Costa Douglas Seiti Kodama Eder Rosati Ribeiro Eduardo Aguiar Pacheco Eduardo Santos Carlos de Souza Elisa Saltori Trujillo Filipe Mariano Freire da Silva Fulvio Eduardo Ferreira Gabriel Alves Pereira Estrela Giovanna Oliveira Guimaraes Gustavo Cabral de Barros Gustavo Lima Lopes Gustavo Rocha Spena Henrique Caetano Anraki Hugo Moraes Dzin Igor Trevelin Xavier da Silva Italo Tobler Silva João Vítor Silvério de Sousa Kaique Lupo Leite Leonardo Ventura Lucas Alexandre Soares Lucas Silveira de Moura Luccas Henrique Braga de Almeida Luiz Eduardo Dorici Marcius Leandro Junior Marcus Vinicius dos Santos Araujo Matheus Gomes da Silva Horta Pedro Naidhig Puzzi Piero Lima Capelo Rafael Andreatta Martins Rafael Augusto Monteiro Rafael Bueno da Silva Rafael Silva de Milhã Sabrina Faceroli Tridico Thauan Leandro Gonçalves Vitor Giovani Dellinocente Wesley Tiozzo Willian Gomes de Oliveira
81
Teste de Software. Teste Funcional Teste Estrutural. Teste Baseado em Erros (Análise de Mutantes)
Teste de Software Teste Funcional Teste Estrutural Teste Baseado em Erros (Análise de Mutantes) Profa Rosana T. V. Braga Material adaptado do material dos profs. Ellen Francine Barbosa e José Carlos Maldonado
Introdução a Testes de Software. Ricardo Argenton Ramos
Introdução a Testes de Software Ricardo Argenton Ramos [email protected] Agenda da Aula Introdução sobre Testes; Testes Funcionais de software; Testes Estruturais de Software; Teste de Software
Introdução a Teste de Software
Universidade Católica de Pelotas Tecnólogo em Análise e Desenvolvimento de Sistemas Disciplina de Qualidade de Software Introdução a Teste de Software Prof. Luthiano Venecian 1 Conceitos Teste de software
Engenharia de Software
Prof. M.Sc. Ronaldo C. de Oliveira [email protected] FACOM - 2011 Verificação e Validação (V&V) S.L.Pfleeger (Cap.8 & 9) R.Pressman (Cap.13 & 14) I.Sommerville (Cap.22 & 23) Introdução Verificação
Introdução ao Teste de Software
Introdução ao Teste de Software Ricardo A. Ramos [Baseado na apresentação do LABS ICMC-USP -> http://www.labes.icmc.usp.br] Organização Introdução Teste de Software Terminologia e Conceitos Básicos Técnicas
Organização para Realização de Teste de Software
Organização para Realização de Teste de Software Quando o teste se inicia há um conflito de interesses: Desenvolvedores: interesse em demonstrar que o programa é isento de erros. Responsáveis pelos testes:
Teste de Software Orientado a Objeto. Ricardo Argenton Ramos
Teste de Software Orientado a Objeto Ricardo Argenton Ramos O que diferencia teste de software OO de testes Convencionais? Técnicas e abordagens são normalmente semelhantes, porém novos desafios são apresentados
TESTES DE SOFTWARE Unidade 1 Importância do Teste de Software. Luiz Leão
Luiz Leão [email protected] http://www.luizleao.com Conteúdo Programático 1.1 - O teste nas fases de vida e de desenvolvimento de um software. 1.2 - O teste na engenharia de sistemas e na engenharia de
Teste de Software: conceitos, técnicas e benefícios
Teste de Software: conceitos, técnicas e benefícios MSc. Alessandro Viola Pizzoleto IFSP - Instituto Federal de São Paulo Piracicaba - SP 30 de março de 2017 1 / 49 Sobre Mim Mestre em Engenharia de Software
Universidade Estadual de Mato Grosso do Sul UEMS Curso de Ciência da Computação Disciplina de Algoritmos Paralelos e Distribuídos
Universidade Estadual de Mato Grosso do Sul UEMS Curso de Ciência da Computação Disciplina de Algoritmos Paralelos e Distribuídos Pensando em Paralelo Pensar em paralelo é uma tarefa que exige disciplina
Estágio II. Aula 02 Conceitos de Teste de Software. Prof. MSc. Fred Viana
Estágio II Aula 02 Conceitos de Teste de Software Prof. MSc. Fred Viana Agenda Teste de Software Defeito, Erro ou Falha? Dimensões do Teste Níveis de Teste Tipos de Teste Técnicas de Teste Teste de Software
Programação Orientada a Objetos
Ciência da Computação Prof. Elias Ferreira Elaborador por: Ana Claudia Bastos Loureiro Monção JUNIT Teste de Software Processo de Software Um processo de software pode ser visto como o conjunto de atividades,
Sistemas Distribuídos e Paralelos
Sistemas Distribuídos e Paralelos Aula #6: Programação paralela em sistemas de memória compartilhada. ISUTIC - 2016 Eng. Alexander Rodríguez Bonet Aula de hoje Regiões paralelas. Cláusulas de âmbito. Partilha
PROJETO DE PROGRAMAS. Projeto de Programas PPR0001
PROJETO DE PROGRAMAS Projeto de Programas PPR0001 Desenvolvimento de Software 2 3 Desenvolvimento de Software Análise de Requisitos Distinguir e dividir o sistema em componentes: Analisar os componentes
Programação Concorrente
INE 5410 Programação Concorrente Professor: Lau Cheuk Lung (turma A) INE UFSC [email protected] Conteúdo Programático 1. 2. Programação Concorrente 3. Sincronização 1. Condição de corrida, região critica
Linguagem C++ Estruturas de controle Parte II Estruturas de repetição
Fundamentos de Programação Linguagem C++ Estruturas de controle Parte II Estruturas de repetição Prof. Bruno E. G. Gomes IFRN 1 Estruturas de Controle Permitem o controle da sequência de execução de um
Processos de software
Processos de software 1 Processos de software Conjunto coerente de atividades para especificação, projeto, implementação e teste de sistemas de software. 2 Objetivos Introduzir modelos de processos de
Fundamentos de Teste de Software
Núcleo de Excelência em Testes de Sistemas Fundamentos de Teste de Software Módulo 2- Teste Estático e Teste Dinâmico Aula 5 Técnicas de Especificação SUMÁRIO INTRODUÇÃO... 3 TÉCNICAS PARA PROJETO DE CASOS
Paradigmas da Engenharia de Software AULA PROF. ABRAHAO LOPES
Paradigmas da Engenharia de Software AULA 03-04 PROF. ABRAHAO LOPES Introdução O processo de software é visto por uma sequência de atividades que produzem uma variedade de documentos, resultando em um
Teste de Software Parte 2. Prof. Jonas Potros
Teste de Software Parte 2 Prof. Jonas Potros Conteúdos Processo de Teste Planejamento de Teste Processo de Teste Independentemente da fase de teste, o processo de teste inclui as seguintes atividades:
PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 11 - Threads e Concorrência
Aula 11 - Threads e Concorrência Conteúdo Programático desta aula Apresentar os Conceitos de Threads, Concorrência e Sincronização. Verificar a aplicabilidade destes conceitos no mercado, bem como sua
Arquiteturas Paralelas
ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES Arquiteturas Paralelas Medidas de desempenho Alexandre Amory Edson Moreno Índice 2 1. Introdução 2. Medidas de Desempenho Introdução 3 Aumento de desempenho dos
Processos de Desenvolvimento de Software. Ricardo Argenton Ramos UNIVASF Engenharia de Software I - Aula 2
Processos de Desenvolvimento de Software Ricardo Argenton Ramos UNIVASF Engenharia de Software I - Aula 2 A Engenharia de Software Uma Tecnologia em Camadas Gerenciamento da Qualidade Total e filosofias
Engenharia de Software. Teste de Software. Introdução. Profa. Dra. Lúcia V. L. Filgueiras Profa. Dra. Selma Shin Shimizu Melnikoff
Engenharia de Software Profa. Dra. Lúcia V. L. Filgueiras Profa. Dra. Selma Shin Shimizu Melnikoff Teste de Software Introdução Estratégias de teste Testes de módulo Testes de integração Teste de aceitação
Estratégias de Testes Parte I
Engenharia de Software III 5º. Semestre ADS Capítulo 9 Estratégias de Testes Parte I Profa. Dra. Ana Paula Gonçalves Serra Prof. Ms. Edson Saraiva de Almeida Agenda Exercício Profa. Dra. Ana Paula G. Serra
Segundo trabalho prático de implementação Sistema de reserva de assentos
Segundo trabalho prático de implementação Sistema de reserva de assentos 1. Descrição do problema Computação Concorrente (MAB-117) 2016/2 Prof. Silvana Rossetto 1 DCC/IM/UFRJ 17 de novembro de 2016 Um
Simulador didático de testes de algoritmos de ordenação
UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA Simulador didático de testes de algoritmos de ordenação Nomes: Bruno Silva Guedes (159033) Matheus de Carvalho Proença (160184) Turma:
Fundamentos de Sistemas Operacionais
Fundamentos de Sistemas Operacionais Aula 4: Programação Concorrente Diego Passos Últimas Aulas Processos Compostos por: Código (programa). Estado (memória, registradores). Em um sistema com multiprogramação:
Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA)
Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA) Análise Léxica A primeira fase da compilação Recebe os caracteres de entrada do programa e os converte em um fluxo de
Capítulo 2. Multiprogramação. Conteúdo. Objetivo. Recordando. Recordando. DCA-108 Sistemas Operacionais
DCA-108 Sistemas Operacionais Capítulo 2 Luiz Affonso Guedes www.dca.ufrn.br/~affonso [email protected] Multiprogramação Luiz Affonso Guedes 1 Luiz Affonso Guedes 2 Conteúdo Caracterização de um SO Moderno
Engenharia de Software Aula 2.1 Introdução à Engenharia de Requisitos. Prof. Bruno Moreno
Engenharia de Software Aula 2.1 Introdução à Engenharia de Requisitos Prof. Bruno Moreno [email protected] Engenharia de Requisitos É, talvez, o maior problema da indústria de SW; Está relacionada
RUP RATIONAL UNIFIED PROCESS
O que é RUP? É um metodologia para gerenciar projetos de desenvolvimento de software que usa a UML como ferramenta para especificação de sistemas. Ele é um modelo de processo híbrido Mistura elementos
Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores
Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores 2013-2 Compilador para a Linguagem Cafezinho Especificação dos trabalhos: T2 (Geração da Representação Intermediária e Análise
Sistemas Distribuídos Aula 3
Sistemas Distribuídos Aula 3 Aula passada Processos IPC Características Ex. sinais, pipes, sockets Aula de hoje Threads Kernel level User level Escalonamento Motivação: Servidor Web Considere Servidor
CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches
CES-11 Algoritmos e Estruturas de Dados Carlos Alberto Alonso Sanches Juliana de Melo Bezerra Ideia de Tarjan (1972) Durante a exploração em profundidade de um digrafo, podemos numerar seus vértices de
Fundamentos de Algoritmos (5175/31)
UEM/CTC Departamento de Informática Curso: Ciência da Computação Professor: Flávio Rogério Uber Fundamentos de Algoritmos (5175/31) Material Original: Prof. Yandre Maldonado e Gomes da Costa (UEM/DIN)
Introdução INTRODUÇÃO AO SWEBOK. Origens do corpo de conhecimentos da Engenharia de Software: Introdução a Computação e Engenharia de Software
INTRODUÇÃO AO SWEBOK Introdução a Computação e Engenharia de Software Profa. Cynthia Pinheiro Introdução Origens do corpo de conhecimentos da Engenharia de Software: Engenharia da Computação Ciência da
PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 12 - Threads e Concorrência em Java
Aula 12 - Threads e Concorrência em Java Conteúdo Programático desta aula Aplicar os conceitos e threads, processos concorrentes e sincronização em pequenos programas. Aplicar e verificar os conceitos
Capítulo 7. Expressões e Sentenças de Atribuição
Capítulo 7 Expressões e Sentenças de Atribuição Introdução Expressões são os meios fundamentais de especificar computações em uma linguagem de programação Para entender a avaliação de expressões, é necessário
Quiz baseado em localização para Symbian OS
Quiz baseado em localização para Symbian OS 1. Introdução Luis Valente [email protected] O objetivo do trabalho é criar uma demo de um jogo baseado em localização para telefone celular (Nokia S60).
TESTES DE SOFTWARE 1. Fundamentos sobre testes de software
ENG SOFT - TESTES TESTES DE SOFTWARE 1. Fundamentos sobre testes de software A atividade de teste de software sempre foi considerada como um gasto de tempo desnecessário, uma atividade de segunda classe,
2.1 NesC Seguem alguns dos principais desafios impostos à linguagem NesC:
2 TinyOS e NesC O framework de programação mais utilizado em redes de sensores sem fio é composto pelo sistema operacional TinyOS [11] e pela linguagem de programação NesC [12]. A linguagem NesC foi definida
Programação: Vetores
Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia
Projeto de Algoritmos
Projeto de Algoritmos Introdução aos Sistemas Computacionais Prof. Ernani Viriato de Melo / Reginaldo Costa http://www.ernani.eti.br http://reginaldofazu.blogspot.com 2º Semestre - 2008 Conceitos Básicos
Fundamentos de Sistemas Operacionais
Fundamentos de Sistemas Operacionais Aula 6: Monitores, Troca de Mensagens e Deadlock Diego Passos Última Aulas Mecanismos de Exclusão Mútua Operações atômicas. Protocolos de controle de acesso. Spin-locks.
Processos de Software by Pearson Education Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 4 Slide 1
Processos de Software Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 4 Slide 1 Objetivos Apresentar modelos de processos de software Descrever três modelos genéricos de processo e quando
Sincronização e Comunicação entre Processos
Sincronização e Comunicação entre Processos Monitores/Semáforos Semáforos Mecanismos de sincronização nãoestruturados; Exige do desenvolvedor bastante cuidado, pois qualquer engano pode levar a problemas.
Sistemas Embarcados (embutidos) Paulo C. Masiero
Sistemas Embarcados (embutidos) Paulo C. Masiero Caracterização São usados para controlar sistemas de diferentes tipos: máquinas domésticas, fábricas, carros, jogos etc. O software é embutido no hardware
PRIMEIROS PASSOS COM PYTHON. Prof. Msc. Luis Filipe Alves Pereira 2015
PRIMEIROS PASSOS COM PYTHON Prof. Msc. Luis Filipe Alves Pereira 2015 PRIMEIROS PASSOS COM PYTHON 02/47 O QUE É PYTHON? Python é uma linguagem de propósito geral, de alto nível e interpretada Python será
PROTÓTIPO PARA SUMARIZAÇÃO AUTOMÁTICA DE TEXTOS ESCRITOS EM LÍNGUA PORTUGUESA ALEXANDRE BUSARELLO JOYCE MARTINS
PROTÓTIPO PARA SUMARIZAÇÃO AUTOMÁTICA DE TEXTOS ESCRITOS EM LÍNGUA PORTUGUESA ALEXANDRE BUSARELLO JOYCE MARTINS Roteiro Introdução Objetivos Fundamentação Teórica Especificação Implementação Operacionalidade
Linguagens de Programação
Universidade Federal do Rio Grande do Norte Centro de Tecnologia Departamento de Computação e Automação Linguagens de Programação Professor Responsável: Luiz Affonso Henderson Guedes de Oliveira Prof.
Gerência de Projetos e Qualidade de Software. Prof. Walter Gima
Gerência de Projetos e Qualidade de Software Prof. Walter Gima 1 Plano de Ensino e Aprendizagem 2 3 Objetivos CONTEÚDO Se preparar para o inicio de um projeto Acompanhamento projeto Controles Métricas
Conceitos Básicos de Algoritmos
Conceitos Básicos de Algoritmos 35 TIPOS PRIMITIVOS Palavra-reservada: inteiro - define variáveis numéricas do tipo inteiro, ou seja, sem casas decimais Palavra-reservada: real - define variáveis numéricas
Engenharia de Software II
Engenharia de Software II Aula 12 http://www.ic.uff.br/~bianca/engsoft2/ Aula 12-31/05/2006 1 Ementa Processos de desenvolvimento de software (Caps. 2, 3 e 4 do Pressman) Estratégias e técnicas de teste
SISTEMAS DIGITAIS (SD)
SISTEMAS DIGITAIS (SD) MEEC Acetatos das Aulas Teóricas Versão 4.0 - Português Aula N o 23: Título: Sumário: Máquinas de Estado Microprogramadas: Endereçamento Expĺıcito/Impĺıcito Projecto de máquinas
Engenharia de Software II
Engenharia de Software II Aula 4 http://www.ic.uff.br/~bianca/engsoft2/ Aula 4-03/05/2006 1 Modelos Prescritivos de Processo Modelo em cascata Modelos incrementais Modelo incremental Modelo RAD Modelos
Universidade Federal de Campina Grande Unidade Acadêmica de Sistemas e Computação Curso de Bacharelado em Ciência da Computação.
Universidade Federal de Campina Grande Unidade Acadêmica de Sistemas e Computação Curso de Bacharelado em Ciência da Computação Organização e Arquitetura de Computadores I Organização e Arquitetura Básicas
Gerência de Projetos de Software. Prof. Dr. João Dovicchi INE / CTC / UFSC.
Prof. Dr. João Dovicchi INE / CTC / UFSC [email protected] http://www.inf.ufsc.br/~dovicchi Programa Projetos e Metodologias Tipos e abordagens Organização Estimativas de Esforço e Gerência de Riscos
Verificação e Validação
Verificação e Validação Sistemas possuem restrições de qualidade e confiabilidade Qualidade de sw: satisfação dos requisitos funcionais, de desempenho e normas explicitamente declarados. Redução de custos
JUnit. Facilitando o desenvolvimento e execução de testes unitários em código java. Peterson Rodrigues
JUnit Facilitando o desenvolvimento e execução de testes unitários em código java. Peterson Rodrigues Roteiro Teste Unitário: O que? Por quê? Quando? Quem? O que testar? Teste Funcional: O que é? JUnit:
Projeto de Linguagem. Linguagens de Programação
Projeto de Linguagem Renato Ferreira Linguagens de Programação Linguagens são adotadas para preencher uma demada Facilitar uma aplicação outrora difícil/impossível Independente da qualidade da linguagem
Barramento. Prof. Leonardo Barreto Campos 1
Barramento Prof. Leonardo Barreto Campos 1 Sumário Introdução; Componentes do Computador; Funções dos Computadores; Estrutura de Interconexão; Interconexão de Barramentos Elementos de projeto de barramento;
Exercícios de Sistemas Operacionais 3 B (1) Gerência de Dispositivos de Entrada e Saída
Nome: Exercícios de Sistemas Operacionais 3 B (1) Gerência de Dispositivos de Entrada e Saída 1. A gerência de dispositivos de entrada e saída é uma das principais e mais complexas funções de um sistema
Working 03 : Conceitos Básicos II
Universidade Federal do Espirito Santo Centro Tecnologico Working 03 : Conceitos Básicos II Objetivos: Dominar a construção de estruturas de seleção em C; Aperfeiçoarse na resolução de problemas, da primeira
SEMINÁRIOS INTEGRADOS EM ADS PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS
SEMINÁRIOS INTEGRADOS EM ADS PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS Prof. Dr. Daniel Caetano 2014-1 DISCUSSÃO Visão Geral dos Paradigmas Quais os paradigmas mais comuns? Do que é composto um programa
COMPUTAÇÃO PARALELA E DISTRIBUÍDA
COMPUTAÇÃO PARALELA E DISTRIBUÍDA Aluno: Alessandro Faletti Orientadora: Noemi Rodriguez Introdução O objetivo inicial no projeto era aplicar a possibilidade de processamento em paralelo no sistema CSBase
ESTUDANTES SELECIONADOS PARA ENTREVISTA AUXÍLIO ESTUDANTIL 2015 EDITAL 38/15 Campus Pouso Alegre Dia 03/11 Terça- feira. Dia 04/11 Quarta-feira
ESTUDANTES SELECIONADOS PARA ENTREVISTA AUXÍLIO ESTUDANTIL 2015 EDITAL 38/15 Campus Pouso Alegre Dia 03/11 Terça- feira 7202 Vitor Hugo Melo de Lima Licenciatura em Química 19h 6699 Michele do Nascimento
ESTRUTURAS CONDICIONAIS. Baseado nos slides de autoria de Rosely Sanches e Simone Senger de Souza
ESTRUTURAS CONDICIONAIS Baseado nos slides de autoria de Rosely Sanches e Simone Senger de Souza Estruturas de Controle ESTRUTURA SEQUENCIAL ESTRUTURA CONDICIONAL ESTRUTURA DE REPETIÇÃO 2 Estruturas Condicionais
Gerência de Projetos e Qualidade de Software. Prof. Walter Gima
Gerência de Projetos e Qualidade de Software Prof. Walter Gima 1 OBJETIVOS Compreender o processo de gerenciamento de qualidade e as principais atividades do processo de garantia, planejamento e controle
INFORMÁTICA APLICADA AULA 02 ALGORITMOS
UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: Bacharelado em Ciências e Tecnologia INFORMÁTICA APLICADA AULA 02 ALGORITMOS Profª ª Danielle Casillo ALGORITMOS Um algoritmo é uma sequência de instruções
Capítulo 2 Processos e Threads
Capítulo 2 Processos e Threads 2.1 Processos 2.2 Threads 2.3 Comunicação interprocesso 2.4 Problemas clássicos de IPC 2.5 Escalonamento 1 Processos O Modelo de Processo Multiprogramação de quatro programas
Algoritmo: Definição. Algoritmo. O que é Lógica? Lógica de Programação. Mas e a Lógica de Programação?
: Definição Introdução a s Prof. Araken Medeiros [email protected] Um algoritmo pode ser definido como uma sequência de passos finitos, que se executados em um determinado período de tempo, atingirá
INTRODUÇÃO AO ARDUINO DUE, CANAL DIGITAL, FUNÇÃO DELAY
INTRODUÇÃO AO ARDUINO DUE, CANAL DIGITAL, FUNÇÃO DELAY INTRODUÇÃO A Plataforma Arduino é considerada plataforma aberta, ou seja, qualquer pessoa pode efetuar uma melhoria em um código, biblioteca e disponibilizá-la
Aula de hoje. Comandos. Comandos simples. Comandos. Comandos de controle. Bloco de comandos. SCC Introdução à Programação para Engenharias
SCC 124 - Introdução à Programação para Engenharias Comandos Professor: André C. P. L. F. de Carvalho, ICMC-USP Pos-doutorando: Isvani Frias-Blanco Monitor: Henrique Bonini de Britto Menezes 1 Aula de
Aula 6: Comunicação entre processos. Instituto Federal da Bahia INF009 - Sistemas Operacionais Profª Flávia Maristela
Aula 6: Comunicação entre processos Instituto Federal da Bahia INF009 - Sistemas Operacionais Profª Flávia Maristela (-- motivação --) Processos em execução no sistema operacional podem ser: Independentes:
Prof. Esp. Fabiano Taguchi
UML Prof. Esp. Fabiano Taguchi http://fabianotaguchi.wordpress.com [email protected] UML COMPETÊNCIA: Conhecer e desenvolver estudos de caso usando modelagem orientada a objeto. HABILIDADE: Conhecer
TS03. Teste de Software ESTÁGIOS DO TESTE DE SOFTWARE. COTI Informática Escola de Nerds
TS03 Teste de Software ESTÁGIOS DO TESTE DE SOFTWARE COTI Informática Escola de Nerds Teste do Desenvolvedor O Teste do Desenvolvedor denota os aspectos de design e implementação de teste mais apropriados
Requisitos de Software
Requisitos de Software Engenharia de requisitos Estabelece os serviços que o cliente requer de um sistema e as restrições sob as quais tal sistema operará e será desenvolvido. Tais serviços e restrições
Arquitetura e Organização de Computadores. Prof. Marciano dos Santos Dionizio
Arquitetura e Organização de Computadores Prof. Marciano dos Santos Dionizio Arquitetura e Organização de Computadores Quando falamos de arquitetura de computadores é possível que inicialmente pensemos
UML. Modelando um sistema
UML Modelando um sistema Fases do desenvolvimento de Software Análise de requisitos Análise Projeto Programação Análise de Requisitos Esta fase captura as intenções e necessidades dos usuários do sistema
TORNEIO RIO DE JANEIRO 2016 ADULTO MASCULINO
TORNEIO RIO DE JANEIRO 2016 ADULTO MASCULINO Classificação Final 1 colocado: Botafogo F.R. 2 colocado: Angra Basquete 3 colocado: Minas Tênis Clube 4º colocado: ABIG/Jequiá I.C. 5º colocado: Tijuca T.C.
Programação Orientada a Objetos. Manipulação de Exceções
Programação Orientada a Objetos Manipulação de Exceções Cristiano Lehrer, M.Sc. Introdução à Manipulação de Exceções (1/2) Em uma linguagem sem manipulação de exceção: Quando ocorre uma exceção, o controle
Categoria Faster - FST. Categoria Professional PRO 6.5. Categoria Professional PRO 7.5
Categoria Faster - FST 12/05/2016 - Tempos válidos para a categoria - ABAIXO de 06.499s NÃO houve participantes nessa categoria Categoria Professional 6.5 - PRO 6.5 12/05/2016 - Tempos válidos para a categoria
UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE DEPARTAMENTO DE INFORMÁTICA E MATEMÁTICA APLICADA. DIM0320 Algoritmos e Programação de Computadores
UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE DEPARTAMENTO DE INFORMÁTICA E MATEMÁTICA APLICADA DIM0320 Algoritmos e Programação de Computadores #VARIÁVEIS #TIPOS DE DADOS E L I EZ I O S O A R ES E L I EZ
Conceitos básicos de programação
Para aprender uma linguagem de programação podemos começar por conhecer os vocábulos ou símbolos que formam o seu léxico e depois aprender como esses vocábulos integram as instruções (frases) que compõe
Gerência de Dispositivos. Adão de Melo Neto
Gerência de Dispositivos Adão de Melo Neto 1 Gerência de Dispositivos Introdução Acesso ao Subsistema de E/S Subsistema de E/S Device Drivers Controladores Dispositivos de E/S Discos Magnéticos Desempenho,
PROVAS DE ADMISSÃO PARA O ANO LETIVO 15/16 PROVA DE APTIDÃO MUSICAL - ESCRITA NOME DO CANDIDATO
Dia: 8 de junho de 2015 Hora: 18,00 horas Professor: Carla Sabino Sala: 1 1 035 Ana Júlia Tavares de Oliveira 014 Ana Sofia Pereira Leal 001 Beatriz Pacheco Festas 011 Bruno Tomás Silva Ribeiro 099 Daniel
