38
11 a Semana de Tecnologia Metroferroviária – Fórum Técnico Associação dos Engenheiros e Arquitetos de Metrô - AEAMESP IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM SEGURANÇA CRÍTICA Introdução O objetivo deste trabalho, frente ao atual cenário do setor Metroferroviário, é de conscientização e esclarecimento sobre o Controle da Qualidade de Software de Sistemas Sinalização e Controle, demonstrando providências exigíveis a Empresas Fornecedoras e Projetistas destes Sistemas. No meio acadêmico, são ainda muito discutidas as problemáticas da realização de funções de segurança através de Software. Apesar do tímido número de evidências científicas de que equipamentos baseados em Software se comportam de maneira segura, a prática em diversas áreas demonstra um quadro irreversível de aplicação intensiva desses equipamentos nos mais diversos sistemas, conforme vivenciamos no nosso dia a dia. A obtenção de um Software Seguro envolve inúmeros fatores, entre eles a experiência e o preparo de toda a equipe envolvida no Processo, o uso de técnicas e ferramentas apropriadas, uma criteriosa Análise de Segurança Independente e, dentre os atributos da Qualidade de Software, em especial sua Confiabilidade. Confiabilidade de Software A Confiabilidade de Software pode ser definida como a “probabilidade de operação livre de falhas por um período de tempo especificado em um determinado ambiente” [ANSI 1991]. A Confiabilidade é um dos atributos da Qualidade de Software, uma propriedade multidimensional que inclui outros fatores de satisfação do cliente tais como funcionalidade, facilidade de uso, desempenho, capacidade, documentação, facilidades de suporte, instalação e manutenção [Grad 1987, Grad 1992]. A Confiabilidade de Software é geralmente aceita como o fator principal da Qualidade de Software, pois quantifica as falhas de Software – que podem tirar de operação um poderoso sistema ou até mesmo trazer riscos às pessoas e patrimônio [Lyu 1996].

IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

Embed Size (px)

Citation preview

Page 1: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

11a Semana de Tecnologia Metroferroviária – Fórum Técnico

Associação dos Engenheiros e Arquitetos de Metrô - AEAMESP

IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM SEGURANÇA CRÍTICA

Introdução

O objetivo deste trabalho, frente ao atual cenário do setor Metroferroviário, é de conscientização e

esclarecimento sobre o Controle da Qualidade de Software de Sistemas Sinalização e Controle,

demonstrando providências exigíveis a Empresas Fornecedoras e Projetistas destes Sistemas.

No meio acadêmico, são ainda muito discutidas as problemáticas da realização de funções de

segurança através de Software. Apesar do tímido número de evidências científicas de que

equipamentos baseados em Software se comportam de maneira segura, a prática em diversas áreas

demonstra um quadro irreversível de aplicação intensiva desses equipamentos nos mais diversos

sistemas, conforme vivenciamos no nosso dia a dia.

A obtenção de um Software Seguro envolve inúmeros fatores, entre eles a experiência e o preparo

de toda a equipe envolvida no Processo, o uso de técnicas e ferramentas apropriadas, uma criteriosa

Análise de Segurança Independente e, dentre os atributos da Qualidade de Software, em especial

sua Confiabilidade.

Confiabilidade de Software

A Confiabilidade de Software pode ser definida como a “probabilidade de operação livre de falhas

por um período de tempo especificado em um determinado ambiente” [ANSI 1991]. A

Confiabilidade é um dos atributos da Qualidade de Software, uma propriedade multidimensional

que inclui outros fatores de satisfação do cliente tais como funcionalidade, facilidade de uso,

desempenho, capacidade, documentação, facilidades de suporte, instalação e manutenção [Grad

1987, Grad 1992].

A Confiabilidade de Software é geralmente aceita como o fator principal da Qualidade de Software,

pois quantifica as falhas de Software – que podem tirar de operação um poderoso sistema ou até

mesmo trazer riscos às pessoas e patrimônio [Lyu 1996].

Page 2: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

Os métodos mais respeitados e evoluídos para a avaliação da confiabilidade de software, tal como

descrito em “Software Reliability Engineering” [Musa 1999], são baseados na observação de falhas

do produto terminado, sustentada por análise estatística. Estes métodos são a única forma de medir

a confiabilidade do produto, pois são baseadas na observação direta de seu comportamento. As

importantes desvantagens destas abordagens são [Dale 1990]:

• estão preocupadas puramente com a medida da confiabilidade, enquanto outras informações

sobre, por exemplo, os métodos que foram utilizados no desenvolvimento do produto, são

ignoradas; e

• só podem ser utilizadas quando o produto final existe, portanto sua aplicação só pode ser

iniciada a partir da obtenção de dados durante a fase de testes do desenvolvimento.

Uma alternativa pesquisada para a obtenção de Software de alta confiabilidade é a especificação e

análise dos Processos de Desenvolvimento de Software adotados em um projeto, em conformidade

com as normas técnicas adequadas a aplicação, além de modelos de ampla aceitação.

Adotando-se uma abordagem deste tipo, a avaliação da confiabilidade deve ser realizada sobre os

produtos intermediários de cada fase do processo de desenvolvimento, antes de se obter o produto

final.

Segurança de Software (SW Safety)

A Segurança de um sistema S(t) é a probabilidade de um sistema efetuar suas operações de forma

correta, ou descontinuar seu funcionamento de forma a não comprometer a operação de outros

sistemas ou comprometer a Segurança [Johnson 1989]. As técnicas de “falha segura” (fail-safe) têm

sido empregadas desde em sistemas eletrônicos convencionais e até mesmo nas principais rotinas de

diagnóstico de funções de Software e componentes de Hardware, bem como nos conceitos de

programação defensiva.

Especificação de Requisitos Técnicos de Software

A Especificação Técnica de Software abordada a seguir foi elaborada, a princípio, tendo em vista

um horizonte de aplicação da tecnologia “Communications Based Train Control” (CBTC) na

Page 3: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

implantação e modernização de Sistemas de Sinalização e Controle. O emprego desta nova

tecnologia traz desafios tais como:

• uso intensivo de Software para a realização de funções de Tempo Real e Segurança Crítica;

• fatores de aumento natural do risco e a conseqüente necessidade de sua mitigação através da

tecnologia, tais como a diminuição do intervalo entre trens (“headway”), operação automática

sem condutor (“driverless”), funções de diagnóstico e recuperação remotas;

• transmissão intensiva por meio aberto de sinais vitais, trazendo preocupações típicas da

Segurança da Informação (“security”), além do envelhecimento de informações de tempo real,

que devem ser tratadas pelo Software de comunicação;

• determinação da posição das composições e distâncias percorridas utilizando múltiplos

sensores, e tratamento por algoritmos que incluem informações sobre margens de segurança

para determinação e cumprimento de pontos de parada com segurança;

• emprego limitado de hardware intrinsecamente “fail-safe” e componentes com modos de falha

bem definidos; e

• os conceitos consagrados de Segurança de um Sistema de Sinalização e Controle devem ser

implementados de forma completa e claramente verificáveis [IEEE 2005].

No entanto, devido a incorporação da experiência obtida pelo METRÔ-SP no projeto e implantação

dos sistemas de Sinalização e Controle, somada a estudos realizados em conjunto com a Fundação

para o Desenvolvimento Tecnológico da Engenharia - FDTE, foi considerado adequado o emprego

desta metodologia para a aquisição de Software do Sistema de Sinalização e Controle de Trens –

Estações e Vias da Extensão da Linha 2 – Verde, trecho Ana Rosa – Ipiranga, mesmo tratando-se de

um Sistema Microprocessado Convencional, e dentre seus principais requisitos, serão enfatizados:

Conformidade com CMMi

A Capacidade do Processo [CMU/SEI 2002] estabelece o grau de refinamento e institucionalização

com que o processo é realizado em uma organização, em cinco níveis discretos, em sua

representação por estágios, conforme representado na Figura 1.

Page 4: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

Nível 1 - Inicial Fracamente Controlado,

Imprevisível

Nível 2 - RepetívelRepetição de Tarefas

executadas com sucesso

Nível 3 - DefinidoProcesso caracterizado e

claramente entendido

Nível 4 - GerenciadoProcesso medido e

controlado

Nível 5 - OtimizaçãoFoco na melhoria

contínua do Processo

Figura 1 - Estágios do CMMi

Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos iniciando a utilização

desta metodologia, ilustrados na Figura 2, podem ser assim resumidos:

• o Processo é Executado;

• o Processo atinge seus resultados definidos; e

• os produtos de trabalho do Processo são gerenciados.

SaídasEntradas

Figura 2 - CMMi nível 2 - Visibilidade

A Especificação Técnica de Software apresenta o seguinte requisito:

A Contratada deve adotar a metodologia estabelecida no “Capability Maturity Model Integration

for Systems Engineering and Software Engineering” (CMMI-SE/SW), versão 1.1 ou superior, do

“Software Engineering Institute / Carnegie Mellon University” (SEI/CMU) para todo o Software

fornecido, sendo que:

Page 5: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

Deve ser adotado CMMI-SE/SW nível dois (2) ou superior, na representação em estágios “Staged

Representation”;

A Contratada deve comprovar pelo “Standard CMMI Appraisal Method for Process Improvement”

(SCAMPI) [CMU/SEI 2001], o emprego desta metodologia por toda equipe envolvida no projeto.

Nível de Integridade de Segurança (SIL)

A Especificação Técnica de Software apresenta o seguinte requisito com relação ao Nível de

Integridade de Segurança de Software, que juntamente com os parâmetros de Segurança do

Hardware irão determinar a Segurança do Sistema, traduzido em valores na Figura 3.

Os conceitos de “Fail Safe” devem ser utilizados no Software relacionado às funções de Segurança

Crítica ou Vitais. Deve atender ao “Software Safety Integrity Level” (SIL) quatro (4), conforme a

norma IEC 61508 “Functional Safety of Electrical/Electronic/Programmable Electronic Safety-

Related Systems”.

SIL Falhas inseguras / hora 4 10-9 < λu < 10-8

3 10-8 < λu < 10-7

2 10-7 < λu < 10-6

1 10-6 < λu < 10-5

Figura 3 – Nível de Integridade de Segurança [IEC 1999]

Conformidade com a Norma CENELEC 50128

Um importante requisito na Especificação Técnica de Software é a conformidade com a Norma

CENELEC 50128 [CENELEC 2001], específica para o Software aplicado a Sistemas de

Sinalização e Controle:

Devem ser atendidas as recomendações da norma CENELEC 50128 “Railway applications –

Communications, Signaling and Processing Systems – Software for Railway Control and Protection

Systems”.

Conforme podemos observar no diagrama seguinte, presente na Figura 4, as atividades específicas

para a obtenção do Software estão vinculadas às especificações do Sistema onde ele é empregado.

Page 6: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

Integração de Sistema

Especificação de Requisitos de Sistema

Especificação de Requisitos de Segurança de Sistema

Descrição da Arquitetura de Sistema

Plano de Segurança de Sistema

Especificação dos Requisitos de Software

Especificação de teste de Requisitos de Software

Especificação de Arquitetura de Software

Plano de Integração de Software

Especificação de Projeto de Software

Especificação de Teste de Módulo de Software

Especificação de Projeto de Módulo de Software

Código Fonte de Software, e documentação de suporte

Relatório de Teste de Módulo de Software

Relatório de Teste de Integração de Software

Relatório de Teste de Integração de Software e Hardware

Documentos de Integração e Teste de Sistema

Verificação do Sistema

Verificação dos Requisitos de Software

Verificação da Arquitetura de Software

Verificação do Projeto de Software

Verificação dos módulos de Software

Verificação de Código

Validação de Software

Validação de Sistema

Teste de Software

Implementação / Codificação

Projeto de Software

Requisitos de Software

Integração de Software e Hardware

Documentos de Projeto Verificação Etapa

Documentos de Instalação do Sistema

Documentos de Manutenção do Sistema

Validação do Sistema

Desenvolvimento do Sistema

Projeto de Módulo de Software

Validação de Software

Transição para Suporte

Figura 4 - Ciclo de Vida e Artefatos [CENELEC 2001]

Page 7: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

Planejamento de Software

Antes do início do desenvolvimento do Software, foi detectada a necessidade de solicitar à empresa

fornecedora e projetista a elaboração de Planos específicos aos processos de obtenção de Software

com o nível de Segurança adequado à aplicação no sistema de Sinalização e Controle:

• Plano de Gerenciamento de Software;

• Plano de Garantia da Qualidade de Software;

• Plano de Gerência de Configuração de Software;

• Plano de Verificação de Software de Aplicação Crítica e de Segurança; e

• Plano de Validação de Software.

Estes documentos deverão ser submetidos à aprovação, incluindo eventuais alterações ao longo do

fornecimento.

Ciclo de Vida

A Especificação Técnica de Software apresenta, ainda, uma descrição das fases de um Ciclo de

Vida do Software de referência, listadas a seguir:

• Especificação de Requisitos de Software;

• Arquitetura de Software;

• Projeto de Software;

• Implementação de Software;

• Integração e Testes de Software;

• Validação de Software;

• Aceitação de Software; e

• Operação e Manutenção.

Conclusões

Este trabalho tem por objetivo obter uma maior garantia do nível de Segurança do Software e,

ainda, a redução do re-trabalho e conseqüente otimização dos recursos empregados, possibilitando

também um maior controle sobre o processo e as tecnologias em implantação.

Não deixando de observar as limitações impostas pelo estágio de desenvolvimento atual da

indústria nacional, é importante vislumbrar esta oportunidade e necessidade de progresso,

Page 8: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

aproveitando a experiência e capacidade de inovação, e incorporando a iniciativa dos maiores

consumidores de Software mundiais e a produção científico-acadêmica disponível nesta área.

Referência Bibliográfica

[CMU/SEI 2002] Carnegie Mellon University Software Engineering Institute: “CMMI-SE/SW – Capability Maturity

Model Integration (CMMI), Version 1.1: CMMI for Systems Engineering and Software Engineering, Staged

Representation”, CMU/SEI-2002-TR-002, 2002.

[CMU/SEI 2001] Carnegie Mellon University Software Engineering Institute: “SCAMPI – Standard CMMI Appraisal

Method for Process Improvement Version 1.1: Method Definition Document”, CMU/SEI-2001-HB-001, 2001.

[CENELEC 2001] European Committee for Electrotechnical Standardization: “Railway Applications –

Communications, Signaling and Processing Systems – Software for Railway Control and Protection Systems”, BS-EN

50128, 2001.

[Dale 1990] Dale, C.; Paul Rook (ed.) – “Software Reliability Handbook” – Elsevier Applied Science, 1990.

[Johson 1989] Barry W. Johnson –“Design and Analyses of fault-Tolerant Digital Systems” – Addison-Wesley, 1989.

[Lyu 1996] Michael R. Lyu (ed.) – “Handbook of Software Reliability Engineering”, McGraw-Hill, 1996.

[Musa 1999] Musa J.D. – “Software Reliability Engineering”, McGraw-Hill, 1999.

[ANSI 1991] ANSI/IEEE, "Standard Glossary of Software Engineering Terminology", STD-729-1991, ANSI/IEEE,

1991.

[GRAD 1987] Grady, Robert B.; Caswell, Deborah L.- “Software Metrics: Establishing a Company-Wide Program.”

Prentice Hall, 1987.

[GRAD 1992] Grady, Robert B. - “Practical Software Metrics for Project Management and Process Improvement”.

Prentice Hall, 1992.

[IEEE 2005] IEEE Standard for Communications-Based Train Control (CBTC) Performance and Functional

Requirements, Institute of Electrical and Electronics Engineers, IEEE 1474-1, 2005.

[IEC 1999] Functional safety of electrical/electronic/programmable electronic safety-related systems - General

requirements, IEC 61508-1, 1999.

Eng. Christian Becker Bueno de Abreu

e-mail: [email protected] – tel. 55-11-3371-7222

Engenheiro de Projeto da Companhia do Metropolitano de São Paulo – METRÔ

Departamento de Projeto de Sistemas de Controle e Comunicações – GEP/EPS

Prof. Dr. Paulo Sérgio Cugnasca

Escola Politécnica da Universidade de São Paulo (EPUSP)

Departamento de Engenharia de Computação e Sistemas Digitais (PCS)

Grupo de Análise de Segurança (GAS)

Page 9: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

11ª Semana de Tecnologia Metroferroviária

Importância da

Qualidade de Softwareem

Segurança Crítica

Eng. Christian Becker Bueno de Abreu

Prof. Dr. Paulo Sérgio Cugnasca

Page 10: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

Software - Definições

“Software”:Criação intelectual compreendendo os programas,

procedimentos, regras e qualquer documentação correlatade um sistema de processamento de dados

NOTA: O “software” não depende do meio no qual éregistrado.

Desenvolvimento:Todas as atividades a serem realizadas para a criação de um

produto de Software.

[NBR ISO 9000-3]

Natureza do Software

???

Page 11: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

Software - Definições

“Software”:Criação intelectual compreendendo os programas,

procedimentos, regras e qualquer documentação correlatade um sistema de processamento de dados

NOTA: O “software” não depende do meio no qual éregistrado.

Desenvolvimento:Todas as atividades a serem realizadas para a criação de um

produto de Software.

[NBR ISO 9000-3]

Page 12: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

Qualidade & Segurança - Definições

Qualidade - indicadores

● Confiabilidade● Funcionalidade● Facilidade de uso● Desempenho● Capacidade● Documentação● Suporte, Instalação e

Manutenção

Segurança - S(t)

Probabilidade de um sistemaefetuar suas operações de

forma correta oudescontinuar seu

funcionamento de forma a não comprometer a operação

de outros sistemas oucomprometer a Segurança

Page 13: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

Qualidade ∩ Segurança - Confiabilidade

Confiabilidade - R(t)

Probabilidade de operaçãolivre de falhas por um

período de tempo especificado em um

determinado ambiente

QUALIDADEQUALIDADE

CONFIABILIDADECONFIABILIDADE

MTTF0

R t . dt

Page 14: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

Qualidade & Segurança - Definições

Qualidade - indicadores

● Confiabilidade● Funcionalidade● Facilidade de uso● Desempenho● Capacidade● Documentação● Suporte, Instalação e

Manutenção

Segurança - S(t)

Probabilidade de um sistemaefetuar suas operações de

forma correta oudescontinuar seu

funcionamento de forma a não comprometer a operação

de outros sistemas oucomprometer a Segurança

Page 15: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

Qualidade & Segurança - Definições

Qualidade - indicadores

● Confiabilidade● Funcionalidade● Facilidade de uso● Desempenho● Capacidade● Documentação● Suporte, Instalação e

Manutenção

Segurança - S(t)

Probabilidade de um sistemaefetuar suas operações de

forma correta oudescontinuar seu

funcionamento de forma a não comprometer a operação

de outros sistemas oucomprometer a Segurança

Page 16: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

Medição da Confiabilidade

Medir a Confiabilidade:Observação de falhas

+ Análise estatística.

Problemas:- Início na etapa de testes: Produto deve estar terminado- Tempo necessário: Software Ultra-confiabilidade- Informações ignoradas: Métodos empregados

Alternativa:

Especificação e Análise dos Processos de Desenvolvimento

de Software.

Conformidade com NormasTécnicas adequadas e Modelos

de ampla aceitação.

Avaliação da Confiabilidadesobre Artefatos Intermediários

de cada fase do Processo de Desenvolvimento.

Page 17: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

Medição da Confiabilidade

Medir a Confiabilidade:Observação de falhas

+ Análise estatística.

Problemas:- Início na etapa de testes: Produto deve estar terminado- Tempo necessário: Software Ultra-confiabilidade- Informações ignoradas: Métodos empregados

Alternativa:

Especificação e Análise dos Processos de Desenvolvimento

de Software.

Conformidade com NormasTécnicas adequadas e Modelos

de ampla aceitação.

Avaliação da Confiabilidadesobre Artefatos Intermediários

de cada fase do Processo de Desenvolvimento.

Page 18: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

CMU/SEI - CMMi

Representação em estágios:

A Capacidade do Processoestabelece o seu

grau de refinamento e institucionalização.

Page 19: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

CMU/SEI - CMMi

Visibilidade:

CMMi nível 2

Page 20: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

Requisito Técnico de Software - Qualidade

Deve ser adotada a metodologia estabelecida no “Capability Maturity Model Integration for Systems Engineering and Software Engineering” (CMMI-SE/SW), versão 1.1 ou superior, do “Software Engineering Institute / Carnegie Mellon University”(SEI/CMU) para todo o Software fornecido, sendo que:

● Deve ser adotado CMMI-SE/SW nível dois (2) ou superior, narepresentação em estágios “Staged Representation”;

● Deve ser comprovado pelo “Standard CMMI Appraisal Method for Process Improvement” (SCAMPI), o emprego destametodologia por toda equipe envolvida no projeto.

[EPS 2004]

Page 21: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

Fail Safe (Falha Segura)

A validade deste conceito é, em geral, baseada naexperiência, mas tem aplicação limitada aodesenvolvimento e uso de sistemas grandes ecomplexos empregando microprocessadorescomerciais.O crescimento exponencial no número decombinações de falhas a serem consideradasquando usando tais componentes significam queuma abordagem determinística é, geralmenteimpraticável. Com tais sistemas complexos, aabordagem probabilística pode ser usadaefetivamente. [CENELEC 50126]

Exemplos de aplicaçãoem Software:

- Rotinas de diagnóstico- Programação Defensiva

Page 22: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

Níveis de Risco

Determinação dos Níveis de Risco* Freqüência da

ocorrência de umevento de ameaça

Níveis de Risco

Freqüente Indesejável Intolerável Intolerável IntolerávelProvável Tolerável Indesejável Intolerável Intolerável

Ocasional Tolerável Indesejável Indesejável IntolerávelRemoto Negligenciável Tolerável Indesejável Indesejável

Improvável Negligenciável Negligenciável Tolerável TolerávelInacreditável Negligenciável Negligenciável Negligenciável Negligenciável

Insignificante Marginal Crítico CatastróficoNíveis de gravidade da conseqüência da ameaça.

Page 23: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

IEC 61508 - Parâmetros para determinar SIL

Conseqüência do Risco

C1 Perdas Pequenas.C2 Perdas sérias e permanentes

para uma ou mais pessoas, oumorte de uma pessoa.

C3 Morte de várias pessoas.C4 Muitas pessoas assassinadas.

Freqüência e Tempo de Exposição

F1 Exposição de rara a freqüente naregião de perigo.

F2 Exposição de freqüente a permanente na região de perigo.

Possibilidade de evitar o evento

P1 Possível sob certas condições.P2 Quase impossível.

Probabilidade de ocorrênciasindesejáveis

W1Probabilidade muito pequena de que as ocorrências acontecerão.

W2Probabilidade pequena de queas ocorrências acontecerão.

W3Probabilidade relativamente altade que as ocorrênciasacontecerão.

Page 24: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

IEC 61508 - Parâmetros para determinar SIL

Conseqüência do Risco

C1 Perdas Pequenas.C2 Perdas sérias e permanentes

para uma ou mais pessoas, oumorte de uma pessoa.

C3 Morte de várias pessoas.C4 Muitas pessoas assassinadas.

Freqüência e Tempo de Exposição

F1 Exposição de rara a freqüente naregião de perigo.

F2 Exposição de freqüente a permanente na região de perigo.

Possibilidade de evitar o evento

P1 Possível sob certas condições.P2 Quase impossível.

Probabilidade de ocorrênciasindesejáveis

W1Probabilidade muito pequena de que as ocorrências acontecerão.

W2Probabilidade pequena de queas ocorrências acontecerão.

W3Probabilidade relativamente altade que as ocorrênciasacontecerão.

Page 25: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

IEC 61508 - Parâmetros para determinar SIL

Conseqüência do Risco

C1 Perdas Pequenas.C2 Perdas sérias e permanentes

para uma ou mais pessoas, oumorte de uma pessoa.

C3 Morte de várias pessoas.C4 Muitas pessoas assassinadas.

Freqüência e Tempo de Exposição

F1 Exposição de rara a freqüente naregião de perigo.

F2 Exposição de freqüente a permanente na região de perigo.

Possibilidade de evitar o evento

P1 Possível sob certas condições.P2 Quase impossível.

Probabilidade de ocorrênciasindesejáveis

W1Probabilidade muito pequena de que as ocorrências acontecerão.

W2Probabilidade pequena de queas ocorrências acontecerão.

W3Probabilidade relativamente altade que as ocorrênciasacontecerão.

Page 26: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

IEC 61508 - Parâmetros para determinar SIL

Conseqüência do Risco

C1 Perdas Pequenas.C2 Perdas sérias e permanentes

para uma ou mais pessoas, oumorte de uma pessoa.

C3 Morte de várias pessoas.C4 Muitas pessoas assassinadas.

Freqüência e Tempo de Exposição

F1 Exposição de rara a freqüente naregião de perigo.

F2 Exposição de freqüente a permanente na região de perigo.

Possibilidade de evitar o evento

P1 Possível sob certas condições.P2 Quase impossível.

Probabilidade de ocorrênciasindesejáveis

W1Probabilidade muito pequena de que as ocorrências acontecerão.

W2Probabilidade pequena de queas ocorrências acontecerão.

W3Probabilidade relativamente altade que as ocorrênciasacontecerão.

Page 27: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

Redução de Risco Nível de Integridade de Segurança- Sem Requisitos de Segurança

A Sem Requisitos Especiais de Segurança

B, C SIL 1D SIL 2

E, F SIL 3G SIL 4H Sistemas de Proteção não Suficientes

IEC 61508 - Determinar Redução de Risco e SIL

W3 W2 W1C1 A - -

C2F1

P1 B A -P2 C B A

F2P1 D C BP2 E D C

C3F1 F E DF2 G F E

C4 H G F

SIL Falhas inseguras / hora4 10-9 < u < 10-8

3 10-8 < u < 10-7

2 10-7 < u < 10-6

1 10-6 < u < 10-5

Page 28: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

SIL Falhas inseguras / hora4 10-9 < u < 10-8

3 10-8 < u < 10-7

2 10-7 < u < 10-6

1 10-6 < u < 10-5

W3 W2 W1C1 A - -

C2F1

P1 B A -P2 C B A

F2P1 D C BP2 E D C

C3F1 F E DF2 G F E

C4 H G F

IEC 61508 - Determinar Redução de Risco e SIL

Redução de Risco Nível de Integridade de Segurança- Sem Requisitos de Segurança

A Sem Requisitos Especiais de Segurança

B, C SIL 1D SIL 2

E, F SIL 3G SIL 4H Sistemas de Proteção não Suficientes

Page 29: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

IEC 61508 - Determinar Redução de Risco e SIL

Redução de Risco Nível de Integridade de Segurança- Sem Requisitos de Segurança

A Sem Requisitos Especiais de Segurança

B, C SIL 1D SIL 2

E, F SIL 3G SIL 4H Sistemas de Proteção não Suficientes

W3 W2 W1C1 A - -

C2F1

P1 B A -P2 C B A

F2P1 D C BP2 E D C

C3F1 F E DF2 G F E

C4 H G F

SIL Falhas inseguras / hora4 10-9 < u < 10-8

3 10-8 < u < 10-7

2 10-7 < u < 10-6

1 10-6 < u < 10-5

Page 30: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

Software & Segurança: EN50128 SWSIL

Tendo caracterizado o Nível de Integridade de Segurança (SIL)

para o Sistema Metro-ferroviário, o Software na área de Sinalizaçãopara tal Sistema deverá possuir o

mesmo valor.

5.2.2 Os requisitos de nível de integridade de segurança de

software (SWSIL) deverão ser decididos com base no nível

de risco associado com a utilização do software no

sistema e no nível de integridade de segurança de

software.[CENELEC 50128]

Page 31: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

CENELEC 50128

43

2

10

432

1

0

SWSILSIL

Freqüência deAmeaça

ConseqüênciaAmeaça

EquipamentosSujeitos

aControle

Nível Risco:AusênciaProteção

ExigeRedução

Riscos

43

2

10

432

1

0

SWSIL

Freqüência deAmeaça

ConseqüênciaAmeaça

EquipamentosSujeitos

aControle

Nível Risco:AusênciaProteção

ExigeRedução

Riscos

Page 32: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

CENELEC 50128 - Ciclo de Vida I

Page 33: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

CENELEC 50128 - Ciclo de Vida II

Page 34: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

CENELEC 50128 - Ciclo de Vida III

Page 35: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

Requisito Técnico de Software - Segurança

Os conceitos de “Fail Safe” devem ser utilizados no Software relacionado às funções de Segurança Crítica ou Vitais.

Deve atender ao “Software Safety Integrity Level” (SIL) quatro (4), conforme a norma IEC 61508 “Functional Safety of Electrical/Electronic/Programmable Electronic Safety-Related Systems”.

Devem ser atendidas as recomendações da norma CENELEC 50128 “Railway applications – Communications, Signaling and Processing Systems – Software for Railway Control and Protection Systems”.

[EPS 2004]

Page 36: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

Emprego de Software em Sinalização - Horizonte

Considerações:

● Uso Intensivo de SW em Tempo Real e Segurança Crítica;

● Fatores de aumento natural do risco;

● Transmissão por meio aberto de Sinais Vitais;

● Determinação de distância por múltiplos sensores;

● Emprego limitado de Hardware fail-safe;

Os conceitos consagrados de Segurança de um Sistema de Sinalização e Controle devem ser implementados de forma completa e claramente verificáveis. [IEEE 1474-1]

Page 37: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

O Software com Qualidade:

● Maior Garantia do Nível de Segurança● Redução do Retrabalho● Otimização de Recursos● Controle sobre o Processo● Controle sobre Tecnologias em Implantação● Integra Experiência e Capacidade de Inovação● Incorporação de Iniciativas dos maiores

Consumidores de Software mundiais e daProdução Científico-acadêmica na área.

Page 38: IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM · PDF fileimportantes desvantagens destas abordagens são ... Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos

202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;204 3 }205 2 206 2 FtxBAC[UFtxBAC].m[0] = n;207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */210 2 if (UFtxBAC >= (MAXFTXBAC-1))211 2 UFtxBAC = 0;212 2 else213 2 UFtxBAC ++;214 2 QFtxBAC ++;215 2 216 2 return(TRUE);217 2 }218 1 return(FALSE);219 1 }248 BYTE ObtemMsgBAC (BYTE *msg)249 {250 1 BYTE i;251 1 252 1 /* Existe mensagens na Fila de Recepcao. */253 1 if (QFrxBAC > 0)254 1 {255 2 /* Sim. Copia a mensagem para o ponteiro. */256 2 i = 0;257 2 while (i < FrxBAC[PFrxBAC].m[0])258 2 {259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];260 3 i++;261 3 }262 2 263 2 /* [02] */264 2 /* Atualiza indices da fila de recepcao. */265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1))267 2 PFrxBAC = 0;268 2 else269 2 PFrxBAC ++;270 2 QFrxBAC --;271 2 enable(); 272 2 273 2 return(i);274 2 }275 1 276 1 return(0);277 1 }302 void EnviaAckBAC (void)303 {304 1 TxMsgAckBAC();305 1 FlagTxBAC = 2;306 1 TimerTimeoutBAC = TimerRelogio3;307 1 return;308 1 }333 void EnviaNackBAC (void)

89 void IniciaBAC (void)90 {91 1 Diagnostico[0x07] ++;92 1 UFtxBAC = 0;93 1 PFtxBAC = 0;94 1 AFtxBAC = 0;95 1 QFtxBAC = 0;96 1 UFrxBAC = 0;97 1 PFrxBAC = 0;98 1 QFrxBAC = 0;99 1 FlagTxBAC = 0;100 1 FlagEstadoBAC = 0;101 1 FlagCpcBAC = 0;102 1 FalhasBAC = 0;103 1 NrtxBAC = MAXRETXBAC;104 1 SemaforoTxBAC = 0x0F;105 1 TimerTimeoutBAC = TimerRelogio3;106 1 TimerJanelaBAC = TimerRelogio2;107 1 ProgramaRS232C();108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));109 1 110 1 #if MESTREBAC == 1

#endif113 1 return;114 1 }141 void TestaFilaBAC (void)142 {143 1 Diagnostico[0x44]++;144 1 145 1 disable();146 1 if ((PFrxBAC >= MAXFRXBAC) ||147 1 (UFrxBAC >= MAXFRXBAC) ||148 1 (QFrxBAC > MAXFRXBAC) ||149 1 (PFtxBAC >= MAXFTXBAC) ||150 1 (UFtxBAC >= MAXFTXBAC) ||151 1 (QFtxBAC > MAXFTXBAC))152 1 {153 2 /* Erro. */154 2 FalhaFatal = 0x09;155 2 ErroFatal();156 2 halt();157 2 }158 1 enable();159 1 return;160 1 }190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)191 {192 1 BYTE i;193 1 194 1 /* [01] */195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&196 1 (n < MAXBFTXBAC))197 1 {198 2 /* Copia a mensagem para a fila. */199 2 i = 0;200 2 while (i < n)201 2 {

+ + +

“Nada disso é tudo,Tudo isso é fundamental.”

[H Gessiger, Engenheiros do Hawaii]

Christian Becker Bueno de Abreu

[email protected]