Você está na página 1de 76

AULA 1

ENGENHARIA DE SOFTWARE

Prof. Emerson Antonio Klisiewicz


CONVERSA INICIAL

Nessa aula 1, estudaremos sobre os modelos clássicos de


desenvolvimento de sistemas e a introdução à Engenharia de Software.

CONTEXTUALIZANDO

O que são softwares?

“Software”, segundo o Dicionário Michaelis, consiste em “qualquer


programa ou grupo de programas que instrui o hardware sobre a maneira como
ele deve executar uma tarefa, inclusive sistemas operacionais, processadores de
texto e programas de aplicação.” (Software, 2017).

O que são Sistemas?

Observe as frases:

 O sistema telefônico no Brasil foi implantado em 1877.


 O sistema de coleta de lixo funciona bem.
 O sistema de avaliação é rigoroso para os professores.
 O sistema circulatório de Tadeu está comprometido.
 O sistema de vendas em seu relatório mostrou uma desaceleração no
mercado.

Considerando as afirmações acima, podemos definir que os sistemas têm


sempre o seu objetivo, logo, o objetivo declarado de um sistema é, a priori, a razão
de sua existência.
Hoje, qualquer país, seja desenvolvido ou não, depende de softwares.
Precisamos, portanto, desenvolver sistemas confiáveis, com um desenvolvimento
que se dê de forma econômica e em um curto espaço de tempo.
Aí fica uma pergunta: “Existe uma diferença entre ser um artista e um
engenheiro”?

TEMA 1 – SOFTWARES

 Instruções: quando executadas, produzem a função e o desempenho


desejados.

02
 Estruturas de dados: possibilitam que os programas manipulem
adequadamente a informação.
 Documentos: descrevem a operação e o uso dos programas.

1.1 Características do Software

a. Desenvolvido ou projetado por engenharia, não manufaturado no sentido


clássico.
b. Não se desgasta, mas se deteriora.
c. A maioria é feita sob medida.

1.2 Aplicações do software

a. Básico: programas escritos para dar apoio a outros programas.


b. De tempo real: software que monitora, analisa e controla eventos do
mundo real.
c. Comercial: sistemas de operações comerciais e tomadas de decisões
administrativas.
d. Científico: caracterizado por algoritmos de processamento de números.

1.3 Evolução do software

(1950 – 1965)
 O hardware sofreu contínuas mudanças.
 O software arte "secundária" para poucos métodos.
 O hardware era de propósito geral.
 O software específico para cada aplicação.
 Sem documentação.

(1965 – 1975)
 Multiprogramação e sistemas multiusuários.
 Sistemas tempo real.
 Primeira geração de SGBD’s.
 Bibliotecas de Software.
 Cresce o número de sistemas baseado em computador.
 Manutenção quase impossível.

03
TEMA 2 – CRISE DE SOFTWARE

Conjunto de problemas encontrados no desenvolvimento de software.

1. As estimativas de prazo e de custo frequentemente são imprecisas.


2. A produtividade das pessoas da área de software não acompanha a
demanda por seus serviços.
3. A qualidade de software, às vezes, não é adequada.
4. O software existente é muito difícil de manter.

Diante desse cenário, as seguintes situações acabaram acontecendo:

 estimativas de prazo e de custo ;


 produtividade das pessoas ;
 qualidade de software ;
 software difícil de manter .

2.1 Problemas associados à Crise de Software

2.1.1 Próprio caráter do software

Podemos dizer que Software é a parte lógica do computador. Por


consequência, determinaremos o seu sucesso pela medição da qualidade de
apenas uma entidade. O software não sofrerá, como algo físico, um desgaste com
o passar do tempo, mas, certamente, será corroído pelo tempo, necessitando de
alterações (manutenções).

2.1.2 Falhas das pessoas responsáveis pelo desenvolvimento do software

Gerentes sem conhecimento ou nulas experiências em softwares.


Profissionais da área que não recebem novos treinamentos ou especializações
técnicas de desenvolvimento. Também podemos encontrar, dentro das empresas,
grande resistência na implementação de mudanças.

2.1.3 Mitos do software

Propagaram desinformação e confusão.

04
 Lenda: Em nossa empresa, possuímos um manual com todos os padrões
para desenvolvimento de um software. Minha equipe terá tudo o que é
necessário em termos de conhecimento?
 Verdade: Esse material é usado pela equipe? Todos os profissionais têm
conhecimento da sua existência? Nele já estão contidas as formas
modernas de desenvolvimento? O material está completo?
 Lenda: Minha equipe usa ferramentas de última geração para o
desenvolvimento dos sistemas. Recentemente, também adquirimos novas
máquinas para o desenvolvimento.
 Verdade: É necessário possuir mais que apenas novos computadores para
produzir software com qualidade. Todo o conhecimento, aqui também, deve
estar incluso.
 Lenda: Como nosso projeto de desenvolvimento de software está atrasado,
incluiremos novos profissionais na equipe e, com isso, tiraremos o atraso.
 Verdade: Desenvolver um software é diferente de produzir um produto em
um processo industrial. Incluir mais pessoas em um projeto pode torná-lo
mais atrasado ainda. Há que se ter um critério bem definido e planejado
para a inclusão de novos profissionais em uma equipe de projeto.
 Lenda: Ter uma visão superficial dos objetivos para o desenvolvimento de
determinado software é o suficiente para começar a desenvolver os
programas. O detalhamento pode ser feito posteriormente.
 Verdade: Uma pobre definição inicial dos requisitos é a grande vilã e,
talvez, a maior causa de fracassos dos projetos de desenvolvimento de
software. Ter uma descrição formal e detalhada de toda a informação,
funcionalidade, desempenho, interfaces internas e externas, restrições e
validações dos sistemas desenvolvidos são vitais para o sucesso do
projeto.
 Lenda: O nosso usuário, constantemente, sugere mudanças em nosso
projeto. Sem problemas, pois qualquer mudança pode ser facilmente
implementada, porque o nosso projeto é totalmente flexível.
 Verdade: Pequenas alterações, solicitadas quando o projeto já está em
desenvolvimento avançado, podem causar problemas muito maiores do
que uma grande alteração solicitada durante as fases iniciais do
desenvolvimento. Tal feito pode ocasionar consideráveis prejuízos à
qualidade final do produto e do projeto.

05
 Lenda: A partir do momento em que o programa/sistema entrar em
funcionamento, o trabalho de nossa equipe de desenvolvimento estará
encerrado.
 Verdade: É errado pensar dessa forma. Pelas estatísticas das empresas
de desenvolvimento de software, serão usados, após a entrega do
programa aos usuários, de 50% a 70% do tempo e esforço gastos com o
seu desenvolvimento.
 Lenda: Sem ter em mãos o sistema já funcionando, não é possível avaliar
a sua qualidade.
 Verdade: Hoje em dia, ter o programa funcionando é apenas uma parte da
configuração de Software. Além do mais, com novas formas de
desenvolvimento, com as metodologias ágeis, temos sempre a entrega de
artefatos agregando funcionalidades aos programas em que a qualidade é
vital.

TEMA 3 – ENGENHARIA DE SOFTWARE

3.1 Métodos

 Proporcionam os detalhes de como fazer para construir o software.


 Mostram o planejamento e a estimativa de projeto.
 Desenvolvem a análise de requisitos de software e de sistemas.
 Modelam o projeto da estrutura de dados.
 Dizem como codificar algoritmo de processamento.
 Trazem a forma da codificação.
 Informam como deve ser a fase de teste.
 Trará as normas a serem seguidas na manutenção.

3.2 Ferramentas

Suportam de forma automatizada os métodos de desenvolvimento.


Atualmente, existem ferramentas específicas para cada método. Quando
integradas, é possível estabelecer um sistema de suporte ao processo de
desenvolvimento de software, o que chamamos de CASE - Computer Aided
Software Engineering.

3.3 Procedimentos
06
Constituem o elo entre os métodos e as ferramentas. São as sequências
em que os métodos serão aplicados. Informam quais produtos devem ser
entregues. Definem os controles que ajudam assegurar a qualidade e a coordenar
as alterações. Trazem as referências que ajudam a administrar o progresso do
software.
O conjunto das etapas que envolvem métodos, ferramentas e
procedimentos é conhecido como componente de Ciclos de Vida de software.
Para a escolha de um Ciclo de Vida de software, devemos levar em conta
a natureza do projeto e da aplicação, os métodos e as ferramentas a serem
usados e saber quais controles e produtos precisam ser entregues.

TEMA 4 – CICLO DE VIDA CLÁSSICO (CASCATA)

Figura 1 – Ciclo de vida em cascata

4.1 Análise e engenharia de sistemas

Nessa fase, é preciso realizar a coleta dos requisitos ao nível de sistema,


já desenvolvendo uma pequena quantidade do projeto e da análise para a criação
do software/sistema em questão.
Essa fase é de suma importância, principalmente quando o software fizer
interface com hardware, pessoas ou banco de dados.

4.2 Análise de requisitos de software

O processo de levantamento dos requisitos, nessa fase, é reforçado e


concentrado especificamente no que será desenvolvido.

07
Deve-se compreender o funcionamento do software e todo o domínio da
informação, como também saber quais interfaces serão exigidas pelo sistema.
Esses requisitos devem ser documentados, revistos e validados junto aos
usuários/clientes.

4.3 Projeto

É nessa fase que fazemos a transformação dos requisitos do software para


representações avaliadas antes que a codificação propriamente dita comece.
Concentra-se em 4 atributos do programa:

a. Estrutura de dados.
b. Arquitetura de software.
c. Detalhes procedimentais.
d. Caracterização de interfaces.

4.4 Codificação

Trata-se da passagem de todas as representações do projeto de


desenvolvimento para uma linguagem de programação definida pela equipe de
projeto, resultando nas instruções/comandos executáveis pelo computador.

4.5 Testes

Concentram-se, principalmente:

 Nas características lógicas do software, garantindo que todas as


instruções/comandos tenham sido testadas ao menos uma vez.
 Nos quesitos funcionais, os testes visam descobrir erros e garantir que as
entradas definidas em projeto produzam resultados considerados corretos
pelos requisitos dos usuários.

4.6 Manutenção

É certo que o software sofrerá mudanças depois de entregue/implantado


no cliente/usuário.
As prováveis situações que podem provocar mudanças são: erros,
adaptação no software para aceitar determinadas mudanças, alterações de

08
ambiente, solicitações dos usuários para que sejam incluídas alterações
funcionais e de melhora do desempenho.
Podemos citar várias situações-problema na utilização desse modelo,
como:

 Projetos reais raramente seguem o fluxo sequencial que o modelo propõe.


 Logo no início, é difícil estabelecer explicitamente todos os requisitos, pois,
no começo dos projetos sempre existe uma incerteza natural.
 O cliente deve ter paciência.
 Uma versão executável do software só fica disponível numa etapa
avançada do desenvolvimento.

TEMA 5 – CICLO DE VIDA EM ESPIRAL

Figura 2 – Prototipação

Esse processo clássico de desenvolvimento une suas melhores


características com o processo de Prototipação, incluindo um novo item
importantíssimo: a Análise de Risco. Ele segue os passos sistemáticos do Ciclo
de Vida Clássico, incluindo-os em uma organização iterativa que refletirá, de
forma mais próxima, o mundo real. O processo de Prototipação pode ser usado
em qualquer etapa do desenvolvimento, como forma de reduzir os riscos do
desenvolvimento.

5.1 Etapas do Ciclo de Vida em Espiral

 Planejamento: determinará os objetivos, as alternativas e as restrições


quanto ao desenvolvimento do software.
09
 Análise de risco: realizará uma análise de alternativas e identificação /
resolução dos possíveis riscos. Normalmente, há 3 alternativas.
 Construção: codificação dos requisitos, passando-os para a linguagem
computacional propriamente dita.
 Avaliação do cliente: homologação do que foi entregue/implantado pelos
usuários/clientes, para que se efetue o planejamento dos novos passos.

Esta é, atualmente, a abordagem mais realística para o desenvolvimento


de software em grande escala. Capacita o desenvolvedor e o cliente a entenderem
e reagirem aos riscos em cada etapa evolutiva. Pode ser difícil convencer os
clientes que uma abordagem "evolutiva" é controlável. Também exige
considerável experiência na determinação de riscos e depende dessa experiência
para ter sucesso.

FINALIZANDO

O surgimento de sistemas complexos de software resultou na necessidade


de reavaliar a forma de desenvolver sistemas. A técnica tem evoluído de forma
impressionante, notavelmente, no que tange ao seu desenvolvimento. A
engenharia de software apareceu como o processo ideal para solucionar
problemas definidos pela crise de software. Independentemente de ser uma crise
ou um problema crônico, o fato é que as dificuldades persistem, “sendo o
desenvolvimento de software tarefa árdua que leva muitos desenvolvedores a
derrota”. (Pressman; Maxim, 2002). Essas situações aumentam o interesse de
toda a comunidade de desenvolvedores em buscar metodologias que possam
ajudar, eliminar e minimizar as dificuldades enfrentadas no desenvolvimento dos
projetos.
Deste modo, formalidade, documentação, cumprimento das fases
estabelecidas e produtos definidos, que fazem parte da abordagem tradicional, e
em qualquer projeto de desenvolvimento de aplicações, sempre buscarão a
qualidade final do produto e, consequentemente, a satisfação do cliente.

010
REFERÊNCIAS

PAULA FILHO, W. de P. Engenharia de software: fundamentos, métodos e


padrões. 3 ed. São Paulo: LTC, 2009.

PRESSMAN, R.; MAXIM, B. Engenharia de software: uma abordagem


profissional. Trad. João Eduardo Nóbrega Tortello. 8. ed. Porto Alegre, RS:
AMGH, 2016.

SOFTWARE. Michaelis. Dicionário Brasileiro da Língua Portuguesa. Disponível


em: <http://michaelis.uol.com.br/busca?id=EZ5mx>. Acesso em: 13 set. 2017.

011
AULA 2

ENGENHARIA DE SOFTWARE

Prof. Emerson Antonio Klisiewicz


CONVERSA INICIAL

Nessa segunda aula estudaremos sobre os modelos clássicos de cálculo


de esforço para o desenvolvimento de sistemas que fazem parte do processo de
Engenharia de Software.

CONTEXTUALIZANDO

As métricas para se fornecer os esforços para a


construção/desenvolvimento de um projeto de software mais utilizadas pela
indústria são as seguintes: Pontos de Função (PF), Linhas de Código (LOC – Line
of Code) e Pontos por Casos de Uso (UCP). Vamos a elas.

TEMA 1 – MÉTODO GUSTAV KARNER?

Criado por Gustav Karner, o método serve para informar o esforço que será
gasto em projetos de software orientados a objetos. Ele baseia-se em casos de
uso, o que permite ser possível, já no início dos projetos, verificar qual será o
esforço desprendido para o desenvolvimento. Isso ocorre já na fase do
levantamento de requisitos. Para utilizar esse método, necessitamos seguir 4
passos no nosso desenvolvimento:
Os 4 passos do Método de Gustav Karner.

1. Avaliar o Ator.
2. Avaliar o Fluxo (Path).
3. Fazer o ajuste do UCP pelos fatores técnicos (TF) e pela Equipe EV.
4. Calcular o Esforço.

TEMA 2 – USE CASE POINT – CALCULANDO O ESFORÇO

2.1 Os 4 passos do método de Gustav Karner

2.1.1 Avaliar o ator: pessoa, sistema ou tempo

 Pessoa é o ator complexo e vale 3 pontos.


 Sistema é ator médio e vale 2 pontos.
 Tempo é ator simples e vale 1 ponto.

02
2.1.2 Avaliar o fluxo (path)

Conta-se cada fluxo principal e cada fluxo alternativo. Fluxos de exceção


não são contados:
 De 1 a 3 fluxos – fluxo SIMPLES - 5 pontos.
 De 4 a 7 fluxos – fluxo MÉDIO - 10 pontos.
 De 8 ou acima – fluxo COMPLEXO - 15 pontos.
 UUCP = soma de pontos dos atores + soma de pontos dos fluxos

2.1.3 Ajuste do UCP

Fazer o ajuste do UCP pelos fatores técnicos (TF) e da Equipe EV, sendo
UCP = UUCP * TF * EF.

2.1.3.1 Fatores técnicos

Nesse momento, o analista deve responder a 13 perguntas relacionadas a


questões técnicas do projeto ou do sistema que está sendo desenvolvido. Para
todas as perguntas, o analista atribuirá um valor de 0 a 5 ao nível de influência
que tal questão tem dentro do contexto de desenvolvimento. Em cada pergunta,
existe um peso atribuído que será multiplicado pelo valor de influência atribuída
pelo analista a tal quesito. Ao final, o analista deve somar os resultados de todas
as respostas às perguntas e colocar o valor na seguinte fórmula: TCF = (0,6 +
(0,01 * SOMA DAS RESPOSTAS AS PERGUNTAS)). O resultado dessa conta
será o valor do fator técnico em nosso processo.
As 13 perguntas podem ter variações de empresa para empresa, mas,
normalmente, seguem o modelo abaixo descrito:

Quadro 1 – Perguntas técnicas sobre o projeto

03
2.1.3.2 Fatores ambientais

Para este fator, o analista deve responder a 8 perguntas relacionadas a


questões ambientais do projeto ou do sistema que está sendo desenvolvido. Esse
fator leva em conta questões relacionadas à equipe que trabalhará no
desenvolvimento. Seguindo a mesma ideia dos fatores técnicos, para todas as
perguntas o analista deve atribuir um valor de 0 a 5 ao nível de influência que tal
questão tem dentro do contexto de desenvolvimento. Em cada pergunta, existe
um peso fixo atribuído, o qual deve ser multiplicado pelo valor de influência
atribuída a aquele quesito. Ao final, o analista precisa somar os resultados de
todas as respostas às perguntas e colocar o valor na seguinte fórmula: EF = (1,4
+ (-0,03 * SOMA DAS RESPOSTAS AS PERGUNTAS)).
As 8 perguntas podem ter variações de empresa para empresa, mas,
normalmente, seguem o modelo abaixo descrito:

Quadro 2 – Modelo de perguntas

04
Motivação
São os programadores motivados para trabalhar no projeto?
05 Instabilidade no projeto vai sempre levar para as pessoas que 1 none 0 0
saem no meio do caminho através do seu código-fonte. E a mão
sobre torna-se realmente difícil.
Requisitos estáveis
É ao usuário clara sobre o que ele quer? Tenho visto as
06 expectativas dos clientes são o fator mais importante na 2 none 0 0
estabilidade dos requisitos. Se o cliente é de uma natureza
altamente mudar, colocar esse valor máximo.
Part-time trabalhadores
07 Há pessoal em tempo parcial no projeto, como consultores, etc? -1 none 0 0

Difícil linguagem de programação


08 Qual é a complexidade da linguagem, Assembly, VB 6.0, C + + -1 none 0 0
e C ou Framework?
Efactor 0
EF - Enviroment Factor = ( 1,4 + ( -0,03 * Efactor) ) 1,4

É importante salientar que, no TF, quanto maior o valor encontrado, maior


será o esforço gasto no desenvolvimento do sistema. No EF é o contrário. Quanto
maior o valor encontrado, menor será o esforço para o desenvolvimento.
Com os fatores calculados, obtém-se o valor dos Use Case Ajustados: UCP
= UUCP * TF * EF.

2.1.4 Calcular o esforço


Com o UCP calculado, faremos a multiplicação dos pontos UCP pelo fator
de produtividade (homem.hora por UCP). A produtividade média recomendada é
entre 15 e 30 homem.hora por UCP, sendo 20 a média internacional.
Esforço (homem.hora) = UCP * produtividade
Abaixo há um exemplo do esforço calculado levando-se em consideração
o esquema de fluxos mostrados. Note que os fatores de TC e EF têm os
respectivos valores: 0,98 e 1,01.

Quadro 3 – Cálculo de esforço

05
TEMA 3 – ANÁLISE POR PONTOS DE FUNÇÃO

3.1 NESMA – A associação

Para se associar à NESMA (Netherlands Software Metrics Association), a


composição de custos varia em 250 € por ano. Sem fins lucrativos, ao associar-
se você terá os benefícios de acesso ilimitado ao site, obter uma cópia gratuita de
cada novo produto da NESMA, poder participar nas comissões e conferências que
essa associação oferece, ter descontos em atividades (conferências, simpósios,
workshops etc.) e produtos (estudos, relatórios e manuais) que ela disponibiliza.
Muitas grandes empresas são sócias da NESMA, como ABN-AMRO Bank NV,
IBM Nederland e BV.

3.2 Para que serve a APF?

A Análise por Pontos de Função (FPA) é um técnica de medição do


tamanho de softwares que tenta relacionar a complexidade inerente ao
processamento com as funcionalidades solicitadas/oferecidas ao usuário por meio
do software.

3.3 Quais os objetivos da APF?

Os pontos de função têm alguns objetivos. Dentre eles, podemos destacar:

a. Medir a funcionalidade que o usuário solicita e recebe.


b. Medir o desenvolvimento e a manutenção de software de forma
independente da tecnologia utilizada na implementação.
c. Ser simples o suficiente para minimizar o trabalho adicional envolvido no
processo de medição e informação da condução do desenvolvimento.
d. Ser uma medida consistente entre vários projetos e organizações.

3.4 Como usar a APF nas Organizações?

A análise por ponto de função também pode ser usada para verificar o
tamanho de softwares adquiridos ou já existentes em uma empresa. Também
pode ser utilizada para dar apoio à análise no desenvolvimento de softwares,
visando mais qualidade no produto final (software). E, ainda, pode ser utilizada
como uma ferramenta de apoio à manutenção de software, bem como no controle

06
de custos do desenvolvimento, ajudando nas negociações de contratos nas áreas
de TI junto aos usuários.

3.5 Etapas da APF

O cálculo da análise de pontos de função terá os seguintes passos para a


sua obtenção:

a. Identificação do tipo de contagem a ser utilizado.


b. Definição da fronteira da aplicação.
c. Contagem de pontos de função não ajustados.
d. Cálculo do fator de ajuste.
e. Contagem de pontos de função ajustados.

3.5.1 Identificação do tipo de contagem a ser utilizado

Consiste na identificação do objeto a ser medido, como sendo um projeto


de desenvolvimento, manutenção ou produção. Ou seja, faremos a pergunta: “O
que medirei?”

3.5.2 Definição da fronteira da aplicação

Esta é a etapa em que se estabelece o escopo do sistema objeto da


avaliação, sob a visão do usuário. Nesse momento, fazemos a pergunta: “Até
onde medirei?” Essa situação é de extrema importância para definirmos qual será
o escopo do desenvolvimento, e de onde e para onde irão as informações do
sistema/manutenção/desenvolvimento. Tudo isso é preciso prever.

3.5.3 Contagem de pontos de função não ajustados

Para essa etapa, iniciaremos o processo de cálculo propriamente dito,


levando em consideração os seguintes itens:

 Arquivo Lógico Interno (ALI).


 Arquivo de Interface Externa (AIE).
 Entradas Externas (EE).
 Saídas Externas (SE).
 Consultas Externas (CE).

Esses itens podem ter a sua dimensão analisada pela figura abaixo:

07
Figura 1 – Contagem de pontos de função não ajustados

Iniciaremos o nosso processo de cálculo fazendo a atribuição da


complexidade de cada item. Vamos a eles.

3.5.3.1 Atribuindo complexidade a um ALI/AIE

Antes da atribuição, vamos entender o que é um ALI e um AIE.


Arquivo Lógico Interno (ALI) são dados (arquivos, tabelas ou entrada de
dados realizadas no sistema) logicamente relacionados que serão utilizados ou
sofrerão algum tipo de manutenção e que estão dentro das fronteiras do software.
Podem ser identificados pelos critérios (dados armazenados dentro da fronteira
da aplicação que sofrem manutenção por meio de um processo padrão da
aplicação e são identificados pelo usuário como sendo um requerimento da
aplicação).
Exemplo: dados da aplicação, arquivos mestres, como cadastro de clientes
ou cadastro de funcionários, arquivos de dados de segurança da aplicação,
arquivos de dados de auditoria, arquivos de mensagens de auxílio, arquivos de
mensagens de erro.
Os Arquivos de Interface Externa (AIE) representam as informações
necessárias externas à aplicação. Contribuem para o cálculo dos Pontos por
Função com base na quantidade e complexidade funcional relativa de cada um
deles. Podemos identificá-los usando critérios, como verificar se são dados
armazenados fora da fronteira da aplicação, se não sofrem manutenção por meio
de um processo padrão da aplicação e se são também identificados pelos
usuários como sendo requerimentos do software. Exemplo: informações de
referência (dados externos utilizados pela aplicação, mas que não têm sua

08
manutenção realizada pela aplicação), arquivos de mensagens de auxilio e
arquivos de mensagens de erro.
Com essas definições, vamos iniciar o processo de atribuição da
complexidade.

3.5.3.1.1 Identificar os TERs e TEDs

a. TER – Tipo de elemento de registro. É a quantidade de tipos de registros,


no caso de um arquivo, ou de tabelas, no caso da utilização de um banco
de dados. Podemos dizer que é um subgrupo de dados dentro de um
ALI/AIE reconhecível pelo usuário.
b. TED – Tipo de elemento de dado. É a quantidade de campos de um arquivo
ou de uma tabela utilizados na aplicação. Podemos dizer que, nesse caso,
é um campo único, não repetitivo e reconhecível pelo usuário.
c. Feita essa análise, atribuímos a complexidade dos ALI e AIE usando a
tabela abaixo:

Tabela 1 – Complexidade dos ALI e AIE

Seguindo a mesma lógica, faremos agora a identificação dos quesitos SE,


CE e EE, mas antes apontaremos suas definições:
a. ENTRADAS EXTERNAS (EE): São as atividades realizadas pelos usuários
por meio de um processo dentro do sistema, como inserção, modificação
ou exclusão de dados nos arquivos lógicos internos (ALI).
b. SAÍDAS EXTERNAS: São as atividades realizadas pelo sistema/programa,
que resultam na extração de dados da aplicação, dados que estão
presentes nos ALI´s.
c. CONSULTAS EXTERNAS: São as atividades que, por meio de uma
requisição de dados (entrada), geram exibições imediatas dos dados
(saída) contidas nos ALI´s.

Com essas definições, apresentaremos a mesma definição dos processos


do ALI e AIE.
09
a. TAR – Tipos de arquivos/tabelas referenciados na aplicação. É a
quantidade de ALI/AIE mantida ou referenciada (utilizada) pelas transações
do sistema.
b. TED – São os elementos de dados; campos reconhecíveis pelo usuário,
que podem também cruzar a fronteira da aplicação durante as transações
realizadas pela aplicação.

Seguindo as definições acima, apresentamos as complexidades usando as


tabelas abaixo:

Tabela 2 – Complexidade EE

Tabela 3 – Complexidade SE e CE

Com a definição da complexidade dos itens (Baixa, Média e Alta), a tabela


de pontuação para os itens seguirá a relação abaixo:

Tabela 4 – Nível de complexidade

Dessa forma, fechamos o cálculo de pontos não ajustados. Agora veremos


a questão do ajuste a ser realizado (Opcional) aos pontos calculados até aqui.

010
TEMA 4 – ANÁLISE DE PONTOS DE FUNÇÃO – CÁLCULO DO FATOR DE
AJUSTE

O valor do FATOR DE AJUSTE, similar ao UCP, é calculado com base


em 14 características que envolvem o desenvolvimento do software e
permitem uma avaliação geral da funcionalidade da aplicação. Estas
características são:

1. Comunicação de Dados;
2. Processamento Distribuído;
3. Performance;
4. Utilização do Equipamento;
5. Volume de Transações;
6. Eficiência do Usuário Final;
7. Entrada de dados “on-line”;
8. Atualização “on-line”;
9. Processamento Complexo;
10. Reutilização de Código;
11. Facilidade de Implantação;
12. Facilidade Operacional;
13. Múltiplos Locais;
14. Facilidade de Mudanças.

É atribuída uma nota de 0 a 5 a cada uma das Características Gerais


do Sistema, correspondendo aos seguintes critérios: nenhuma influência,
influência incidental, moderada, média, significante, essencial. Após isso,
usamos a seguinte fórmula do fator de ajuste:

Em que Nt(total) é a soma dos níveis de influência atribuída às


perguntas.
Com isso, calculamos o valor final, que é TPF = PFB * VAF, em que
PFB é o total de pontos de função bruto calculado.
011
Exemplo de um cálculo sem fazer o ajuste:

Tabela 5 – Transações (campos e arquivos referenciados)

Tabela 6 – Contagem: entradas externas

Tabela 7 – Contagem: saídas externas

012
Tabela 8 – Contagem: consultas externas

Tabela 9 – Contagem: Arquivos Lógicos Internos

Tabela 10 – Contagem: Arquivos de Interface Externa

Tabela 11 – Contagem final de PF (não ajustados)

013
TEMA 5 – ANÁLISE POR PONTOS DE FUNÇÃO SIMPLIFICANDO COM O
NESMA

Há formas simplificadas de realizar o cálculo do APF por meio de


métodos simplificados criados pelo NESMA. Nessa versão, existem 3 tipos
de contagem: Indicativa, Estimativa e Detalhada. Vamos a elas.

5.1 Contagem indicativa

A contagem Indicativa traz o valor da quantidade de pontos de função


sem saber os detalhes do modelo e sem ter um detalhamento do processo.
Ela possibilita, dessa forma, medir um software já no início do processo
de desenvolvimento, mesmo não possuindo todas as informações. Assim,
podemos usá-la na fase inicial do desenvolvimento. A contagem indicativa
realiza-se da seguinte forma: Determina-se a quantidade de ALIs e AIEs. O
tamanho é calculado contando-se 35 PFs para cada ALI identificado e 15 PFs
para cada AIE. Essa estimativa baseia-se somente na quantidade de arquivos
lógicos (ALIs e AIEs), calculando-se o total de pontos de função não ajustados
da seguinte forma: tamanho indicativo (pf) = 35 x número de ALIs + 15 x
número de AIEs.
Exemplo:

Tabela 12 – Contagem indicativa

ALI – Arquivos Lógicos Internos


AIE – Arquivos de Interface Externas
(pf) = 35 x número de ALIs + 15 x número de AIEs
35 x 2 + 15 x 1 = 70 + 15 = 85 pf

014
5.2 Contagem estimativa

É utilizada na fase inicial da proposta de desenvolvimento, quando não


se possuem dados detalhados do processo, apenas informações preliminares
sobre os processos e o modelo de dados. São necessárias informações um
pouco mais detalhadas sobre a funcionalidade da aplicação, levantadas a
partir das exigências do usuário. Para usar essa contagem, temos os
seguintes passos:

 1º PASSO:
Encontram-se todos os tipos (ALI, AIE, EE, SE, CE). Não é necessário
a identificação dos TAR e TED de cada função.
 2º PASSO:
Todos os ALI e AIE têm sua complexidade avaliada como baixa. Todos
os EE, SE, CE são avaliados como de complexidade.
 3º PASSO:
Calcula-se o total de pontos de função não ajustados, utilizando a
classificação de complexidade. A diferença à contagem usual de
pontos de função é que a complexidade não é determinada
individualmente, mas pré-definida para todos.

Exemplo:
O usuário deseja adicionar, alterar, excluir e consultar dados de
Clientes, necessita de 4 diferentes tipos de relatórios contendo dados
calculados; deseja adicionar, alterar, excluir e consultar dados de Produtos,
necessita de um relatório de produtos; deseja consultar o Fornecedor por
meio de seu número e precisa de um relatório sobre Fornecedor com
totalização de resultados. Veja como ficariam essas requisições:

015
Quadro 3 – Requisições

5.3 Contagem Detalhada

É utilizada na fase em que se possui um grande conhecimento da


proposta de desenvolvimento (dados detalhados do processo). Saber
somente o número de funções de cada tipo (EE, SE, CE, ALI, AIE) não é o
suficiente, também é necessário determinar a complexidade funcional (Baixa,
Média, Alta) de cada função individualmente.
Os requisitos dos usuários precisam ser analisados com mais detalhes:
é preciso identificar quais elementos de dados e arquivos lógicos são usados
por cada função transacional, e quais grupos lógicos e elementos de dados
compõem cada função.

FINALIZANDO

O surgimento de sistemas de software complexos resultou na


necessidade de reavaliar a forma de desenvolver sistemas. A técnica tem
evoluído de forma impressionante, notavelmente no que tange ao seu

016
desenvolvimento. A precisão da estimativa do tamanho de uma aplicação
varia de acordo com o grau de conhecimento adquirido sobre ela, ou, em
outras palavras, da fase em que se encontra o projeto. Segundo a empresa
Software Produtivity Research, “ao final da fase de desenho do sistema é
possível se fazer estimativas com margem de erro de +/- 10%.” Nesta aula,
apresentamos técnicas em que pudemos mensurar os esforços que teremos
no desenvolvimento de nossas apresentações. Tais métodos fazem parte da
Engenharia de Software como ferramentas que auxiliam o analista a tomar
decisões sobre condução e controle do desenvolvimento das aplicações em
TI.

017
REFERÊNCIAS

ANÁLISE de pontos de função inicial. Nesma. Disponível em:


<http://nesma.org/freedocs/analise-de-pontos-de-funcao-inicial/>. Acesso em: 19
set. 2017.

AZEVEDO, D. J. P. de. FPA – Function point analysis – sistemática de métrica.


Bate Byte, 2009. Disponível em:
<http://www.batebyte.pr.gov.br/modules/conteudo/conteudo.php?conteudo=415>.
Acesso em: 19 set. 2017.

018
AULA 3

ENGENHARIA DE SOFTWARE

Prof. Emerson Antonio Klisiewicz


CONVERSA INICIAL

Olá! Nesta aula, vamos estudar sobre as metodologias ágeis e seus tipos,
pois elas também fazem parte do processo de engenharia de software.

TEMA 1 – PROCESSOS ÁGEIS

No fim da década de 90, novos modelos começaram a surgir, assumindo


que, com as ferramentas e práticas adequadas, era simplesmente mais rentável
escrever o código rapidamente, avaliá-lo com o usuário e, em caso de erros,
arrumá-lo rapidamente, que tentar antecipar e documentar todos os requisitos
primeiro. Nesse contexto, surgem os processos ágeis.

1.1 Criação do manifesto ágil

O manifesto ágil foi redigido em uma reunião por um grupo de 17


indivíduos, todos criadores de diversas metodologias: Kent Beck (XP), Mike
Beedle, Arie van Bennekum, Alistair Cockburn (Cristal/Clear), Ward Cunningham
(XP), Martin Fowler, James Grenning, Jim Highsmith (ASD), Andrew Hunt, Ron
Jeffries (XP), Jon Kern, Brian Marick, Robert C. Martin, Steve Mellor, Ken
Schwaber (SCRUM), Jeff Sutherland (SCRUM) e Dave Thomas. Nessa reunião,
foram discutidos temas relacionados à metodologia para o desenvolvimento de
software.

1.2 O manifesto ágil

1.2.1 Valores

Estamos descobrindo maneiras melhores de desenvolver software


fazendo-o e ajudando os outros fazê-lo. Por meio deste trabalho, concluímos os
seguintes valores:
 os indivíduos na equipe e as interações no desenvolvimento são mais
importantes que processos e ferramentas;
 software entregue e funcionando é mais importante que ter uma
documentação completa e totalmente detalhada;
 a colaboração com o cliente naquilo que ele necessita é mais
importante que a realização da negociação de contratos;

2
 a adaptação a mudanças do sistema tem uma maior importância que
seguir um plano inicial.

1.2.2 Princípios

 A maior prioridade sempre é satisfazer o cliente por meio da entrega


antecipada e contínua de software.
 As mudanças nos requisitos não são problemas, mesmo no final do
desenvolvimento. Os processos ágeis asseguram que a mudança gerará
vantagem competitiva para o cliente.
 As entregas do software funcionando devem ser realizadas com maior
frequência, a partir de um par de semanas ou meses, com preferência em
uma escala curta de tempo.
 Equipes de negócios e desenvolvedores trabalhando juntos diariamente
durante o desenvolvimento do projeto.
 A construção de projetos com equipes motivadas. Fornecer o ambiente e
o apoio de que necessitam, além da confiança necessária para fazer o
trabalho.
 O Ágil é um método eficiente e eficaz para transmitir informações para
dentro da equipe de desenvolvimento. Usa-se a conversa face a face.
 Ter o software funcionando é a principal forma de se medir o progresso.
 Os processos ágeis têm um desenvolvimento sustentável.
Patrocinadores, desenvolvedores e usuários devem ser capazes de
manter o ritmo constante e de forma indefinida.
 Sempre deve possuir atenção máxima a excelência técnica e a um bom
design, aumentando, assim, a agilidade.
 Ser simples, ou seja, maximizar a importância do trabalho não feito.
 Possuir equipes auto-organizadas.
 A equipe de desenvolvimento deve parar e refletir de tempos em tempos
sobre como se tornar mais eficaz e sintonizar e ajustar seu
comportamento de acordo com essa reflexão.

3
Leitura obrigatória
Para ampliar seus estudos, leia o capítulo 5, itens 1 a 3 do livro:
PRESSMAN, R.; MAXIM, B. Engenharia de software – uma abordagem
profissional. 8. ed. Porto Alegre: Amgh Editora, 2016.

TEMA 2 – EXTREME PROGRAMMING

Nos anos 1990, o engenheiro Kent Beck, ao procurar formas mais


simples e eficientes para o desenvolvimento de software, identificou o que o
tornava simples e o que dificultava no desenvolvimento de software. Nesse
caminho, iniciou a eXtreme Programmin, uma metodologia ágil muito
utilizada na atualidade.
Essa metodologia foi desenvolvida para ser utilizada em equipes
médias e pequenas (2 a 12 pessoas) e para trabalhar com requisitos vagos
e em constante evolução. Também tem um conjunto de valores e práticas
para nortear o desenvolvimento de software.

2.1 Princípios

2.1.1 Comunicação

 Todos os membros da equipe, sejam clientes, sejam gerentes, sejam


programadores, devem se relacionar pessoalmente uns com os outros,
agilizando a comunicação. Se possível, devem trabalhar em um mesmo
ambiente para se reunirem pessoalmente.

2.1.2 Simplicidade

 O projeto do software é simplificado continuamente e o processo de


desenvolvimento deve ser adaptado, caso essa situação não esteja
ocorrendo.

2.1.3 Feedback

 O cliente deverá estar presente no desenvolvimento do sistema.


 Testes unitários e de homologação devem fornecer o entendimento sobre
o desenvolvimento do software.
4
 Questões de oportunidades ou aquelas relacionadas a problemas do
desenvolvimento devem ser informadas o mais rápido possível.

2.1.4 Coragem

 Os membros da equipe de desenvolvimento devem ter coragem para


indicar situações de problemas encontrados no projeto e para solicitar
ajuda quando necessário.
 Informar ao cliente – o mais rápido possível – que não será possível
implementar um requisito no prazo estimado.

2.2 O processo

Figura 1 – Desenvolvimento de software

Dessa forma, tem-se uma metodologia interessante para usar no


desenvolvimento de software, porém pode haver possíveis barreiras para o
sucesso de um projeto XP, como:
 cultura – pode ser que a organização tenha uma cultura fortemente
tradicional, com ênfase em metodologias clássicas, muita documentação,
modelagem etc.;
 tamanho das equipes – as equipes devem ser pequenas, com no máximo
12 pessoas, mas nem sempre isso é possível;
 espaço físico – o local de trabalho deve servir para aproximar as equipes,
facilitando a comunicação;

5
 cliente: no XP, o cliente deve trabalhar ou estar com equipe de
desenvolvimento.

Leitura obrigatória
Para ampliar seus estudos, leia o capítulo 5, item 4.
PRESSMAN, R.; MAXIM, B. Engenharia de software – uma abordagem
profissional. 8. ed. Porto Alegre: Amgh Editora, 2016.

TEMA 3 – SCRUM

Trata-se de um framework utilizado para organizar times e entregar


resultados de maneira mais produtiva e com alta qualidade. O Scrum foi
fundamentado no empirismo, com o emprego de um desenvolvimento iterativo e
incremental para otimizar a previsibilidade e também controlar os riscos.
É uma alternativa para utilizar métodos ágeis na gerência de projetos,
sendo aplicável a qualquer tipo de projeto. Trabalha de forma simples com
processo, artefatos e regras, que são poucas e fácil entendimento.
É fundamentado em 3 pilares:
1. Transparência – A equipe de desenvolvimento deverá ter uma visão clara
e objetiva de todo o processo. Para isso, o fundamental será a
comunicação;
2. Inspeção – Com frequência, os artefatos (backlog do produto, backlog do
sprint, burndown…) deverão ser verificados, sendo informado assim os
progressos do projeto;
3. Adaptação – Se o responsável pela verificação identificar que algum
processo não está de acordo com o planejado e que o resultado não será
favorável ao produto, deverá relatar e realizar o ajuste o mais rápido
possível, a fim de que não haja mais desvios.
No Scrum, temos 3 papéis de trabalho dentro da equipe:
I. Product owner – É a pessoa responsável por apresentar os interesses
de todos os stakeholders. Definirá os planos iniciais do projeto, os
objetivos e o que será entregue na versão a ser desenvolvida. É
responsável pela lista de requisitos (product backlog) e por verificar se
as atividades com maior valor para o negócio serão desenvolvidas
primeiramente.

6
II. Scrum master – É o responsável pelo sucesso do Scrum, ensinando-o
para a equipe de projeto. Deverá verificar se cada pessoa envolvida no
projeto está seguindo os papéis e as regras do Scrum, a fim de garantir
que aquelas não responsáveis pelo processo interfiram no
desenvolvimento.
III. Time – É a equipe. Serão os responsáveis por escolher as
funcionalidades a serem desenvolvidas em cada interação e
desenvolvê-las. A equipe de se autogerenciar. Todos os membros são
coletivamente responsáveis pelo sucesso de cada entrega do
desenvolvimento.

3.1 O processo

Figura 2 – SCRUM

Fonte: Elaborado com base em Agile Software Development with Scrum (Schraber & Beedle).

Beedle citou que “O Scrum pressupõe o caos...”, mas, na verdade,


capacita as equipes de desenvolvimento a trabalhar em processos que
normalmente não são livres da incerteza.

Leitura obrigatória
Para ampliar seus estudos, leia o capítulo 5, item 2.
PRESSMAN, R.; MAXIM, B. Engenharia de software – uma abordagem
profissional. 8. ed. Porto Alegre: Amgh Editora, 2016.

7
TEMA 4 – ESTIMATIVAS

Nas metodologias ágeis, estimativas de esforço e tempo são calculadas a


partir de estórias (requisitos). Essa atividade é de responsabilidade de toda a
equipe técnica, e isso por alguns motivos, alguns dos quais são citados a seguir.

 Quando se está planejando o desenvolvimento, normalmente não se sabe


exatamente quem vai implementar quais partes dos requisitos.
 Estórias normalmente envolvem diversas pessoas com diferentes
conhecimentos (design de interface de usuário, codificação, teste etc.).
 Para realizar uma estimativa, a equipe precisa de algum tipo de
compreensão de cada estória. Um maior entendimento do contexto
aumenta as chances dos membros da equipe se ajudarem durante a
iteração. Isso também ajuda a aumentar a probabilidade de que questões
importantes sobre a estória/requisito surjam cedo.
 Quando todos da equipe estimam uma estória/requerimento, é frequente
que se encontrem desconexões onde mais de um membro da equipe
tenha estimativa bastante diferente para a mesma estória/requerimento.
É necessário discutir essas situações antes do início da iteração.

Nas metodologias ágeis, as estimativas seguem um questionamento


relacionado a uma grandeza, e não especificamente a um número, como no
exemplo abaixo.

Figura 3 – Tamanhos/estimativas

Os tamanhos/estimativas estão sendo dados por uma grandeza, e não


por um número/valor.
Leitura obrigatória
Para ampliar seus estudos, leia o capítulo 33, item 9.
PRESSMAN, R.; MAXIM, B. Engenharia de software – uma abordagem
profissional. 8. ed. Porto Alegre: Amgh Editora, 2016.
8
TEMA 5 – PLANNING POKER

É uma técnica de estimativa que busca o consenso. Apesar de


usualmente ser utilizada no processo de planejamento ágil, não se trata da única.
No Scrum, o planning poker é realizado durante o sprint planning metting. Nessa
forma de estimativa, cada integrante tem à sua disposição um baralho de 13
cartas, numeradas em uma sequência encontrada nos números de Fibonacci.

Figura 4 – Planning poker

O objetivo de utilizar esses números não lineares é que o intervalo entre os


valores permite visualizar melhor as diferenças de complexidade entre as
funcionalidades sugeridas pelo requisito/estória dessa forma, evitando a
impressão falsa de precisão na estimativa. Exemplo: se para um item foi dada
uma estimativa de 20 pontos, não faz muita diferença se pudesse ser dado um
valor próximo. Portanto, esse valor trata-se de um palpite aproximado.
Valores acima de 20 são considerados altos e, portanto, trata-se de uma
estória/requerimento com um tamanho maior, que pode não ser completamente
finalizada numa única iteração.
O recomendável é que, ao final da estimativa, usando o planning poker, seja
possível fazer com que as estórias/requerimentos da iteração tenham algum
valor no intervalo de 1∕2 a 13.
No baralho do planning poker, podemos encontrar algumas cartas com
propósitos especiais:

 carta com valor 0 (zero), indicando que uma estória está finalizada ou é
muito pequena, podendo ser resolvida rapidamente;

9
 carta com ? (interrogação), indicando que o membro da equipe não tem o
conhecimento apropriado para estimar/opinar sobre o esforço necessário
para a estória/requerimento.

Durante o planning poker, devem ser realizadas rodadas para obter a


estimativa da estória/requerimento com base nesses valores. As diferenças que
surgirem durante essas rodadas deverão ser mediadas por um coordenador. No
Scrum, esse papel é de responsabilidade do scrum master.

5.1 Planning poker – Jogando

As estórias/requerimentos são apresentadas uma por vez. O product


owner as descreve para a equipe Scrum de desenvolvimento e fornece
informações a respeito do seu valor de negócio. A seguir, o coordenador
pergunta aos membros da equipe o esforço necessário para desenvolvê-la.
Cada membro da equipe reflete a respeito do tempo e do esforço
necessários para implementar a estória/requerimento apresentado.

Os membros da equipe estimam considerando todas as tarefas


envolvidas no desenvolver (testar, criar design etc.). Então, o membro da equipe
escolhe uma carta no baralho correspondente ao valor dessa estimativa e
coloca-a virada para baixo. Quando todos fizerem o procedimento acima,
revelam-se as cartas escolhidas simultaneamente.

10
Isso faz com que cada membro da equipe pense por si próprio na hora de
uma decisão da estimativa. Todos avaliam os resultados e verificam se houve
convergência entre as cartas mostradas, ou seja, todas as estimativas têm
valores aproximados para a mesma estória/requerimento.
Se não houver essa convergência, o scrum master solicita aos membros
que mostraram o menor e o maior valor que expliquem o motivo que os levou a
tal decisão. Isso faz com que os integrantes reflitam sobre alguns pontos da
estória/requerimento, o que pode fazer com que mudem os valores propostos
para as estimativas. Então, uma nova rodada é realizada até que as estimativas
cheguem a uma convergência.

A estimativa final será o valor que tiver maior ocorrência ou a média entre
as estimativas informadas. Então, começa uma nova rodada com a leitura da
próxima estória/requerimento pelo product owner. O processo se repete até que
tenha sido concluída a estimativa das estórias dos itens do product backlog.

Leitura obrigatória
Para ampliar seus estudos, leia o capítulo 33, item 9.
PRESSMAN, R.; MAXIM, B. Engenharia de software – uma abordagem
profissional. 8. ed. Porto Alegre: Amgh Editora, 2016.

FINALIZANDO

As metodologias ágeis seguem o parâmetro de sempre ter equipes de


desenvolvimento que se autogerenciem, que tenham controle sobre o que estão
desenvolvendo e tenham uma grande comunicação não só entre os membros
das equipes para também com os clientes que recebem o produto desenvolvido,
pois a ênfase aqui é que o cliente esteja recebendo constantemente entregas do
desenvolvimento que agreguem ao seu negócio, trazendo, assim, sua
satisfação.
11
REFERÊNCIAS

PRESSMAN, R.; MAXIM, B. Engenharia de software – uma abordagem


profissional. 8. ed. Porto Alegre: Amgh Editora, 2016.

12
AULA 4

ENGENHARIA DE SOFTWARE

Prof. Emerson Antonio Klisiewicz


CONVERSA INICIAL

Olá, aluno. Nesta aula, vamos estudar as métricas em projetos de testes


para o desenvolvimento de sistemas que também fazem parte do processo de
engenharia de software. Bons estudos!

CONTEXTUALIZANDO

“O teste consiste em executar o programa com a intenção de encontrar


erros (bugs)”, Myers, 1979. Por que temos que testar os softwares? Será que
alguém se sentiria confortável, tranquilo em ser o passageiro de um avião que
nunca tivesse decolado antes? Itens como qualidade de software, corretitude,
confiabilidade são vitais para um software, e todos eles são construídos a partir
de um excelente programa de testes.

TEMA 1 – TERMINOLOGIAS

1.1 Garantia de qualidade de software

É um conjunto de atividades técnicas que devem ser aplicadas durante todo


o processo de desenvolvimento de um software. O objetivo é garantir que tanto o
processo de desenvolvimento do software quanto o produto que será entregue
tenham os padrões de qualidade especificados.

1.2 Validação

Garantirá que o produto final desenvolvido corresponda plenamente aos


requisitos solicitados pelo usuário.

1.3 Verificação

Visa assegurar a consistência, a completude e a corretude do software


desenvolvido em cada fase do projeto e entre as fases consecutivas do ciclo de
vida do software.

1.4 Teste

Visa garantir o funcionamento do software pelo exame do comportamento


do produto por meio da sua execução.

02
1.5 Defeito

Deficiência mecânica ou algorítmica encontrada no software que, se


ativada, pode levar o produto a ter uma falha.

1.6 Erro

É um item da informação ou estado de execução do produto de software


inconsistente.

1.7 Falha

É a situação encontrada em que o sistema desenvolvido viola suas


especificações.

TEMA 2 – DETALHANDO ITENS DA TERMINOLOGIA

2.1 Defeitos

A principal causa encontrada nas ocorrências de defeitos é a tradução


incorreta das informações. No projeto de desenvolvimento, quanto menor o
tempo para esse defeito for revelado, menor também será o custo de correção
e probabilidade da correção ocorrer de forma correta. A solução é
introduzirmos pontos de verificação, validação e testes ao longo de todo o
ciclo de desenvolvimento.

2.2 Teste

É o processo de execução de um programa com o objetivo de revelar


a presença de erros. Contribui para aumentar a confiança de que o software
desempenha as funções especificadas. Deve-se ter um conjunto de passos
ao qual seja possível alocar técnicas de projeto de casos de teste e
estratégias de teste específicos durante o desenvolvimento.

2.3 Depuração

03
É uma situação não previsível ocorrida no teste. Depois de revelada a
presença do erro, ele deve ser corrigido. O processo de depuração é a parte
mais imprevisível do processo de teste.

2.4 Falha

Incapacidade do software desenvolvido de realizar a função


requisitada.

2.5 Erro

Trata-se do estado de instabilidade. Veja, abaixo, a relação entre as


questões de falhas em sistemas.

O processo de teste deve ser revisto continuamente, a fim de ampliar sua


atuação para possibilitar aos profissionais uma maior visibilidade e organização
dos seus trabalhos, resultando em uma maior agilidade e controle operacional dos
projetos de testes.
Conhecendo-se o funcionamento interno de um produto, testes podem ser
realizados para garantir que “todas as engrenagens”, ou seja, que a operação
interna de um produto tenha um desempenho de acordo com as especificações e
que os componentes internos foram adequadamente postos à prova.

TEMA 3 – TÉCNICA ESTRUTURAL: CAIXA BRANCA

É um método de projeto de testes que usa a estrutura de controle do projeto


procedimental para derivar casos de teste. Baseia-se no exame dos detalhes
procedimentais em que os caminhos do software são testados, porém não é viável
testar todos os caminhos lógicos de um programa.
Na Técnica de Caixa Branca, o engenheiro de software, por meio dos casos
de teste, vai:
 Garantir que todos os caminhos lógicos, independentes do módulo, tenham
sido exercitados pelo menos uma vez;
 Executar todas as decisões lógicas em seus lados verdadeiro e falso;

04
 Executar todos os ciclos nos seus limites e dentro de seus intervalos
operacionais;
 Executar as estruturas de dados internas.
Nessa ideia, temos o Teste do Caminho Básico. Trata-se de uma técnica
que vai permitir a definição de um conjunto-base de caminhos de testes a serem
executados. Ele é baseado no fluxo de controle e no conceito da complexidade
ciclomática.
Antes, porém, vamos ver uma notação para representar o fluxo de controle.

3.1 Grafos

Grafos mostram o fluxo de controle. O Nós vai representar um ou mais


processos; as Arestas, o fluxo de controle do programa ou estrutura do programa.

Figura 1 – Fluxo de controle

A definição de regiões do grafo são áreas limitadas pelas arestas e nós.


Nelas, podemos ter a seguinte notação:

05
Figura 2 – Regiões de grafo

Exemplo:

3.2 Teste do caminho básico


06
Para criarmos um teste do caminho básico, precisamos executar as
seguintes situações:
 Construir um grafo para o módulo do programa em teste;
 Fazer o cálculo do valor da complexidade ciclomática;
 Optar por um conjunto de caminhos básicos;
 Fazer a criação de um caso de teste para cada caminho básico;
 Executar todos os casos de testes.

3.2.1 Complexidade ciclomática

É fundamentada na teoria dos grafos, fornecendo uma métrica de cálculo


para testes muito interessante. Ela nos dá um limite de número de casos de testes
que deveriam ser executados para que se garanta que cada comando/caminho
de execução de um programa tenha sido passado ao menos uma vez. Isso é
realmente útil para quando temos módulos com tendências maiores a erros. Ela
pode ser calculada usando-se a seguinte fórmula:
V(G) = E – N + 2, onde:
 E: número de ramos do grafo;
 N: número de nós do grafo.

Ex.: Usando a figura abaixo, teríamos:

V(G) = 17 arestas – 13 nós + 2 = 6.

Portanto, a complexidade para o exemplo acima seria 6. Esse será o


número de caminhos a serem seguidos pela estrutura do programa, conforme
descrito abaixo:
07
Caminho 1: 1-2-10-11-13
Caminho 2: 1-2-10-12-13
Caminho 3: 1-2-3-10-11-13
Caminho 4: 1-2-3-4-5-8-9-2-...
Caminho 5: 1-2-3-4-5-6-8-9-2-...
Caminho 6: 1-2-3-4-5-6-7-8-9-2-...
Nos caminhos 4, 5 e 6, as reticências indicam que se pode tomar qualquer
caminho no restante da estrutura que não comprometerá o resultado do teste.
Com isso, os testes devem ser realizados para que façam esses caminhos ao
menos 1 vez.

TEMA 4 – TÉCNICA FUNCIONAL: CAIXA-PRETA

Primeiramente, usamos o particionamento de equivalências, técnica que se


adequa aos testes com valores típicos de uma entrada em um programa. Os casos
de teste são elaborados sabendo-se quais serão as entradas, de forma
sistemática e direta. Para acharmos essas equivalências, siga estes passos:
a. Definir as chamadas condições de entrada, qualquer intervalo de entradas
válidas em um programa. Ex.: Faixa de valores 1 < CODIGO<99, vetores
com X número de elementos, etc.;
b. Definir as classes de equivalência, que podem ser válidas ou inválidas. São
definidas pela condição de entrada. Ex: 1< CODIGO < 99 Classe válida : 1
<CODIGO< 99. Classes inválidas: CODIGO <= 1 e CODIGO >= 99;
c. Para cada classe que for inválida, será criado um caso de teste. As classes
declaradas válidas, os casos de teste serão gerados para atender a maior
quantidade possível de entradas válidas.
Exemplo:

08
Nessa técnica, podemos ter alguma dificuldade em quantificar os
testes e acontecer de deixarmos partes essenciais críticas do sistema sem os
devidos testes. Também podemos citar como uma dificuldade nessa técnica
a questão da automatização dos testes.

TEMA 5 – TEST DRIVEN DEVELOPMENT (TDD)

Sobre os testes, temos uma metodologia chamada de ágil, que está


crescendo no mercado em que os testes são vitais para o desenvolvimento. A
Test Driven Development, ou simplesmente TDD, é um desenvolvimento guiado
por testes. O primeiro livro sobre esse assunto foi escrito por Kent Beck. Trata-se
de um método de desenvolvimento fácil de explicar, porém difícil de aprender,
mas de retorno garantido.
Essa forma de desenvolvimento deixa o código mais claro, os testes são
documentações executáveis que garantem funcionalidades do domínio do
problema. Nesse tipo de desenvolvimento, se algum teste parou de rodar,
sabemos que algo deu errado. Isso trará economia de tempo e dinheiro em
manutenção, e a escrita de testes ajuda na melhoria do design do código. Outras
vantagens são:

 Com a utilização do método ganhando experiência, já no início da


implementação de um método, o desenvolvedor poderá refletir sobre como
fará para testá-lo;
 Ao iniciar mais cedo, os testes são feitos, aumentam as chances de que
erros sejam encontrados na sua fase inicial de desenvolvimento, evitando
que se espalhem pela aplicação, tornando-os mais simples de serem
resolvidos.

A base do TDD é a seguinte: os testes serão escritos antes do código.


Ele é uma técnica para desenvolvimento de software formado por pequenas
iterações para o desenvolvimento de uma nova funcionalidade, sempre iniciando
pela construção do caso de teste para depois construir o código para fazer o
teste passar e, finalmente, pela realização da refatoração do código visando
melhorá-lo, incluindo as mudanças realizadas. O TDD vem da ideia de “test-first
programming” do XP (Extreme Programming).
Os passos da construção com TDD são os seguintes:
a. Crie o teste;
b. Compile-o e execute-o (com certeza não irá – vermelho);
09
c. Então, codifique o requisito e faça-o passá-lo pelo o teste (verde);
d. Realize a refatoração do código para melhorá-lo.
A metodologia TDD é conduzida por “testes do programador” ou testes
unitários. É de se destacar que não se tratam dos testes de sistema nem os
de homologação (feitos pelo usuário final). Siga estes princípios:

1. Construa testes isolados uns dos outros: um caso de teste não deve
depender do sucesso de outro para funcionar. Deve ser possível executar
um caso de testes isoladamente, sem executar nenhum outro;
2. Comece definindo uma “Test List”: de modo geral, para uma mesma
classe ou método que será testado, existirão diferentes casos de teste.
Devem-se listar todos primeiro;
3. Primeiro o teste: é chance de refletir sobre o projeto das classes do
sistema e controlar o escopo. A codificação deve atender somente o
necessário para o teste corrente;
4. Primeiro a assertiva: é necessário refletir sobre o que significará se o teste
executar com sucesso antes de seguirmos adiante.
5. Dados para teste: para realizar o teste, procure não escolher números
complexos caso eles não tenham algum significado para o teste. Seja
simples. Não passe os mesmos valores para diferentes parâmetros. Ex.:
Ao fazer o teste de um método Operacao (int x, int y), não o faça utilizando
valores iguais Operacao (2,2). O método “Operacao” poderá inverter o “x”
e o “y” fazendo o teste passar assim mesmo, dificultando sua análise.
Procure usar informações do mundo real em seu sistema.
6. Dados com significado evidente: procurar codificar de forma explicativa
(comentar), pois vale lembrar que estamos escrevendo testes para outras
pessoas lerem, e não apenas para ser executados pelo computador.

FINALIZANDO

Qualquer conjunto de testes tem a missão de encontrar em um programa


ou sistema o máximo de bugs possíveis utilizando o mínimo de esforço. Nessa
aula, vimos como os testes são importantes e a existência de métodos e técnicas
para que seja possível implementar um plano de testes que garanta a qualidade
daquilo que se está entregando ao usuário. Os testes nunca finalizam. Mesmo
após a implantação e, por consequente, seu uso pelo usuário, o sistema será

010
constantemente testado; nesse caso, pelo cliente. E ninguém deseja que ele
encontre algum tipo de erro.

011
REFERÊNCIA

PRESSMAN, R.; MAXIM, B. Engenharia de software: uma abordagem


profissional. 8. ed. Porto Alegre: AMGH, 2016.

012
AULA 5

ENGENHARIA DE SOFTWARE

Prof. Emerson Antonio Klisiewicz


CONVERSA INICIAL

Nesta quinta aula, estudaremos a Qualidade de Software para o


desenvolvimento de sistemas, que também fazem parte do processo de
Engenharia de Software.

CONTEXTUALIZANDO

É também por meio da Engenharia de Software que objetivamos garantir


uma qualidade do software, definindo e normatizando os processos durante o
desenvolvimento dentro de um prazo condizente com a necessidade apresentada
pelo usuário.

TEMA 1 – CONCEITOS

1.1 Qualidade

Trata-se de uma visão do desenvolvedor que se une à ideia de que o


software sempre deve atender às necessidades do usuário. Para o usuário,
qualidade é a ideia do valor, sua utilidade e o cumprimento de todos os requisitos
por ele solicitados.

1.2 Funcionalidade

Tratam-se dos atributos, das funções e propriedades particulares do


software que vão satisfazer as necessidades impostas pelos requisitos do usuário.

1.3 Resumindo

Figura 1 – Resumo dos conceitos

02
Leitura complementar
Engenharia de Software – Uma abordagem profissional. 8.ª edição. Por
Roger Pressman e Bruce Maxim. Capítulo 21.

TEMA 2 – QUAL A NECESSIDADE DE SE MEDIR A QUALIDADE?

É necessário ter um valor para comparação. Ao medir e realizar uma


comparação do software com alguma informação (dado) é possível ter, desse
modo, um indicador de qualidade.
Mas, então, o que vamos medir? Nesse caso, teremos opções como o
processo e o próprio produto desenvolvido. Nesse procedimento, teremos vários
fatores que afetaram a qualidade e que podemos dividir em dois segmentos: os
que podem ser medidos diretamente como tempo, custos e produção; e os que
não podem ser medidos de forma direta, como questões de usabilidade e
manutenção, que são muito subjetivos e difíceis de mensurar.
A qualidade necessita ser medida de forma comparativa com padrões e
também critérios que devem ser pré-definidos. Por exemplo: medir e comparar o
software desenvolvido com alguma informação padrão e obter um indicador de
qualidade.

2.1 Mas o que é necessário medir?

Podemos decidir medir diversas situações dentro do ciclo de


desenvolvimento do software, como o tempo e custo do processo, o desempenho
do software e os resultados obtidos por ele. Poderemos também medir a produção
da equipe e também quais os recursos que foram usados efetivamente no
processo. Dessa forma, poderemos criar padrões, estimativas e com elas aplicar
correções, sejam elas corretivas ou preventivas diante dos riscos encontrados.

2.2 Fatores de qualidade

Vamos encontrar diversos fatores que afetarão a qualidade do software,


como características de operação, capacidade em agregar mudanças, sua
adaptação a novos contextos. Essas situações podem ser agrupadas nas
seguintes categorias: revisão do software, operação do software e transição do
software.

03
2.2.1 Revisão

Dentro desse item, nós teremos três situações: a questão da manutenção,


que visa verificar quanto o software foi desenvolvido, já prevendo futuras
alterações; da flexibilidade, que mostrará quanto de esforço deveremos gastar
para realizar qualquer alteração; e da testabilidade, que empregará testes para
verificar se o software foi desenvolvido conforme suas especificações.

2.2.2 Operação

Nesse quesito, atenderemos aos seguintes itens: corretagem, que


atenderá a especificações e objetivos definidos pelo usuário; confiabilidade, que
verificará se o software sempre executa do mesmo jeito e com a precisão exigida;
eficiência, que trará a quantidade de recursos necessários para o programa
executar; integridade, que verificará se o controle de acesso é controlado; e
usabilidade, que traz o esforço para aprender a trabalhar com o software.

2.2.3 Transição

Na transição, vemos questões como a portabilidade, que mede o esforço


para transferir o programa a outro ambiente de produção, bem como a questão
da reusabilidade, que demonstrará como usar o software ou parte dele em outras
aplicações, e também a interoperabilidade, que verificará o esforço para fazer a
união de um sistema a outro, integrando, assim, soluções.

TEMA 3 – ELEMENTOS DE GARANTIA DE SOFTWARE

Engloba preocupações e atividades que se concentram na gestão da


qualidade do software. Dentre elas, podemos sintetizar as seguintes.

3.1 Padrões

O IEEE, a ISSO e outras padronizações possuem grande quantidade de


padrões e documentos que ajudam no gerenciamento da qualidade do software.

3.2 Revisões e auditorias

Formalizará e controlará todas as solicitações de mudança no software


tanto no desenvolvimento como após sua implantação e posterior manutenção.

04
3.3 Testes

Detectarão possíveis falhas e erros no desenvolvimento e manutenção do


software, mas somente isso não é o suficiente.

3.4 Coleta e análise de erros/defeitos

Coleta é um conjunto de medidas técnicas e orientadas à administração


das especificações do software. Dessa forma, com dados em mãos é possível
compreender como os erros surgem e quais soluções dentro da engenharia de
software podemos usar para sua eliminação.

Leitura complementar
Engenharia de Software – Uma abordagem profissional, 8.ª edição, por
Roger Pressman e Bruce Maxim – capítulo 21, itens 1 e 2.

TEMA 4 – SQA: PROCESSOS

A garantia da qualidade de software (Software Quality Assurance – SQA)


deve ser aplicada em todo o processo de engenharia de software. Avaliações,
auditorias e revisões vão definir padrões para o projeto, procedimentos para a
geração de relatórios de acompanhamento de erros e também a criação de uma
documentação necessária que vai instruir a equipe com conclusões a respeito do
projeto do software. Dentre elas, podemos sintetizar nos itens a seguir.

4.1 Revisões de software

Métodos de validação de qualidade usados pela equipe de


desenvolvimento do software. Eles filtrarão erros e inconsistências no processo
de desenvolvimento, tendo como objetivos reportar melhorias no produto ou parte
dele e tornar o trabalho técnico de desenvolvimento mais administrável.

4.1.1 Tipos de revisões

 Inspeções de projeto ou programa, que vão detectar erros nos requisitos,


projeto ou código.
 Revisões de progresso, que informarão para os GPs do projeto o progresso
geral do desenvolvimento (planejamento, custos e prazos).

05
 Revisões de qualidade, que farão uma análise técnica do produto ou
documentação para verificar se existem inconsistências entre a
especificação e o projeto, entre o código e documentação e também
assegurar se padrões de qualidade foram seguidos.

4.2 Revisão técnica formal

Trata-se da principal atividade de um SQA, que tem por objetivos verificar


se o software atende a todos os requisitos. Também visa garantir que o software
está de acordo com padrões pré-definidos pelo usuário. Obter um software
desenvolvido de forma uniforme e tornar os projetos de desenvolvimento mais
administráveis também está entre os objetivos dessa técnica. Cada uma dessas
revisões é conduzida na forma de uma reunião que segue os seguintes padrões:

 Restrições à reunião (duração de até 2h).


 Participação de 3 a 5 pessoas, com preparação antecipada. Foco: um
produto ou um componente de software que se está desenvolvendo.

Ao final da reunião, o objetivo será todos aceitarem ou rejeitarem, ou ainda,


aceitarem temporariamente o que foi apresentado.

Leitura complementar
Engenharia de Software – Uma abordagem profissional. 8. ed. Por Roger
Pressman e Bruce Maxim. Capítulo 21, item 3.

TEMA 5 – NORMAS: NBR ISO

Um sistema de garantia da qualidade pode ser definido como a estrutura


organizacional com responsabilidades, procedimentos, processos e recursos para
implementação da gestão (ANS, 87).
O controle de qualidade e o uso dos padrões baseados em normas ISO
estão influenciando a forma como a qualidade está sendo usada nas últimas
décadas, mas historicamente o assunto é muito antigo.
Em relatos existentes há mais de quatro mil anos, os egípcios já
estabeleciam um padrão de medida de comprimento conhecido como cúbito, que
correspondia ao comprimento do braço do faraó reinante. Era utilizado assim
como a unidade de medida nas construções egípcias. Porém, havia um problema
quando um novo faraó assumia o poder, pois, assim, a unidade de medida

06
também se modificava. Interessante também era a punição para quem não
aceitava a mudança: a morte.
A ISO 9000 descreve elementos de garantia da qualidade em termos gerais
que podem ser aplicados a qualquer empresa, independentemente do tipo de
produtos ou serviços oferecidos. A necessidade das organizações se tornarem
competitivas passa a ser enfatizada como motivo para a adoção de sistemas que
resultem na qualidade. A ISO tem como princípios:

 Descrever elementos de garantia em termos genéricos, que podem ser


aplicados aos negócios (produto ou serviço).
 Ter um modelo de qualidade que define responsabilidades, crie
procedimentos e processos, capacite recursos para realização de uma
gestão da qualidade.

A empresa, ao adotar essa norma, com certeza vai ganhar produtividade e


credibilidade, aumentando sua competitividade no mercado, podendo ser uma
diferenciação e, desse modo, possibilitar à empresa buscar novas oportunidades
em um mercado global.
A certificação é possível seguindo-se os passos:

1. Empresa contrata consultoria específica.


2. Empresa se qualifica para a auditoria de acreditação da ISO.
3. É feita uma avaliação da conformidade do sistema de garantia da qualidade
e não se certifica o SOFTWARE e sim a capacidade de desenvolvimento.
Geralmente certifica-se por área de atividade da empresa (não na
totalidade).
4. Uma vez qualificada (auditoria de validade), a empresa recebe o certificado.
5. Começam as auditorias de vigilância – semestrais ou anuais.

A ISO 9000 surge como alternativa para melhoria do processo de


desenvolvimento das empresas, gerando produtos e serviços mais competitivos
nos mercados nacional e internacional. A certificação ISO surge como um
diferencial para que a empresa consiga atingir melhores patamares e
oportunidades num mercado que hoje se apresenta na forma global.

5.1 NBR 13596

A seguir mostramos quais são as características das normas NBR 13596,


que são uma versão brasileira da ISO 9126.

07
Quadro 1 – Características da norma NBR 13596

Quadro 2 – Mais características da norma NBR 13596

Mas como podemos aplicar as normas ISO/NBR?


Para avaliar um software segundo uma norma, deve-se tentar atribuir
valores (notas ou conceitos) a cada uma das subcaracterísticas. Porém, é difícil
aplicar uma norma sem se estar familiarizado com todo o processo de avaliação
de software. Guias para a avaliação da qualidade descrevem, detalhadamente
todos os passos para se avaliar um software.

5.2 ISO 9000-3

Trata-se de um guia, criada em 1993, para a aplicação da ISO 9001 voltada


ao desenvolvimento, fornecimento e manutenção de um software. Ela especifica

08
os requisitos mínimos para assegurar a qualidade de produtos de software e
serviços, porém não define modelos ou impõe sistemas de qualidade.
Ela agrupa as atividades do ciclo de vida em nove categorias: análise crítica
do contrato, especificação dos requisitos do comprador, planejamento do
desenvolvimento, planejamento da qualidade, projeto e implementação, ensaios
e validação, aceitação, cópia, entrega e instalação, manutenção.
Ela agrupa as atividades relacionadas a suporte em nove situações: gestão
de configuração, controle de documentos, registros da qualidade, medição,
regras, práticas e convenções, ferramentas e técnicas, aquisição, produto de
software incluído e treinamento.
A seguir, o fluxo do processo para a certificação.

Figura 2 – Fluxo do processo para certificação

A seguir, um quadro com mais algumas normas ISO e as suas


características.

09
Quadro 3 – Normas ISO e características

Leitura complementar
Engenharia de Software – Uma abordagem profissional 8. ed. Por Roger
Pressman e Bruce Maxim. Capítulo 21, item 8.

FINALIZANDO

No desenvolvimento de softwares, a qualidade no processo deve existir


desde o início. Possuir aferições em cada fase, com métricas, fatores de qualidade
e padrões é de vital importância para o sucesso. Buscar inconsistências ter um
bom SQA – Software Quality Assurance, realizar avaliações, auditorias, revisões
constantemente e ter atividades de controle das mudanças fará toda a diferença
no sucesso do desenvolvimento. Num mundo tão competitivo em que estamos,
ter uma boa documentação e qualidade no produto que se está entregando
selecionará a empresa, que crescerá ou não no mercado de software.

010
REFERÊNCIAS

PRESSMAN, R.; MAXIM, B. Engenharia de Software: uma abordagem


profissional. 8. ed. Porto Alegre: McGraw-Hill, 2016.

011
AULA 6

ENGENHARIA DE SOFTWARE

Prof. Emerson Antonio Klisiewicz


CONVERSA INICIAL

Nesta aula 6, estudaremos o gerenciamento da configuração de software e


sobre as questões envolvidas na segurança da informação.

CONTEXTUALIZANDO

Tanto a configuração de software que envolve questões críticas no


desenvolvimento, por exemplo, o versionamento de aplicações, como as questões
sobre segurança no tratamento das informações fornecidas e processadas pelos
softwares são vitais termos o controle no mundo competitivo de desenvolvimento
que temos hoje.

TEMA 1 – GERENCIAMENTO DE CONFIGURAÇÃO DE SOFTWARE:


PROBLEMAS

1.1 Problema dos dados compartilhados

Figura 1 – Dados compartilhados

Na situação anterior, o desenvolvedor A modifica um software que está


compartilhado. Posteriormente, o desenvolvedor B realiza algumas alterações no
mesmo software e, ao tentar compilá-lo, erros são apontados pelo compilador,
mas nenhum deles ocorre na parte que B alterou, deixando o desenvolvedor B
sem a menor ideia da causa do problema.
Uma solução simples seria cada desenvolvedor trabalhar em uma cópia
“local” do software. Isso resolve o problema dos softwares compartilhados, porém,
cria um novo problema.

02
1.2 Problema da manutenção múltipla

Figura 2 – Manutenção múltipla

Ocorre quando cada desenvolvedor trabalha com uma cópia “local” do que
seria o mesmo software. Isso dificultará a identificação das funcionalidades que
foram implementadas e em quais versões, bem como quais erros foram corrigidos.
Podemos evitá-lo por intermédio do uso de uma biblioteca central com o software.
Nessa proposta, cada software é copiado para a biblioteca sempre que for
alterado. Contudo, ainda não é o ideal.

1.3 Problema da atualização simultânea

Figura 3 – Atualização simultânea

Nesse caso, o desenvolvedor A encontra e faz a correção de um erro na


sua versão do software. Depois de corrigido, o software modificado é copiado para
a biblioteca central. O desenvolvedor B encontra-o e faz a correção do mesmo
defeito na sua versão do software, por não saber que A já tinha feito,
desperdiçando todo o trabalho de A.
Em outra situação, o desenvolvedor A encontra e corrige um defeito em
sua versão compartilhada. Uma vez corrigido, ele copia para a biblioteca central.

03
O desenvolvedor B encontra o software e corrige outro erro em sua versão do
componente, sem saber do defeito corrigido por A. O desenvolvedor B copia sua
versão do componente para a biblioteca central. Além do trabalho de A ser
desperdiçado, a versão que está na biblioteca central continua apresentando erro,
sendo que o desenvolvedor A pensa que o problema foi resolvido.
Para resolver essa situação, precisamos ter um mecanismo de controle
para gerenciar a entrada e saída das versões da biblioteca central.

Leitura complementar
Engenharia de Software: uma abordagem profissional. 8. Ed. Por Roger
Pressman e Bruce Maxim. Capítulo 29.

TEMA 2 – GERENCIAMENTO DE CONFIGURAÇÃO DE SOFTWARE: POR QUE


USAR

A aplicação do gerenciamento de configuração de software dentro das


empresas oferece um ambiente de desenvolvimento de software estável, porque
qualquer alteração sem controle de softwares torna todo o desenvolvimento
caótico.
O gerenciamento de configuração de software nos oferece uma “memória”
da situação do desenvolvimento dos softwares em nossa empresa. Quando
muitas pessoas estão trabalhando no mesmo projeto, esse gerenciamento vai
coordenar o acesso às alterações a serem feitas nos softwares que estão sendo
desenvolvidos.
Dentre as tarefas que um gerenciamento de configuração possui, podemos
citar os descritos a seguir.

04
Quadro 1 – Tarefas de um gerenciamento de configuração de software

TEMA 3 – REPOSITÓRIO DOS ITENS DE CONFIGURAÇÃO

Um repositório de itens de configuração é um local com controle de onde


são armazenados os itens de configuração de software depois de liberados pelo
desenvolvimento. Todos os itens de configuração devem ser identificados,
analisados, corrigidos, aprovados e armazenados no repositório de itens de
configuração, para posteriormente serem enviados para as áreas de produção.
Todos os módulos de um repositório de itens de configuração só poderão
ser alterados após uma solicitação de alteração formalmente aprovada pelo
gerente de configuração. Isso é importante para que somente pessoas realmente
autorizadas possam acessar o módulo. Essa também é uma forma para garantir
o controle sobre cada um dos itens de configuração, evitando alguma
inconsistência.

05
3.1 Check in/Check out

Check in/check out é o método utilizado para trabalhar com itens de


configuração que já estão no repositório, ou seja, trata-se de uma conferência na
entrada e uma conferência na saída do software do repositório central. Quando
for necessária a alteração em algum item de configuração do repositório, uma
cópia do item é colocada numa área de trabalho do desenvolvedor (“check out”).
Nessa área exclusiva, o desenvolvedor tem total liberdade de trabalho e poderá
realizar as alterações necessárias no módulo. Veja a figura a seguir:

Figura 4 – Check out

Após o final das alterações no módulo, ele será revisado e recolocado no


repositório (“check in”). Uma nova data de alteração será criada para o módulo
(versão), de modo que uma nova configuração contendo o módulo alterado será
formada e congelada no repositório. A seguir, essa situação:

Figura 5 – Check in/check out

06
TEMA 4 – CONTROLE DE MUDANÇAS

Durante o processo de desenvolvimento de software, mudanças


descontroladas podem levar rapidamente o projeto ao caos. Assim, devemos
instituir na organização um processo que combine procedimentos humanos e
ferramentas automatizadas para proporcionar um mecanismo de controle das
mudanças.
O processo de controle de mudanças deve ser implementado depois que
temos as datas em que serão implantadas as modificações realizadas nos
módulos. A seguir, um exemplo para ilustrar um processo de controle de
mudanças que pode ser implementado.

Figura 5 – Exemplo: organograma de processo de controle de mudanças

Os procedimentos de controle das mudanças asseguram que as mudanças


em um software sejam feitas de modo controlado, permitindo-se prever o efeito
delas em todo o sistema. Procedimentos formais de organização e de controle das
mudanças permitem que os pedidos de alteração possam ser considerados em
conjunto com outros pedidos e isso não afete o ambiente produtivo dos sistemas.
Também permite a organização e controle das mudanças de pedidos
incompatíveis entre si ou que possam ser atribuídas prioridades aos pedidos e,
de acordo com essas prioridades, possam ser gerados cronogramas.

07
4.1 Ferramentas de GCS

Existem algumas ferramentas de software que podem auxiliar as atividades


de gerenciamento de configuração de software. Exemplos de ferramentas:

 CVS (Concurrent Versions System) : <http://www.cvshome.org/>;


 RCS (Revision Control System):
<http://www.gnu.org/software/rcs/rcs.html>;
 SCCS (Source Code Control System):
<http://www.cvshome.org/cyclic/cyclicpages/sccs.html>;
 Source Forge (Web Pages Versions Management):
<http://versionweb.sourceforge.net/>.

Leitura complementar
Engenharia de Software: uma abordagem profissional. 8. ed. Por Roger
Pressman e Bruce Maxim. Capítulo 29.

TEMA 5 – SEGURANÇA DA INFORMAÇÃO

Segurança da Informação (SI) é a proteção de sistemas de informação


contra desastres, erros e manipulação de modo a minimizar a probabilidade e
impacto de incidentes. Se divide em duas categorias:

 Ameaças: É a intenção da parte de alguém em causar dano a um


indivíduo/organização. Nesse item, podemos incluir sabotagem de software
ou hardware, roubo de informações, ataques a infraestrutura, ataques de
hackers, incêndio e inundação. Nas ameaças, temos ações em potenciais
que seguem o caminho de menor resistência, ou seja, mais vulnerável.
Nesse caso, o risco é medido por meio da probabilidade de que uma
ameaça pode acontecer e o dano que pode ser gerado à pessoa/empresa.
 Vulnerabilidade: Aqui é a deficiência na infraestrutura e organização que
expõem riscos a eventos imprevistos/indesejáveis. Isso pode ocorrer por
má configuração do sistema operacional, sistema de banco de dados com
defeito, falha em um programa de acesso a dados, firewall desatualizado e
falta de um nobreak.

Na prevenção dentro de SI, temos as seguintes situações.

08
5.1 Confidencialidade

É a garantia de que a informação é acessível somente por pessoas


autorizadas para não acontecer a divulgação intencional (ou não) de informações
reservadas. Questões de confidencialidade surgem porque processos e
informação sensíveis do negócio só devem ser divulgados para
pessoal/programas autorizados. Para isso, é imprescindível um controle de
acesso.

5.2 Integridade

Trata-se da garantia da exatidão e completude da informação e dos


métodos de processamento da informação. As informações não devem ser
modificadas por pessoas/processos desautorizados. As informações também não
devem ser inconsistentes e o sistema deve garantir que elas são precisas e
completas.

5.3 Disponibilidade

Nesse item, temos a garantia de que usuários autorizados obtenham


acesso à informação e aos ativos correspondentes sempre que necessário. A
informação e os serviços do negócio devem estar disponíveis sempre que forem
solicitados. Para isso, existe a necessidade de controles para garantir
confiabilidade dos serviços informatizados.

5.4 Classificação dos riscos

5.4.1 Financeiros

São os riscos envolvidos no relacionamento entre uma organização e o seu


ativo. Nessa situação, temos o indivíduo ou a organização, que estão expostos a
riscos, ativos ou receitas, cuja destruição ou perda poderá causar prejuízo
financeiro ou uma ameaça que possa causar algum tipo de perda à empresa.

5.4.2 Não financeiros

São os riscos representados por perdas não passíveis de mensuração


financeira. Por exemplo, uma inundação em que milhões de acres de fazendas

09
foram destruídas, causando bilhões de dólares em perdas financeiras para os
proprietários. Não há como mensurar as perdas financeiras resultantes da
destruição de fauna e flora selvagem.

5.5 Exemplos de falta de segurança

5.6 Alguns cuidados que devemos ter

 Utilizar senhas distintas e seguras para cada site ou serviço;


 Não instalar softwares de fontes duvidosas;
 Manter seus sistemas sempre atualizados, incluindo antivírus;
 Evitar conectar pendrives e outros meios de armazenamento de terceiros;
 Não acessar sites de origem duvidosa;
 Proteger seus arquivos pessoais em HDs, pendrives e outros dispositivos
de armazenamento usando soluções que impeçam que seus arquivos
caiam em mãos erradas, mesmo que o dispositivo eletrônico seja perdido
ou mesmo roubado;
 Não clicar em links suspeitos como aqueles recebidos por e-mail ou vistos
em sites como os de redes sociais;

010
 Não salvar senhas de acesso em navegadores;
 Ter controle de acesso aos sistemas;
 Ter logs para saber quem acessou o sistema e o porquê;
 Trocas automáticas de senha de tempos em tempos.
 Ter controle de acesso aos locais de desenvolvimento.

Leitura complementar
Engenharia de Software: uma abordagem profissional. 8. ed. Por Roger
Pressman e Bruce Maxim. Capítulo 27.

FINALIZANDO

Os computadores são utilizados para realizar inúmeras tarefas, tais como


transações financeiras, sejam elas bancárias ou mesmo compra de produtos e
serviços para comunicação, por exemplo; por meio de e-mails e redes sociais
também armazenamento de dados, sejam eles pessoais ou comerciais, etc.
Muitos se perguntam o porquê de alguém tentar acessar os nossos computadores
e sistemas. Sim há muitos motivos: utilizar seu computador em alguma atividade
ilícita, para esconder a real identidade e localização do invasor, utilizar seu
computador para lançar ataques contra outros computadores, utilizar seu disco
rígido como repositório de dados, furtar dados do seu computador. Só por isso
vemos o quanto é importante a questão da segurança da informação e como
devemos trabalhar para implementá-la. Uma das formas de fazê-la também é
termos um consistente sistema de configuração de software em que qualquer
mudança seja bem implementada e segura dentro do contexto em que ela foi
solicitada.

011
REFERÊNCIAS

PRESSMAN, R.; MAXIM, B. Engenharia de Software: uma abordagem


profissional. 8. ed. Porto Alegre: McGraw-Hill, 2016.

012

Você também pode gostar