centro universitário de araraquara núcleo de

Transcrição

centro universitário de araraquara núcleo de
CENTRO UNIVERSITÁRIO DE ARARAQUARA
NÚCLEO DE EDUCAÇÃO A DISTÂNCIA
ESPECIALIZAÇÃO MBA EM GESTÃO DA QUALIDADE DE SOFTWARE (CMMI)
ANDRE LUIS DE ANDRADE
TESTADORES E PROGRAMADORES EM UM AMBIENTE DE
DESENVOLVIMENTO ÁGIL
ARARAQUARA / SÃO PAULO
2015
CENTRO UNIVERSITÁRIO DE ARARAQUARA
NÚCLEO DE EDUCAÇÃO A DISTÂNCIA
ESPECIALIZAÇÃO MBA EM GESTÃO DA QUALIDADE DE SOFTWARE (CMMI)
ANDRE LUIS DE ANDRADE
TESTADORES E PROGRAMADORES EM UM AMBIENTE DE
DESENVOLVIMENTO ÁGIL
Trabalho de Conclusão de Curso apresentado
como requisito parcial para a conclusão do
curso de Especialização em MBA em Gestão da
Qualidade de Software (CMMI)
Orientador(a): Prof. Esp. Carlos Alberto
Silva
ARARAQUARA / SÃO PAULO
2015
DECLARAÇÃO
Eu, Andre Luis de Andrade, declaro ser o(a) autor(a) do texto apresentado Trabalho de
Conclusão de Curso, no programa de pós-graduação lato sensu em (MBA em Gestão da
Qualidade de Software (CMMI)) com o título “ (Testadores e Desenvolvedores em um
Ambiente de Desenvolvimento Ágil)”.
Afirmo, também, ter seguido as normas da ABNT referentes às citações textuais que utilizei e
das quais eu não sou o(a) autor(a), dessa forma, creditando a autoria a seus verdadeiros
autores.
Através dessa declaração dou ciência de minha responsabilidade sobre o texto
apresentado e assumo qualquer responsabilidade por eventuais problemas legais, no tocante
aos direitos autorais e originalidade do texto.
Araraquara, ___ de _______ de ______.
_____________________________________
Assinatura do autor(a)
ANDRE LUIS DE ANDRADE
TESTADORES E PROGRAMADORES EM UM AMBIENTE DE
DESENVOLVIMENTO ÁGIL
Trabalho de Conclusão de Curso apresentado
como exigência parcial para a finalização do
Curso de Especialização em MBA em Gestão
da Qualidade de Software (CMMI) pelo
Centro Universitário de Araraquara – Uniara.
Orientador(a): Prof. Carlos Alberto Silva
Data da defesa/entrega: ___/___/____
MEMBROS COMPONENTES DA BANCA EXAMINADORA:
Presidente e Orientador:
Membro Titular:
Membro Titular:
Média______
Centro Universitário de Araraquara
Araraquara- SP
Data: ___/___/____
Para todos que amo e serviram como inspiração e, àqueles que prezam por um mundo pacíf-ico em
que a qualidade das ações faça a diferença.
AGRADECIMENTOS
Este trabalho foi algo idealizado para auxiliar meus colegas a compreenderem melhor
o cotidiano dos profissionais de desenvolvimento e qualidade de software, estes os quais
foram muito importantes em meus dezoito anos de carreira com seus ensinamentos e
paciência a cada pergunta que fiz. Mas, as mais importantes inspirações para continuar os
estudos e jamais desistir nos tortuosos caminhos do destino, são: minha digníssima esposa
Fabiane, meus incríveis filhos Fabiane Victoria e Ricardo Augusto, meus pais e sogros que
sempre me auxiliaram quando preciso. É preciso acreditar que sempre é possível encontrar
um destino acima da expectativa, basta agradecer ao próximo e fazer tudo com muita
perseverança e com a maior qualidade possível.
“Trabalhar pela qualidade é uma lição de vida, deve ser algo intrínseco em cada um de nós a
fim de possibilitar uma vida melhor para todos.”, (Andre Luis de Andrade)
RESUMO
No ciclo de vida de desenvolvimento de software (SDLC) é preciso reconhecer o valor de
cada uma das etapas envolvidas durante o andamento de um projeto, desde seu planejamento
até a sua implementação. Por muitos anos os analistas não se utilizaram de ferramentas
formais de análise e controle deste ciclo, o que resultava em projetos desenvolvidos fora de
escopo, mesmo que parcialmente, não adequados ao prazo de entrega solicitado pelo cliente e
excedendo a um orçamento, provavelmente. Portanto, após alguns profissionais perceberem
este equivoco, nos anos 60 (século XX), o termo “engenharia de software” começou a ser
utilizado para certificar-se de que os projetos estavam seguindo sólidos princípios de
engenharia que respeitem critérios básicos durante as etapas de desenvolvimento de sistemas.
Nesta visão, iniciaram-se estudos de metodologias para a área, resultando inicialmente em
modelos tradicionais, tais como as metodologias estruturadas, evoluindo para as metodologias
em orientação a objetos e as metodologias de desenvolvimento Ágil. No primeiro modelo, sua
aplicação está relacionada com projetos complexos e que demandem uma organização mais
estrita, pois cada etapa de processo precisa ser finalizada para que a outra seja iniciada
(modelo em cascata, por exemplo). Entretanto, neste, o relacionamento entre as equipes é
limitado e não há o conhecimento e nem o reconhecimento sobre o que está sendo feito por
outrem. Deste modo, o foco da pesquisa em buscar o aprimoramento da integração entre
programadores e testadores tornar-se-ia inviável, fato que pode causar atrasos no projeto
devido a menor qualidade alcançada por defeitos que poderiam ter sido anteriormente
evitados. A partir disso, a metodologia Ágil tornou-se mais vantajosa e adequada para
projetos que exigem maior dinamismo e integração entre seus pares, já que desde o início o
cliente e as equipes de planejamento, desenvolvimento e qualidade estão a trabalhar unidos
pelo propósito principal, o sucesso, o respeito ao cronograma, ao orçamento e conquistar a
menor rejeição possível do usuário final. Os programadores precisam estar atentos à forma
Ágil de se realizar os testes de unidade e integração, seguindo o roteiro de testes com os
cenários prescritos para o sistema, transformando esta atividade no perfeito relacionamento
entre os profissionais responsáveis pela codificação e aqueles responsáveis por prezar pela
mitigação de riscos e redução de defeitos.
Palavras Chave: Qualidade de Software. Teste de Software. Metodologia Ágil. Testes Ágeis.
Desenvolvimento de Software. SDLC
ABSTRACT
In the software development life-cycle (SDLC) is necessary to recognize the value of each
steps involved during a project, since the planning step to implementing step. For years, the
analysts didn’t use formal tools to do analysis and take the control of this cycle, which results
in out of scope projects, even partially not appropriate to the schedule defined for the
customer and out of the budget. Therefore, after some professionals verifying this mistake in
the 60’s (XX century), the term “software engineering” started to be used to certified that the
projects are following the principles of the engineering, respecting the basic criterias during
the systems development steps. In this vision, the study of methodologies for the area has
been started, resulting in the firsts traditional models, such as structured methodologies,
evoluting to object oriented methodologies and the Agile development methodologies. In the
first model, its application is related with projects with high level of complexity and that need
a more strict organization, because each step of this process must be concluded to another be
started (waterfall model, for example). However, in this model, the relationship between the
teams are limited and have no knowledge and no recognition about what is being doing for
each professional. In this way, the focus of the research to search a mode to improve the
integration between the programmers and testers would become unviable, a fact that should
cause late in the project due lower quality achieved for defect that should being previously
avoided. Since this time, the Agile methodology it became more advantageous and adequate
for projects which need dynamism and integration between the teams, because since the
beginning the customer and the planning, development and quality teams are working
together for the same goal, the success of the project, respecting the schedule and the budget
with the propose to conquest the lower bounce of the end-user. The programmers must be
alert to the Agile way to make unit tests, integration tests, following the test plans created for
the system, changing this activity in the perfect relationship between the code professionals
and that professionals responsible for the risks mitigations and less bugs.
Keywords: Software Quality; Software Testing. Agile Methodology. Agile Testing. Software
Development. SDLC
LISTA DE ABREVIATURAS
ATDD
Acceptance Test-Driven Development
GCS
Gestão de Configuração de Software
QA
Quality Assurance
RAM
Random Access Memory
SDLC
Software Development Life-Cycle
SI
Sistema de Informação
TC
Test Case
TDD
Test-Driven Development
TI
Tecnologia de Informação
UAT
User Acceptance Test / Teste de Aceitação de Usuário
UT
Unit Test / Teste Unitário
XP
eXtreme Programming
SUMÁRIO
1
INTRODUÇÃO ...................................................................................................... 13
2
OBJETIVOS............................................................................................................ 16
2.1
Objetivo Geral ..................................................................................................... 16
2.2
Objetivos Específicos .......................................................................................... 16
3
METODOLOGIA ................................................................................................... 17
4
DESENVOLVIMENTO x QUALIDADE DE SOFTWARE ................................. 18
4.1
A Qualidade Inserida no Contexto da Engenharia de Software .......................... 18
4.2
Diretrizes da Qualidade de Software ................................................................... 20
4.3
Ciclo de Vida de Desenvolvimento do Software ................................................ 24
4.4
A Qualidade no Ciclo de Vida do Desenvolvimento de Software (SDLC) ........ 25
5
O AMBIENTE DE DESENVOLVIMENTO ÁGIL ............................................... 28
5.1
Descrevendo a Metodologia Ágil ........................................................................ 28
5.2
Comparação Entre Metodologia Ágil e Metodologias Tradicionais ................... 29
5.3
Os Testadores no Desenvolvimento Ágil ............................................................ 31
6
TÉCNICAS UTILIZADAS EM UM AMBIENTE ÁGIL ...................................... 33
6.1
Uma Visão Sobre o eXtreme Programming (XP) ............................................... 33
6.2
Uma Visão Sobre o Test-driven Development (TDD) ........................................ 35
6.3
Uma Visão Sobre os Testes de Aceitação (UAT) ............................................... 38
7
CONSIDERAÇÕES FINAIS .................................................................................. 41
REFERÊNCIAS ............................................................................................................. 42
ÍNDICE DE ILUSTRAÇÕES
Figura 1 - Modelo de Processo em Cascata .............................................................................. 19
Figura 2 - Modelo de Processo de Desenvolvimento Incremental ........................................... 19
Figura 3 - Modelo Orientado a Reuso ...................................................................................... 20
Figura 4 - Árvore de Características de Qualidade de Boehm ................................................. 22
Figura 5 - Modelo Espiral de Boehm ....................................................................................... 23
Figura 6 - Ciclo Básico de Desenvolvimento de Sistemas (SDLC) ......................................... 24
Figura 7 - Qualidade no ciclo de vida do software ................................................................... 26
Figura 8 - Modelo Simplificado do Processo XP ..................................................................... 34
Figura 9 - Modelo do Ciclo ATDD (Acceptance Test-driven Development) .......................... 36
Figura 10 - Ciclo do Test-driven Development (TDD) ............................................................ 37
Figura 11 - Modelo em V do Teste de Software ...................................................................... 40
13
1
INTRODUÇÃO
Em um modelo tradicional de desenvolvimento de software, comumente se verifica a
necessidade intrínseca de finalizar um módulo de cada vez, aonde jamais fora cogitado
entregar a etapa atual em partes, ou seja, por exemplo, um determinado código apenas é
enviado para testes após sua implementação tiver sido concluída. Entretanto, quando o
desenvolvedor aguarda este período a fim de utilizá-lo para pensar, excessivamente, em
refinar seu código, para então entregar a equipe de Testadores, isto pode acarretar perda de
tempo, orçamento e causar um conflito entre as equipes.
Para facilitar e agilizar a comunicação entre estas duas equipes de profissionais,
agilizando os processos dentro do SDLC (Software Development Life-Cycle), uma equipe de
especialistas fundou a Agile Alliance, a qual propôs em 2001, o "Agile Manifesto".
[...] o intuito foi o de promover a eficiência, humanidade e uma forma
colaborativa de desenvolver programas de computador e sistemas de
informação”. As fases de testes de software são uma amostra do envolvimento
de todo o ambiente global de colaboração, envolvendo desenvolvedores a
partir dos testes de unidade e testadores profissionais nos testes de aceitação,
além das demais fases de testes de integração e testes de sistema [...]".
(HUSTON, (2015)
A metodologia de Testes Ágeis (Agile Testing) foi criada para facilitar o andamento
dos projetos de uma forma paralela, na qual os Desenvolvedores e os Testadores trabalham
juntos para entregar um produto de qualidade, no tempo prometido e com os requisitos
propostos. Assim, a cadeia produtiva dos softwares tende a quebrar barreiras de discriminação
entre estes profissionais, o que pode tornar um ambiente de trabalho menos hostil e mais
colaborativo, encorajando todos a executar o melhor trabalho possível.
“Na abordagem Ágil, desenvolvedores e testadores são vistos como dois lados
da mesma moeda de produção, duas linhas paralelas que precisam sempre
atender e comparar notas diariamente.” (HUSTON, 2015, tradução nossa) 1
Ao mesmo tempo em que os desenvolvedores precisam pensar com maior
responsabilidade sobre cada linha de código a ser produzida, é de mesma valia que os
testadores trabalhem de uma forma ágil e com um interesse jamais antes mencionado ao
código desenvolvido, pois a partir deste passo tornar-se-á possível sua automação em testes
1
In the Agile approach, developers and testers are seen as two sides of the same production coin, two parallel lines that
should always meet and compare notes daily (HUSTON, 2015)
14
ágeis e com resultados mais concretos, descobrindo suas ineficiências antes mesmo da
implementação daquele. Dentro da metodologia Ágil há filosofias como o SCRUM e a
metodologia XP (eXtreme Programming), este o qual será levada em consideração durante as
pesquisas. Neste contexto, destacam-se o Test-Driven Development (TDD), o qual pode ser
utilizado com um exemplo de prática de testes planejado e executado pelos profissionais de
desenvolvimento, por se tratar de testes unitários. E, em contrapartida, os testes de aceitação
(User Acceptance Testing – UAT) são a visão mais próxima possível do cliente final, tendo os
analistas de testes funcionais a responsabilidade de analisar as funcionalidades do sistema de
um modo global e com pouco ou nenhum conhecimento técnico.
Um (desenvolvimento de software) processo define que está fazendo o que,
quando e como. Isto quer dizer que, provê princípios, técnicas e práticas para a
eficiência, predição e repetição na produção de sistemas de software. Além
disso, o processo serve como um template para a criação de projetos
(DUDZIAK, 1999/2000, tradução nossa, p. 4) 2
Já, a automação dos testes de software é importante na análise em questão, pois é
sempre de interesse de todos que haja o aprimoramento da eficiência de um ou mais processos
de um projeto, fato que tende a conceber uma adequação ao cronograma deste e também,
auxiliar em uma melhor eficácia da codificação em todo o ciclo de desenvolvimento de
software. Por haver a possibilidade de reutilização de códigos dos processos automatizados,
isto faz com que os testes tornem-se ágeis e precisos, pois quanto menor for à ação humana,
mais eficaz é o procedimento.
[...] os projetos de automação de testes bem sucedidos são aqueles que se
baseiam em processos de testes formais e estruturados. Afinal, como é
possível esperar alguma coisa de testes automatizados que são baseados em
testes manuais errados, ambíguos ou inconsistentes, sucedidos são aqueles que
se baseiam em processos de testes formais e estruturados [...]. (CAETANO,
2008, p. 42)
Portanto, com esta visão que se torna possível à visualização do contexto explicitado
até o momento introduzido, pois a integração entre as equipes de desenvolvimento e testes é
mais importante do que nunca para os processos de automação, unindo a experiência de
codificação do primeiro, com as qualidades processuais do outro, com a criação de casos de
testes de qualidade e baseados em uma estrutura sólida de relacionamento entre os fluxos de
2
A (software development) process defines who is doing what when and how. This means, it provides
principles, techniques and practices for the efficient, predictable and repeatable production of software systems.
Therefore, the process serves as a template for creating projects (DUDZIAK, 1999/2000, p. 4)
15
execução de cada módulo da aplicação (Fluxo Principal, Fluxos Alternativos e Fluxos de
Exceção), sendo ainda mais importante em situação aonde os casos de uso são inexistentes,
requisitando testes regressivos e testes exploratórios.
16
2
2.1
OBJETIVOS
Objetivo Geral
Teoricamente, o objetivo deste trabalho será o demonstrar de uma forma analítica e
com resultados descritivos o contexto de integração de profissionais de desenvolvimento e de
qualidade de software (no caso, testadores de software), focando nos requisitos técnico e nãotécnicos envolvidos durante o Ciclo de Vida de Desenvolvimento de Software (conhecido
como SDLC - Software Development Life-Cycle).
Em prática, o propósito básico será o de fortalecer o vínculo de desenvolvedores com
as atividades de teste de software, auxiliando no entendimento destes para com os
profissionais de qualidade de software, os quais são erroneamente conhecidos como
irresponsáveis, sendo tachados de responsáveis pelo atraso no cronograma de um projeto.
2.2
Objetivos Específicos
O teste de software é importante para a qualidade do produto e redução da rejeição perante
os clientes, mas para o andamento de um projeto ele pode passar a impressão de causar um
atraso no cronograma, fazendo com que seja rejeitado por alguns gestores e desenvolvedores.
Então, para que esta visão deturpada seja contornada, serão analisados métodos e realizadas
análises sobre os seguintes assuntos:
 Desenvolvimento x Qualidade de Software
 A Importância dos Testes Ágeis (Agile Testing)
 Uma Visão Sobre o eXtreme Programming (XP methodology)
 Uma Visão Sobre o Test-Driven Development (TDD)
 Uma Visão Sobre os Testes de Aceitação (UAT – User Acceptance Testing)
 O Aprimoramento da Relação Entre Desenvolvedores e Testadores
17
3
METODOLOGIA
Esta pesquisa será baseada em informações concretas e em modo comparativo sobre
desenvolvimento de software e qualidade de software a partir de artigos, teses e dissertações
de especialistas, bibliografias reconhecidas pelo mercado e, normas brasileiras e
internacionais relacionadas às áreas em questão nos assuntos alçados como relevantes para a
compreensão desta, definindo-se em um estudo qualitativo (este definido por Lüdke & André,
1986). A análise dos dados foi feita com a realização da análise do conteúdo (este definido
por Bardin, 2011) 3. Como critério principal para a busca de referências tem-se o uso de dados
teóricos levantados nos últimos quinze anos, pois tendem a estar atualizados, apesar de
reconhecer a importância de manter o relacionamento com bibliográficas históricas, tais como
os princípios básicos da engenharia de software envolvendo a evolução das metodologias de
projeto.
.
3
[...] um conjunto de técnicas de análise das comunicações visando a obter, por procedimentos sistemáticos e
objetivos de descrição do conteúdo das mensagens, indicadores (quantitativos ou não) que permitam a inferência
de conhecimentos relativos às condições de produção/recepção (variáveis inferidas) destas mensagens [...]
(BARDIN, 2011, p. 47)
18
4
4.1
DESENVOLVIMENTO x QUALIDADE DE SOFTWARE
A Qualidade Inserida no Contexto da Engenharia de Software
O antigo pensamento sobre o funcionamento dos processos envolvendo o
desenvolvimento de software tende a ser equivocada, a princípio, tendo em vista a sua
máxima de que a simples implementação de sequências de instruções é o fator primordial para
que o resultado final, a aplicação, seja alcançado. “A programação foi conhecida por ser uma
tarefa sofisticada que exige dedicação e pesquisas minuciosas, e uma paixão por códigos
obscuros e truques”. (WIRTH, 2008, p. 32). Entretanto, estes posicionamentos se tornaram
obsoletos logo no primeiro momento em que o termo “Engenharia de Software” esteve
presente nas primeiras discussões entre os especialistas da área de desenvolvimento, fato
ocorrido exatamente no ano 1968, durante a NATO-Sponsored conference4. De acordo com
Wirth (2008, p. 32, tradução nossa)5, “nesta conferência as dificuldades e falhas de design em
sistemas complexos foram exploradas em profundidade, e a busca por soluções iniciaram
concentradas em melhores metodologias e ferramentas”.
Em formato teórico, Pressman (2011, p. 29) definiu a engenharia de software como
“[...] aquela que abrange um processo, um conjunto de métodos (práticas) e um leque de
ferramentas que possibilitam aos profissionais desenvolverem software de altíssima
qualidade”. A partir desta definição, pode-se analisar a importância dos processos dentro do
contexto de desenvolvimento de software:
[...] são atividades fundamentais para promover uma integração entre as
diversas equipes e seus profissionais, começando com a especificação do
software (software specification)6 e o design e a implementação do software
(software design and implementation)7, finalizando com a validação do
software (software validation)8 e a evolução do software (software
evolution)9” (SOMMERVILLE, 2011, p. 28, tradução nossa).
4
O termo programação era comumente usado durante meados dos anos 1960, e essencialmente referenciado a
tarefas de codificação em computador. O termo de referência, engenharia de software, é altamente disciplinado,
uma abordagem sistemática para o desenvolvimento de software e manutenção - o que advêm logo após a
NATO-sponsored conference, em 1968. (WIRTH, 2008, p. 32, tradução nossa)
5
At that conference, the difficulties and pitfalls of designing complex systems were explored in depth, and a
search for solutions began that concentrated on better methodologies and tools. (WIRTH, 2008, p. 32)
6
A funcionalidade do software e dependências nestas operações precisam ser definidas.
7
Uma especificação para conhecer o software precisa ser produzido.
8
O software precisa ser validado para garantir que o foi produzido como o cliente solicitou.
9
O software deve evoluir para responder às novas necessidades dos clientes
19
Deste modo, pode-se perceber atentamente que um projeto de software é
interdependente entre cada um dos processos, estando as etapas de planejamento e
desenvolvimento muito próximas à qualidade de software, momento de validar se todos os
requisitos foram atendidos de acordo comas solicitações do cliente. Há diversos modelos de
processos de software que provam estas relações, tais como o modelo em cascata (waterfall
model), o desenvolvimento incremental (incremental development) e o modelo orientado a
reuso (reuse-oriented software engineering). Em todos estes modelos de processos, atividades
relacionadas à qualidade de software estão especificadas de alguma forma, podendo ser
visualizadas nos fluxos a seguir:

Modelo em Cascata: design de sistema e software (system and software design),
implementação e teste de unidade (implementation and unit testing) e teste de
sistema e integração (integration e system testing)
Figura 1 - Modelo de Processo em Cascata
(SOMMERVILLE, p. 30, 2011)

Desenvolvimento Incremental: validação (validation).
Figura 2 - Modelo de Processo de Desenvolvimento Incremental
(SOMMERVILLE, p. 33, 2011)
20

Modelo Orientado a Reuso: validação do sistema (system validation)
Figura 3 - Modelo Orientado a Reuso
(SOMMERVILLE, p. 35, 2011)
4.2
Diretrizes da Qualidade de Software
A garantia da qualidade de software tem como objetivo “[...] avaliar a aderência das
atividades executadas, padrões, processos, procedimentos, proporcionando uma avaliação
objetiva dos produtos e dos processos em relação aos padrões” (MACIEL; VALLS;
SAVOINE, 2011,p. 2). A qualidade de software tem definições genéricas, mas importantes,
que traçam a linha-base da compreensão sobre algo tão importante para o contexto do
desenvolvimento de software, sendo elas:
[...] gerenciamento da qualidade de software em que o sistema será testado a
partir de seus requisitos. [...] o time de QA (Quality Assurance) deve revisar
os testes que foram desenvolvidos e examinar os testes registrados para checar
se o teste foi realizado corretamente. [...] subjetivamente, a qualidade de um
sistema de software é largamente baseada em características não funcionais.
[...] a qualidade de software não é apenas sobre se a funcionalidade do
software foi implementada corretamente, mas também depende dos atributos
não funcionais. (SOMMERVILLE, 2011, p.656, tradução nossa)
Os modelos de qualidade de software podem ser cruciais para que este seja
desenvolvido com total apreço às necessidades do(s) cliente(s), tendo em vista a possibilidade
de se realizar medições de atributos internos, externos e de qualidade. Desta forma, o produto
final desenvolvido tem uma relação importantíssima com o usuário final, sendo este o real
analista sobre a qualidade deste. Retornando a Sommerville (2011, p. 144), este descreve de
forma sucinta os objetivos dos processos de teste envolvidos nas atividades de qualidade:

“Demonstrar ao desenvolvedor e ao cliente que o software atende a seus
requisitos.”
21

“Descobrir situações em que o software se comporta de maneira incorreta,
indesejável ou de forma diferente das especificações:”
o “Essas são consequências de defeito de software.”
o “O teste de defeito preocupa-se com a eliminação de comportamentos
indesejáveis do sistema, tais como panes, interações indesejáveis com
outros sistemas, processamentos incorretos e corrupção de dados.”
Em 1977, o guru da qualidade Jim McCall apresentou um modelo de qualidade que
ficou conhecido como o Modelo da General Electrics (General Electrics Model – GE Model /
Modelo GE), sendo este “[...] uma ponte entre os usuários e os desenvolvedores com foco no
número de fatores de qualidade que refletirá em ambos, nas visões dos usuários e nas
prioridades dos desenvolvedores”.
No Modelo GE, foram descritos três perspectivas de identificação da
qualidade de um software: Revisão de Produto (Product revision), Transição
de Produto (Product transition) e Operações de Qualidade de Produto (Quality
of product operations), possuindo hierarquias de onze fatores (factors)10 para
especificar, ainda de vinte e três critérios de qualidade (quality criteria)11 para
construir e métricas (metrics)12 para controlar. (BERANDER et al, 2005, p. 67, tradução nossa)
No ano seguinte, outro guru da qualidade, Barry W. Boehm (1978) descreveu que:
[...] modelo hierárquico da qualidade de software possui três níveis de
características: alto, intermediário e baixo, cada qual contribui em seus níveis
para a qualidade, tendo características como: correção, confiabilidade,
integridade, usabilidade, eficiência, manutenabilidade, flexibilidade,
reusabilidade, clareza, modificabilidade, documentação, resiliência,
compreensibilidade, validação, generalização e economia. (BOEHM, 1978
apud BERANDER et al, 2005, p. 8, tradução nossa)13.
10
Fatores: Eles descrevem uma visão externa do software, o que é visualizado pelos usuários.
11
Critérios de Qualidade: Eles descrevem uma visão interna do software, tal como visto pelo desenvolvedor.
12
Métricas: Eles são definidos e usados para prover uma escala e método de mensuração.
13
Quality characteristics of Boehm's quality mode model: correctness, reliability, integrity, usability, effiency,
maintainability,
flexibility,
reusability,
portability,
clarity,
modifiability,
understandability, validity, generality and economy (BERANDER et al, 2005, p. 8)
documentation,
resilience,
22
Figura 4 - Árvore de Características de Qualidade de Boehm
(BOEHM, 1978)
Cada nível possui suas características específicas, portanto podem ser individualmente
descritos da seguinte forma:

Alto Nível
Estas características representam requisitos de alto nível para avaliação da
qualidade de software.
o As-is-Utility - A medida em que a As-is utility pode ser utilizado, tal como
fácil de usar, confiabilidade e eficiência.
o Manutenabilidade (Maintainability) - Facilidade em identificar qual será a
melhor modificação a ser feita e retestá-la.
o Facilidade em alterar o software para ser inserido em um novo ambiente
(ex. novo sistema operacional)

Nível Intermediário
As características de nível intermediário são representadas por 7 fatores, os quais
juntos representam as qualidades esperadas de um software.
o Portabilidade - Na medida em que o software irá trabalhar em
computadores de diferentes configurações.
23
o Confiabilidade - Na medida em que o software executado como esperado.
o Eficiência - Uso otimizado de recursos durante a execução.
o Usabilidade - Fácil de usar.
o Testabilidade - Fácil validação, pois o software atende aos requisitos.
o Compreensibilidade - Na medida em que o software é de fácil compreensão
com a requerida proposta e estrutura.
o Flexibilidade - Quando o software é de fácil alteração a fim de atender aos
requisitos revisados.

Nível Baixo
As características de baixo nível são caracterizadas por prover os fundamentos
para definição das métricas de qualidade.
Para ser utilizado como informação, Boehm (1988) propôs um framework processos
de software orientado a risco (A risk-driven software process framework) chamado Modelo
Espiral de Boehm (Spiral Mode), em que cada volta na espiral representa uma fase do
processo de software combinando prevenção e tolerância a mudança, possibilitando que a
volta mais interna se preocupe com a viabilidade do sistema, o próximo com a definição de
requisitos, a seguir com o projeto do sistema, entre outros. Algo importante a acrescentar é a
visualização de que mudanças são um resultado de risco de projeto e inclui atividades
explícitas de gerenciamento de riscos para sua redução (mitigação de riscos).
Figura 5 - Modelo Espiral de Boehm
(BOEHM, 1988)
24
4.3
Ciclo de Vida de Desenvolvimento do Software
De acordo com Gordon & Gordon (2006), o “Ciclo de Vida do Desenvolvimento de
Sistemas (SDLC – Systems Development Life-Cycle), conhecido também com o “ciclo de vida
do software” (SDLC - Software Development Life-Cycle), refere-se aos estágios de concepção,
projeto, criação e implementação de um Sistema de Informação (SI)”. Um desdobramento
possível para SDLC é mostrado a seguir:
Figura 6 - Ciclo Básico de Desenvolvimento de Sistemas (SDLC)
(GORDON & GORDON, 2006)
Para padronizar os conceitos sobre o SDLC, foi elaborada a ISO/IEC 12207 –
Processos de Ciclo de Vida do Software, a qual tem como objetivo principal:
“[...] fornecer uma estrutura única para que o adquirente, fornecedor,
desenvolvedor, mantenedor, operador, gerentes e técnicos envolvidos com o
desenvolvimento de software utilizem uma linguagem comum que é
estabelecida na forma de processos bem definidos. A estrutura da norma foi
concebida de maneira a ser flexível, modular e adaptável às necessidades de
quem a utiliza. Para isto, ela está fundamentada em dois princípios básicos:
modularidade e responsabilidade. Modularidade, no sentido de processos com
mínimo acoplamento e máxima coesão”. (LAHOZ; SANT’ANNA, 2003, p. 2)
Enfim, o SDLC também possui classificações em seus processos, sendo elas:
primários, de apoio e organizacionais.
[...] ao utilizar a norma todo o ciclo de vida do desenvolvimento de software
será realizado, desde os requisitos até a manutenção. Os processos são
classificados em três categorias: primários – aquisição, fornecimento,
desenvolvimento, operação e manutenção -, de apoio – documentação,
gerência de configuração, garantia da qualidade, verificação, validação,
revisão conjunta, auditoria e resolução de problemas -, e organizacionais –
gerência, infraestrutura, melhoria, treinamento ou recursos humanos, gestão de
ativos e programa de reuso. (MACIEL; VALLS; SAVOINE, 2011, p. 4)
25
4.4
A Qualidade no Ciclo de Vida do Desenvolvimento de Software (SDLC)
Durante o ciclo de vida de desenvolvimento do software, diversas visões de qualidade
podem ser consideradas, e cada qual com seus atores, e como diz na ISO/IEC 9126-1, "As
tecnologias utilizadas para atingir o nível de qualidade necessário, como especificação e
avaliação de qualidade, precisam apoiar estes diversos pontos de vista.”. Esta norma descreve
um modelo de qualidade de produto de software, o qual é composto por qualidade interna e
qualidade externa – limita-se a especificar as seis características para qualidade interna e
externa, as quais são subdivididas em subcaracterísticas - e, por qualidade em uso – é, para o
usuário, o efeito combinado das seis características de qualidade do produto de software, as
quais são:

Validar a completitude de uma definição de requisitos;

Identificar requisitos de software;

Identificar objetivos de projeto de software;

Identificar objetivos para teste de software;

Identificar critérios para garantia de qualidade;

E, Identificar critérios de aceitação para produtos finais de software.
Ainda de acordo com a Norma NBR ISO/IEC 9126-1, há mudanças entre o SDLC e a
qualidade, aonde as tecnologias utilizadas para atingir o nível de qualidade necessário, como
especificação e avaliação da qualidade, precisam apoiar os diversos pontos de vista como da
qualidade interna e do desenvolvedor. A finalidade é alcançar a qualidade necessária e
suficiente para atingir as reais necessidades do usuário. Nesta visão, os estágios da SDLC
contemplados são necessidades de qualidade do usuário, requisitos de qualidade externa,
requisitos de qualidade interna, qualidade interna, qualidade externa e qualidade em uso.
Interno a estes estágios, há etapas de validação e verificação, os quais tem funções
completamente opostas, mas Sommerville (2011, p. 207, tradução nossa) descreve que “[...]
ambos são processos [...]”, tendo em vista que, de acordo com Boehm (1979), “são definidos
como”:
 “Validação: Estamos construindo o produto certo? 14”
 “Verificação: Estamos construindo o produto da forma correta? 15”
14
Validation: Are we building the right product?
15
Verification: Are we building the product right?
26
Figura 7 - Qualidade no ciclo de vida do software
(Norma NBR ISO/IEC 9126-1)
Em referência a Figura 7, os estágios da qualidade no ciclo de vida do software são
detalhados da seguinte forma:
Necessidades de Qualidade do Usuário
[...] obter um produto que satisfaça as necessidades do usuário normalmente
requer uma abordagem iterativa para o desenvolvimento de software com
feedback continuo sob a perspectiva do usuário. (Norma ISO/IEC 9126-1)
Requisitos de Qualidade Externa
[...] especificam o nível de qualidade requerido sob o ponto de vista externo.
[...] incluem requisitos derivados das necessidades de qualidade dos usuários,
incluindo os requisitos de qualidade em uso. [...] os requisitos de qualidade
externa são usados como meta para validação em vários estágios de
desenvolvimento. (Norma ISO/IEC 9126-1)
Requisitos de Qualidade Interna
[...] especificam o nível de qualidade requerido sob o ponto de vista interno do
produto. [...] os requisitos de qualidade interna são usados para especificar as
propriedades dos produtos intermediários. [...] podem incluir modelos
estáticos, dinâmicos, outros documentos e código-fonte. [...] requisitos de
qualidade interna podem ser usados como metas para validação em vários
estágios de desenvolvimento. (Norma ISO/IEC 9126-1)
27
Qualidade Interna
[...] é a totalidade das características do produto de software do ponto de vista
interno. [...] Detalhes da qualidade do produto de software podem ser
melhorados durante a implementação do código, revisão e teste. (Norma
ISO/IEC 9126-1)
Qualidade Externa Estimada (ou prevista)
[...] é a qualidade estimada ou prevista para o produto final de software, em
cada estágio de desenvolvimento e para cada característica de qualidade,
baseada no conhecimento de qualidade interna. (Norma ISO/IEC 9126-1)
Qualidade Externa
[...] é a totalidade das características do produto de software do ponto de vista
externo. [...] é a qualidade quando o software é executado, o qual é
tipicamente medido e avaliado enquanto está sendo testado num ambiente
simulado, com dados simulados e usando métricas externas. [...] durante os
testes, convém que a maioria dos defeitos seja descoberta e eliminada (sempre
quando possível) [...] (Norma ISO/IEC 9126-1)
Qualidade em Uso Estimada (ou prevista)
[...] é a visão da qualidade do produto de software do ponto de vista do
usuário[...] [...] ele mede o quanto usuários podem atingir seus objetivos num
determinado ambiente e não as propriedades do software em si. (Norma
ISO/IEC 9126-1)
A partir das comprovações teóricas sobre a inserção da qualidade dentro do ciclo de
desenvolvimento de software, torna-se possível em sua plenitude à absorção da proposta em
que a qualidade de software e as atividades de teste envolvidas possuem um valor inestimável
para o planejamento, desenvolvimento, implementação e entrega do produto de software que
se deseja modelar. Entretanto, para uma visão prática e otimizada dos requisitos envolvidos
em todo este processo, no início do Século XXI fora feita a primeira especificação sobre a
abordagem Ágil de desenvolvimento, o qual no Capítulo 5 será apresentado em detalhes, com
seus métodos e práticas, mais especificamente o método de desenvolvimento eXtreme
Programming (XP) e a prática Test-driven Development (TDD) – ambas serão importantes
para a compreensão e aprimoramento do relacionamento integrado entre Programadores e
Testadores de Software.
28
5
O AMBIENTE DE DESENVOLVIMENTO ÁGIL
5.1
Descrevendo a Metodologia Ágil
No ano de 2001, um grupo formado por dezessete desenvolvedores, produtores e
consultores de software procuravam uma alternativa aos métodos tradicionais de
desenvolvimento de software, então criaram a Aliança Ágil (Agile Alliance), fator que
culminou no estudo, planejamento e definição do Manifesto de Desenvolvimento Ágil (Agile
Manifesto). Tal documento tem como proposta base seguir doze princípios que envolvem
desde ao relacionamento com os clientes até questões técnicas que envolvem funcionalidade,
negócios, desenvolvimentos e processos ágeis. Entretanto, os valores intrínsecos a este
manifesto estão questões como: “indivíduos e interação entre eles mais que processos e
ferramentas”,
“software
em
funcionamento
mais
que
documentação
abrangente”,
“colaboração com o cliente mais que negociação de contratos e responder a mudanças mais
que seguir um plano” (AGILE ALLIANCE, 2001a).
No âmbito ágil é importante que os códigos sejam executados no mesmo
momento em que forem desenvolvidos, principalmente para longos
desenvolvimentos, pois assim os problemas não serão descobertos de forma
tardia, quando eles ficam mais caros para serem corrigidos. (BOEHM, 2004,
p. 42, tradução nossa) 16
No contexto de desenvolvimento de software, a partir de estudos de Westfechtel &
Hoek (2001), a abordagem Ágil tem uma cultura primordial para que o bom funcionamento
do ciclo seja alcançado em cada uma de suas etapas de programação.
[...] a abordagem Ágil tem como requisito uma estratégia otimista que permite
aos desenvolvedores trabalharem em paralelo, mas a maior independência
possível. Isto, entretanto, precisa ser balanceado com o princípio da filosofia
Ágil, onde os desenvolvedores precisam trabalhar com proximidade e em
conjunto, tomando cuidado em como uma pessoa afeta o trabalhar de outra”.
(WESTFECHTEL; HOEK; 2001, p. 192, tradução nossa) 17.
16
It requires that the code be developed and executed, which means that for long developments, problems will
not be discovered until late in the development cycle, when they are expensive to fix. (BOEHM, 2004, p. 42)
17
An agile approach to sodtware development requires an optimistic strategy to permit as much independent
parallel development as possible. This, however, must also be balanced with another tenet of the agile
philosophy, namely that developers should work closely together and be aware of how one person's wotk affets
another (WESTFECHTEL; HOEK, 2001, p. 192).
29
Por outro lado, Paetsch (2003) analisou princípios com uma visão a partir do cliente,
pois ele é o responsável pela existência do projeto, merecendo assim uma atenção mais
próxima sobre o processo.
[...] a verdadeira necessidade dos projetos que trabalham com os métodos
Ágeis é a de que atendam aos requisitos definidos/alterados pelo cliente.
Ainda, afirma que os princípios comuns compartilhados neste modelo de
projeto são o de promover a satisfação do cliente, adotar as mudanças de
requisitos, frequentemente fornecer softwares em funcionamento e, haver um
relacionamento próximo entre as equipes de negócio e os desenvolvedores.
(PAETSCH, 2003, p.1, tradução nossa) 18
Deste modo, prova-se de forma teórica o quão importante é a cooperação entre as
equipes que integram um projeto, pois o resultado final será entregue ao cliente, este o qual
além de avaliá-lo, fornecerá um feedback sobre o fornecedor do software que, por fim, terá a
possibilidade de aprimorar seus processos e atrair mais clientes para seu catálogo. Mas, para
uma empresa, internamente, o princípio mais valoroso quando as diretrizes da metodologia
ágil são seguidas à risca, é o fato da integração entre seus recursos humanos ter sido
aprimorada, o que tenderá a facilitar no desenrolar de projetos no futuro.
5.2
Comparação Entre Metodologia Ágil e Metodologias Tradicionais
A partir de análises percebeu-se que nas metodologias ágeis, ao invés das atividades
serem realizadas de forma individual pelas equipes - como em uma metodologia tradicional19
de desenvolvimento de software -, era preciso um trabalho em conjunto. No contexto em
questão, torna-se necessário descrever em modo comparativo entre elas, aonde é possível
iniciar pela cultura envolvida em ambas.
No modelo tradicional, é utilizada a cultura da eliminação de riscos baseada em um
planejamento, podendo ser utilizados ciclos em cascata, espiral, iterativo, entre outros. Apesar
da possibilidade de se reutilizar códigos durante a produção, as suas restrições em aceitar
18
All these approaches share some common principles: Improved customer satisfaction, adopting to changing
requirements, frequently delivering working software, and close collaboration of business people and developers.
(PAETSCH, 2003, p. 1)
19
Estas metodologias surgiram em um cenário de construção de software muito diferente do atual.
A sequência de tarefas para desenvolvimento do software era realizada em terminais burros e
mainframes, onde o custo para correção de erros ou qualquer outra alteração era muito elevado,
pois o acesso aos computadores era muito limitado e não havia ferramentas de apoio à construção
de software (PRESSMAN, 2002).
30
mudanças durante o processo devido ao contexto global trás complexidades bastante visíveis
quanto ao relacionamento com o cliente. Tal afirmação é validada por Pressman (2002),
quando expõe os critérios básicos responsáveis por um projeto complexo e com muitas
variáveis o qual, enfim, é difícil de ser gerenciado.
[...] a maneira de minimizar os problemas durante o desenvolvimento de um
software foi planejar e documentar muito bem este antes do início de seu
desenvolvimento. Esse foi um dos fatores primordiais para a existência de um
processo de gerenciamento de software baseado em documentação detalhada,
planejamento extenso e etapas bem delimitadas. (PRESSMAN, 2002)
Assim, apesar dos métodos tradicionais serem ainda os mais utilizados no mercado, um
fator importante o torna impróprio em momentos essenciais, pois o tamanho do projeto tende
a inviabilizar melhorias durante o seu andamento, pois muitos requisitos anteriormente
aprovados estão envolvidos.
Entretanto, o uso de metodologias ágeis apareceu como uma alternativa a situações
arbitrárias dentro do contexto do gerenciamento de projetos, pois suas características tendem a
otimizar o processo de desenvolvimento de todo e qualquer projeto de software, reduzindo,
principalmente, a rejeição por parte do cliente. Em seu artigo “Balancing Agility and
Discipline”, Boehm (2004, p. 25, tradução nossa) realizou comparações entre os métodos
tradicionais e os ágeis, encontrando as características distintas entre si, apesar de descrever
que uma comparação entre ambas pode ser difícil e imprecisa devido a complexidade natural
do desenvolvimento de software e suas variedades de métodos e as variáveis envolvidas. Este
levantamento resultou nas seguintes características:
 “Aplicação, incluindo objetivos de projeto, tamanho e ambiente de aplicação.”
 “Gerenciamento, incluindo relacionamento de clientes, planejamento e controle, e
projetos de comunicação.”
 “Técnicas, incluindo abordagens de definição de requisitos, desenvolvimento, e teste.”
 “Pessoais, incluindo características do cliente, características de desenvolvimento, e
cultura organizacional.”
As comparações entre os métodos tradicionais e ágeis realizadas por Boehm (2004, p. 3031, tradução nossa) são “[...] concretas e comprovam que ambas as metodologias são
importantes no contexto correto, pois o número de variáveis envolvidas podem ser diferentes,
tornando-se mais eficiente no modelo correto”. O quadro abaixo é um comparativo bastante
detalhado desta pesquisa: (BOEHM, 2004, p. 42, tradução nossa)
31
Metodologia Ágil
Metodologia Tradicional
Métodos ágeis devem ser quase inteiramente cumpridos em
Métodos tradicionais necessitam de estabilidade
ambiente in-house – de maneira caseira – ou em um
Métodos tradicionais trabalham melhor quando os requisitos
ambiente de desenvolvimento dedicado, como em nuvem
são largamente determinados em modo avançado (incluindo
(cloud solutions).
via protótipo) e em permanência estabilidade.
Esta metodologia faz com que haja um relacionamento
Métodos tradicionais também cobrem um espectro mais
próximo para com os usuários locais, mas difícil de controlar
amplo de atividades do que métodos ágeis
vários formulários de distribuição de desenvolvimento,
evolução, e uso.
Taxas de mudança na ordem de 1% dos requisitos por mês
são aceitáveis.
5.3
Os Testadores no Desenvolvimento Ágil
A partir da aceitação de metodologias ágeis para o desenvolvimento de um projeto de
software, tal como o uso do eXtreme Programming (XP) e SCRUM, é importante haver a
percepção de todos sobre como será a integração entre as equipes, tendo em vista a redução da
burocracia e a percepção de que mudanças frequentes podem acontecer por diversos motivos,
sendo o principal as solicitações do(s) cliente(s). As metodologias tradicionais são
comumente ineficientes para trabalhar com mudanças em situações assim, mesmo que haja
um sistema organizado com uma Gestão de Configuração de Software (GCS) adequada, pois
as alterações tendem a ser feitas como um todo, impedindo a visualização parcial do projeto
pelo usuário final. Assim, de modo mais eficaz, o contexto Ágil tende a trabalhar em módulos
independentes, baseados em User Stories, fazendo com que em caso de mudanças, melhorias
ou defeitos de desenvolvimento (bugs), o “reteste” possa ser rápido, sem causar impacto sobre
o projeto como um todo.
[...] os Testes Ágeis (Agile Tests) podem reduzir a quantidade de falhas nos
primeiros estágios e ainda, estes métodos de teste habilitam a possibilidade da
realização destes em todos os estágios, sendo que, entretanto, o mais
importante é que este tipo de teste é realizado em pequenas unidades (short
iterations). (KOTESKA; MISHEV, 2012, p. 122) 20
Nestas circunstâncias, os programadores tendem a atuar no desenvolvimento em
módulos, havendo assim uma agilidade no processo e uma oportunidade maior de adequação
ao cronograma e orçamento do projeto. Uma prática muito utilizada para o desenvolvimento
20
Agile software testing can help reducing the errors in the first stages... Agile software testing methods enable
testing during all stages and the most important thing is that testing is performed on small units. (KOTESKA &
MISHEV, 2012, p. 122)
32
de códigos mais eficientes e limpos é o TDD, que faz parte da metodologia de
desenvolvimento de software XP, servindo como a verdadeira conexão entre analistas de
programa e analistas de teste. Como já dito, a fim de que a qualidade do software seja tratada
com primazia, é importante haver um planejamento de testes adequado, sendo seus fluxos
executados a partir da entrega de cada módulo. De acordo com as especialistas Crispin &
Gregory (2009, p. 7), os “[...] testadores (testers) estão presentes tanto no time do cliente
(customer team), quanto no time dos desenvolvedores (developer team), o que demonstra a
importância destes profissionais em um ambiente Ágil”.
Testadores são membros integrantes do time do cliente (customer team),
auxiliando os clientes a extrair requisitos, moldar exemplos, ajudando-lhes a
expressar seus requisitos como um teste. Testadores são também parte
integrante do time dos desenvolvedores, pois testar é um componente central no
desenvolvimento ágil de software. Testadores advogam pela qualidade em nome
dos clientes e auxiliam o time de desenvolvimento em realizar as entregas com o
melhor valor para o negócio. (CRISPIN; GREGORY, 2009, tradução nossa)21
Por muito tempo o mercado de trabalho separou, literalmente, os profissionais em
questão, tendo uma visão equivocada de que o desenvolvimento de software era apenas
focado no planejamento do projeto e programação, deixando os testadores em segundo plano,
com uma visão de que apenas pertenciam a equipes de testes funcionais que tratam da análise
de defeitos de usabilidade e validação de dados. Esta é uma análise real visualizada em muitos
anos de experiência profissional, mas totalmente distante dos critérios da metodologia Ágil,
pois nesta a conexão entre desenvolvimento e testes é visualizada desde o começo.
[...] Times Ágeis tendem a ofuscar as distinções entre os profissionais,
particularmente desenvolvedores e testadores. Desenvolvedores Ágeis são
infectados por testes, e Testadores Ágeis tendem há usar muito tempo sujando
as mãos codificando. O método Ágil cresce, de modo que o papel hifenizado
testador-desenvolvedor/desenvolvedor-testador cresce 22”. (HENDRICKSON,
2007, tradução nossa)
21
Testers are integral members of the customer team, helping elicit requirements and examples and helping the
customers express their requirements as tests. Testers are also on the developer team, because testing is a central
component of agile software development. Testers advocate for quality on behalf of the customer and assist the
development team in delivering the maximum business value. (CRISPIN; GREGORY, 2009, p. 7-8)
22
Agile teams tend to blur the distinction between jobs, particularly developers and testers. Agile developers are
test infected, and Agile testers tend to spend time mucking about in code. As Agile grows, so the hyphenated
tester-developer/developer-tester role grows. (HENDRICKSON, 2007)
33
6
TÉCNICAS UTILIZADAS EM UM AMBIENTE ÁGIL
6.1
Uma Visão Sobre o eXtreme Programming (XP)
O eXtreme Programming (XP) é um composto de técnicas e métodos que tendem a
auxiliar os analistas no desenvolvimento de projetos que envolva codificação, mas mantendo
equipes de pequeno porte durante cada passo. Ainda, segundo Williams (2004, p. 1, tradução
nossa), “o XP tem duas importantes práticas, o Test-driven Development (TDD) e o Teste de
Aceitação - estas serão detalhados nos tópicos seguintes 23”.
[...] o eXtreme Programming (XP) é tanto um processo de desenvolvimento de
software quanto uma metodologia. É também um framework, pois ele pode (e
provavelmente o será) adaptado para as necessidades específicas de times,
projetos, companhias, etc. Além disso, algo importante a comentar, é o fato de
que o XP tende a ser usado em equipes com dois a doze membros, sendo
sempre recomendado manter times deste tamanho. (DUDZIAK, 1999/2000,
p.4 tradução nossa) 24
Há quatro variáveis primordiais do XP, que são o custo, tempo, qualidade e escopo.
No momento, será abordada a variável “Qualidade’ a qual contempla ações responsáveis pelas
indicações das correções necessárias no sistema, além de determinar quais práticas serão
utilizadas para testar a aplicação. Na prática, o início dos processos em XP necessita de um
contato-base com os clientes, pois estes serão os responsáveis por participar junto ao(s)
desenvolvedor(es) para definir suas User Stories em Index Cards, com estimativa de trabalho
(Ideal Engineering Time) de uma a três semanas, descrevendo o que cada módulo do projeto a
ser desenvolvido deve conter de uma forma literal e de fácil compreensão, tomando como
inspiração o modo detalhado de um caso de uso, apesar de manter cada fluxo independente,
ou seja, não há a necessidade de uma relação entre fluxos.
[...] é imprescindível saber se a User Story é passível de ser testada. A razão
para isso tem relação com os Testes Funcionais e Aceitação, estes os quais
serão resultantes destas histórias as quais irão auxiliar o cliente a verificar se o
sistema está em funcionamento conforme o planejado. (DUDZIAK,
1999/2000, p.9, tradução nossa) 25
23
The test practices discussed in this chapter come from the test-centric XP methodology. XP has two important
test practices: test-driven development (TDD) and customer acceptance testing. (WILLIAMS, 2004, p. 1)
24
eXtreme Programming (XP) is a software development process as well as a methodology. XP is also a process
framework because it can be (and most likely will be) tailored to the specific needs of teams, projects, companies
etc. (DUDZIAK, 1999/2000)
25
Another desirable property of a user story is that it is testable. The reason for this is that Functional Tests are
derived from the stories which will help the customer verifying that the system does what it is expected to.
(DUDZIAK, 1999/2000, p.9)
34
Figura 8 - Modelo Simplificado do Processo XP
(SERENA, 2007)
A Figura 8 representa um modo simplificado de visualizar o processo XP,
demonstrando de uma forma prática as principais etapas de aceitação até o lançamento
individual de versões interativas dos módulos de um projeto. A parte resultante (Small
Release) deste processo tem seu cronograma, User Stories e desenvolvedores responsáveis
definidos no Plano de Projeto (Release Plan), sendo este a parte resultante do Release
Planning. Entretanto, para que haja conhecimento sobre a eficiência das iterações (Iterations),
ou seja, saber se o que fora entregue está adequado ao planejado e o mais próximo possível ao
tempo estimado, a Velocidade (Velocity) de cada desenvolvedor precisa ser monitorada,
levando em consideração o Load Factor definido para este, pois caso esteja em desacordo,
para mais ou menos, tem-se então uma falha de projeto que precisa ser corrigida, sendo isto
possível apenas devido a estas análises.
O load factor é calculado a partir do número de horas trabalhadas dividido
pelo número de horas gastas diretamente nas tarefas pela equipe. Assim,
quanto menor o número, mais eficiente o time é. Um perfeito load factor é
2.0, o que significa que cada equipe está trabalhando em uma tarefa sem parar
quando está no trabalho. (LOVAASEN, 2001, p. 4, tradução nossa) 26
Após estas iterações, seu resultado é a Versão Final (Latest Version), os Testes de
Aceitação (Acceptance Testing) são executados a partir dos Casos de Teste (Test Cases - TC)
criados com informações das User Stories definidas e selecionadas durante o planejamento.
26
The load factor is calculated as the number of hours worked divided by the number of pair hours spent directly
on tasks. Thus, the lower the number, the more efficient the team is. A perfect load factor is 2.0, which means
that every pair was working on a task at every moment they were at work. (LOVAASEN, 2001, p. 4)
35
Em caso de rejeição de algum cenário de teste pelo encontro de algum(ns) defeito(s) (Bugs), o
ciclo retorna à iteração em que a equipe de desenvolvimento terá que corrigi-lo. Por fim, este
ciclo de testes se mantem até que todas as estórias sejam testadas com cautela e atenção, pois
deste modo será possível manter a qualidade do software desenvolvido e entregue ao final do
release (Small Release).
6.2
Uma Visão Sobre o Test-driven Development (TDD)
O Test-Driven Development (TDD) tem um papel importante em um ambiente de
desenvolvimento ágil, pois é uma prática que prioriza a realização de testes por unidade (unit
tests), tendo que ser escrito com antecedência à programação. De acordo com Hendrickson
(2008, p.1, tradução nossa), “a prática TDD vai além do concreto, sendo algo mais detalhado
e que permite atingir às expectativas sobre o comportamento do código para guiar a
implementação, muito mais do que servir como guia para os testes em si
27
”. Este pode
também auxiliar os desenvolvedores na entrega de projeto no prazo, com menos defeitos
(bugs) e com códigos mais limpos e otimizados, já que o planejamento dos testes faz com que
àqueles conheçam mais sobre o que se espera como resultado. Sob a visão de Vicente (2010,
p. 50), “[...] a execução dos testes de forma automatizada pode ajudar os desenvolvedores a
determinar quando novas funcionalidades estão completas ou se alguma funcionalidade
existente está com algum defeito”.
Martin (2007, p. 1, tradução nossa), os praticantes do TDD devem seguir as seguintes
regras:
 “Você não pode escrever um código para produção sem primeiro escrever um código
que falhe no teste unitário;”
 “Você não pode escrever mais testes unitários do que o necessário para falhar.”
 “Você não pode escrever mais códigos para produção do que o suficiente para fazer o
teste unitário falho ser aprovado.”
Antes do início dos trabalhos de codificação do TDD pelos programadores, há
questões analíticas a serem tratadas pela equipe a partir de sugestões dos patrocinadores do
projeto. Este brainstorm será a base para o planejamento e codificação dos testes unitários,
englobando etapas como discussão dos requisitos, refinamento dos testes e desenvolvimento
27
Practicing Test Driven Development is much more about setting concrete, detailed expectations in advance,
and allowing those expectations of code behavior to guide the implementation than it is about testing
(HENDRICKSON, 2008, p.1)
36
do código, para então, enfim, implementar o código e, em seguida, testá-lo de forma
exploratória. Todo este contexto foi denominado como Acceptance Test-Driven Development
(ATDD), tendo seu ciclo definido pelo Dr. James Shore e aprimorado por Grigori Melnick,
Brian Marick e Elisabeth Hendrickson.
Test-driven Development é uma disciplina que ajuda o profissional
desenvolvedor de software a trabalhar com códigos limpos, flexíveis e
entregues no tempo. (MARTIN, 2007, p. 32, tradução nossa) 28
Figura 9 - Modelo do Ciclo ATDD (Acceptance Test-driven Development)
(HENDRICKSON, 2008)
Com o planejamento dos métodos a serem utilizados na automatização dos testes, a
codificação dos programas tende a ser postergada, pois deste modo o desenvolvedor poderá
ter uma visão ampliada do que deve ser feito. Deste modo, uma questão levantada por
Gatezowski (2015, p. 8, tradução nossa) envolve este caso como um todo, pois "Por quantas
vezes temos que invocar uma aplicação para ter certeza de que esta funciona corretamente?"
29
. As ferramentas de automação de testes criam uma biblioteca chamada “Test List”, a qual
possui todos os métodos (Test Method) a serem utilizados durante a execução dos testes,
28
Test-driven development is a discipline that helps professional software developers ship clean, flexible code
that works, on time. (MARTIN, 2007, p. 32)
29
How many times would we have to invoke the application to make sure every operation works correctly?
(GATEZOWSKI, 2015, p. 8)
37
reduzindo assim a necessidade de inserir as chamadas destes diretamente na classe principal.
Com a reutilização de código dos métodos de teste implementados, torna-se possível garantir
a isonomia quando executados por diversas vezes, pois sem manipulação humana a cada teste,
a testabilidade torna-se mais viável e a garantia de qualidade é ampliada consideravelmente.
Figura 10 - Ciclo do Test-driven Development (TDD)
(JEFFRIES; MELNIK, 2007 apud VICENTE, 2010, p. 48)
A partir do ciclo de funcionamento do TDD exposto na Figura 10, é possível perceber
a simplicidade do fluxo de implementação desta técnica de validação, aonde são verificados
os caminhos de falha, aprovação (Passa) e refatoração para cada caso de teste criado. No
primeiro, é preciso realizar testes que validem as regras de negócio, inserindo dados
incorretos ou que possam sobrecarregar o sistema, conferindo assim qual é o nível de
integridade do que fora desenvolvido. Em seguida, é preciso confirmar o “caminho feliz”,
executando a aplicação com dados verídicos e que precisam ser aceitos durante os testes,
confirmando que as regras de negócio foram utilizadas de forma correta na implementação. E,
por fim, há sempre a possibilidade de se otimizar uma aplicação a fim de deixar-lhe mais
eficiente, o que provavelmente resultará em um projeto mais eficaz, utilizando menos
recursos como memória RAM (Random Access Memory), armazenamento permanente (disco
rígido), armazenamento em nuvem (Cloud Computing), recursos de rede, entre outros.
38
6.3
Uma Visão Sobre os Testes de Aceitação (UAT)
Durante o desenvolvimento de qualquer produto é preciso estar atento aos critérios de
qualidade, principalmente àqueles que refletem diretamente à percepção dos clientes, tendo
em vista que estes são os contratantes ou, os compradores, sendo de toda forma, o usuário
final. A partir deste critério, é fácil a visualização de que a aceitação de um produto após o
seu desenvolvimento deve ser um processo crítico e capaz de detectar a completude do
projeto de acordo com os critérios desejados. E, esta aprovação requere a execução de
validações e verificações com uma visão peculiar, esta chamada de “Testes de Aceitação”.
[...] Teste de Aceitação (User Acceptance Testing – UAT) é o estágio final do
processo de teste antes que o sistema seja liberado para uso operacional. O
sistema é testado com dados reais fornecidos pelo mantenedor ao invés de
dados hipotéticos. O teste de aceitação pode revelar erros e omissões na
definição dos requisitos do sistema, uma vez que o dado real exercita o
sistema de diferentes maneiras a partir do dado de teste. Ele também pode
revelar problemas de requisitos, onde as facilidades do sistema realmente não
atendem às necessidades do usuário ou o desempenho do sistema não é
aceitável. (FERREIRA, 2007, p. 185)
O teste de aceitação é um teste formal conduzido para determinar se o Sistema
satisfaz ou não os critérios de aceitação (os critérios de sistema precisam ser
satisfeitos para serem aceitos pelo cliente) e para habilitar o cliente para
determinar se ele aceita ou não o Sistema. (IEEE, 1990, tradução nossa) 30
Diversos autores tratam de forma teórica sobre os testes de aceitação, mas em sua
maioria o contexto de análise é muito similar ao descrito por Bentley & Bank (2005), os quais
comentam sobre as formas de nomenclatura desta atividade, quais são os profissionais
envolvidos durante a execução dos cenários de teste e as expectativas para quando o resultado
final for alcançado.
“[...] o Teste de Aceitação de Usuário (UAT) também pode ser chamado de
Beta testing, Teste de Aplicação (application testing) e Teste de Usuário (enduser testing). Este tipo de teste tende a utilizar dados reais de negócio a partir
dos Sponsors e da equipe de TI para que seja possível desenhar os casos de
teste a fim de que tudo seja executado de forma mais precisa. Entretanto, não
se pode utilizar de usuários randômicos para a execução dos testes, é preciso
haver uma variedade de níveis de conhecimento que participem ativamente e
em um ambiente controlado. (BENTLEY; BANK; 2005, tradução nossa, p. 1)
31
30
Acceptance testing is formal testing conducted to determine whether or not a system satisfies its acceptance criteria (the
criteria the system must satisfy to be accepted by a customer) and to enable the customer to determine whether or not to
accept the system. (IEEE, 1990)
31
User Acceptance Testing is also called Beta testing, application testing, and end-user testing. [...] Performance,
stress, and load testing are all major undertakings and will require substantial input from the business sponsors
39
[...] Uma ocorrência comum na UAT é quando os usuários começam a
trabalhar com a aplicação e eles descobrem que não está fazendo exatamente o
que eles queriam que estivesse fazendo ou está e, embora correto, não é o
ideal. (BENTLEY; BANK; 2005, tradução nossa, p. 1) 32
[...] durante os testes de aceitação é quando o controle de mudança (sendo esta
uma das atribuições da Gerência de configuração de software) precisa ser
seriamente forçado, mas ee vai além do escopo estipulado. Basta dizer que o
aumento de escopo é especialmente perigoso nesta fase final e deve ser
evitado. (BENTLEY; BANK; 2005, tradução nossa, p. 1) 33
Durante os testes de aceitação em maior escala é preciso planejar com maior cautela os
casos de teste e como estes deverão ser executados, pois o cliente estará condicionado a atuar
efetivamente nos processo de validação do produto. É preciso estar ciente de que serão
testadas não apenas regras de negócio, mas também a performance do sistema e como ele se
comporta em situações inesperadas, tendo em vista os perfis distintos dos usuários (experts,
leigos, etc). A cada etapa iniciada torna-se necessário que o líder do projeto esteja atento a
esta etapa do ciclo de desenvolvimento, pois qualquer dano tenderá a impactar mais no
orçamento e no uso de recursos humanos e tecnológicos. Então, é neste momento que a visão
conjunta de programadores e testadores ao início do projeto, durante a etapa de
implementação do código, tende a ter um valor acima do normalmente percebido por ambos.
O relacionamento entre estes profissionais é essencial a fim de mitigar os riscos logo nos
primeiros passos, e o uso de metodologias ágeis auxiliam muito no comprometimento de
ambos para que o sucesso seja alcançado.
Com o intuito de amplificar ainda mais este comparativo, é viável a relação da questão
com o Modelo em V (V-Model), “[...] incorpora o teste dentro de todo o ciclo de vida do
desenvolvimento de software [...]” (BENTLEY; BANK, 2005, p. 4, tradução nossa). Neste, é
possível visualizar quão importante significa cada fluxo do SDLC, exibindo o relacionamento
and IT staff in setting up a test environment and designing test cases that can be accurately executed. Because of
this, these tests are sometimes delayed and made part of the User Acceptance Testing phase. [...] UAT cannot be
random users playing with the application. A mix of business users with varying degrees of experience and
subject matter expertise need to actively participate in a controlled environment. (BENTLEY; BANK, 2005, p.
1)
32
A common occurrence in UAT is that once the business users start working with the application they find that it doesn’t do
exactly what they want it to do or that it does something that, although correct, is not quite optimal. (BENTLEY; BANK,
2005, p. 1)
33
During UAT is when change control must be most seriously enforced, but change control is beyond the scope of this paper.
Suffice to say that scope creep is especially dangerous in this late phase and must be avoided. (BENTLEY; BANK, 2005, p.
1)
40
entre as etapas e deixando claro que, em caso de falhas durante os testes de aceitação, todo o
processo terá que regredir para a especificação de requisitos a fim de afirmar a solicitação do
cliente para que seja recodificado (correção do defeito), fazendo assim com que todo o projeto
entre em uma possível rota de descumprimento ao cronograma, o que gerará maiores custos
ao negócio.
Figura 11 - Modelo em V do Teste de Software
(CRAIG e JASKIEL, 2002)
Na Figura 11, é possível visualizar V-Model e o pleno relacionamento entre as etapas
de Desenvolvimento e de Teste de Software.
[...] a execução do “V” inicia de baixo para cima, da esquerda para a direita,
descrevendo a sequência básica do desenvolvimento e das atividades de teste.
O modelo destaca a existência de diferentes níveis de testes e descreve o
caminho de cada diferente fase do desenvolvimento [...] (BENTLEY; BANK,
2005, p. 4, tradução nossa) 34
De acordo com Dias Neto (2007), o V-model defendido por Craig & Jaskel (2002) descreve
que “o planejamento e projeto de testes deve ocorrer na sequência oposta, de cima para
baixo”:
1. “Inicialmente é planejado o teste de aceitação a partir do documento de requisitos;”
2. “Após isso é planejado o teste de sistema a partir do projeto de alto nível do software;”
3. “Então, ocorre o planejamento dos testes de integração a partir o projeto detalhado;”
4. “E por fim, o planejamento dos testes a partir da codificação.”
34
[...] incorporates testing into the entire software development life cycle. In a diagram of the V-Mode*l, the V
proceeds down and then up, from left to right depicting the basic sequence of development and testing activities.
The model highlights the existence of different levels of testing and depicts the way each relates to a different
development phase. (BENTLEY; BANK, 2005, p. 4)
41
7
CONSIDERAÇÕES FINAIS
Toda esta análise sobre a qualidade e seus processos dentro do contexto de
desenvolvimento de software tem, indubitavelmente como resultado, o reconhecimento de sua
importância para com todo o ambiente e seus atores, sejam eles internos ou externos,
provando também aos programadores que o nível de relacionamento e dependência entre estes
e os times de qualidade de software é mais alto do que aparenta ser durante o cotidiano.
Entretanto, é preciso ter o conhecimento de que, como explicitado por Li (1990, p.3, tradução
nossa)35, “o teste de software não deve ser confundido com atividades de validação de código
(debugging), pois é um processo de encontrar erros “desconhecidos” aonde antes apenas havia
erros ‘conhecidos’”. O objetivo da atividade de teste não é apenas o de encontrar erros em um
software caso este não faça o que devia fazer, mas se o fizer devem-se buscar defeitos e mau
funcionamento.
Desta forma, a proposta de auxiliar os programadores na visualização da importância
das atividades de teste está em cada uma das linhas deste artigo, tendo como papel principal,
provar aos programadores a importância das atividades de teste e dos analistas de
qualidade/testadores no contexto do desenvolvimento de software. O modo encontrado para
isso remete a explicações teóricas sobre como a qualidade está inserida no ciclo de
desenvolvimento de software (SDLC), a partir de seus modelos de processo e análises sobre o
contexto de desenvolvimento sob os aspectos das metodologias Ágeis, pois nestas, estes
profissionais atuam com funções agregadas, muito além da programação, tendo em vista que a
simples existência de User Stories (estórias) – na eXtreme Programming – havendo aqui uma
similaridade para com os casos de uso (use cases), muito usados nos processos de
desenvolvimento e de testes funcionais.
Os Testes Ágeis trazem a tona o relacionamento dos programadores às atividades de
teste, pois o desenvolvimento de roteiros para que se possa iniciar a implementação de código
revela a necessidade de adequação ao princípio da criação de casos de teste (test cases), pois
mesmo quando automatizados, cada etapa finalizada passará pelo crivo de atividades de testes
unitários (unit tests - UT), demonstrando assim que toda a tese que conteste a importância dos
profissionais de teste é inadequada e desnecessária, desmistificando o preconceito para com
estes.
35
Software testing should not be confused with software debugging. The former is a process of finding
"unknown" errors whereas the latter a process of removing "known" errors. […] the objective of testing is to find
errors in a software and to see not only if this software does not do what it is supposed to do (i.e. a deficiency),
but if it does what it is not supposed to do (i.e. a malfunction). (LI, 1990, p. 3)
42
REFERÊNCIAS
AGILE ALLIANCE, Manifesto For Agile Software Development, 2001a, tradução:
Manifesto para o desenvolvimento ágil de software, 2001a. Disponível em:
http://manifestoagil.com.br/. Acesso em: 08 out. 2015.
BARDIN, L., Análise de conteúdo, p. 47, São Paulo: Edições 70, 2011, ISBN: 8562938041.
BASTOS, Anderson et al. Base de conhecimento em testes de software, 2007, pg. 41,
I.S.B.N.: 8599102893.
BENTLEY, John E.; BANK, Wachovia. Software Testing Fundamentals—Concepts,
Roles, and Terminology, Planning, Development and Support, Paper 141-30, SUGI 30,
Volume 30, Charlotte, NC, 2005.
BERANDER, Patrik, et al., Software quality attributes and trade-offs, Blekinge Institute of
Technology, June 2005. Disponível em:
http://www.uio.no/studier/emner/matnat/ifi/INF5180/v10/undervisningsmateriale/readingmaterials/p10/Software_quality_attributes.pdf. Acesso em: 19 de out. 2015.
BOEHM, B., Software Engineering Economics, Prentice-Hall, 1981.
BOEHM, B. e TURNER, R. Balancing Agility and Discipline, p. 25,30,31,42, Boston,
Addison-Wesley, 2004, ISBN ISBN 0-321-18612-5. Disponível em:
http://ptgmedia.pearsoncmg.com/images/9780321186126/samplepages/0321186125.pdf.
Acesso em: 25 out. 2015.
CAETANO, Cristiano. Melhores Práticas na Automação de Testes. Revista Engenharia de
Software Magazine, Ed. 5, p. 42-47, 2008. Disponível em:
http://www.devmedia.com.br/artigo-engenharia-de-software-5-melhores-praticas-naautomacao-de-testes/10249. Acesso em: 24 set. 2015.
CRAIG, R.D., JASKIEL, S. P., Systematic Software Testing, Artech House Publishers,
Boston, 2002.
CRISPIN, Lisa; GREGORY, Janet. Agile Testing: A Practical Guide For Testers and
Agile Teams, 1st edition, The Addison Wesley Signature Series, A Mike Cohn Signature
Book, Pearson Education Inc., 2009. Disponível em: http://chellie.com.au/blog/wpcontent/uploads/2013/08/Addison-Wesley-Agile-Testing-A-Practical-Guide-for-Testers-andAgile-Teams-2009.pdf. Acesso em: 08 out. 2015.
DIAS NETO, Arilo C. D., Introdução a Teste de Software, In: Qualidade de Software:
Entenda os principais conceitos sobre Testes e Inspeção e Software, Engenharia de Software
Magazine, Ano 1, Edição 1, Edição Especial, DevMedia, 2007. Disponível em:
http://www.devmedia.com.br/artigo-engenharia-de-software-introducao-a-teste-desoftware/8035#ixzz3r6uzKKVH. Acesso em: 10 nov. 2015.
DUDZIAK, Thomas. eXtreme Programming An Overview - Methoden und Werkzeuge
der Softwareproduktion (WS), p. 4, 1999/2000. Disponível em:
http://csis.pace.edu/~marchese/CS616/Agile/XP/XP_Overview.pdf. Acesso em: 25 set. 2015.
FERRARI, Sandra. Proposta de Metodologia Para Controle de Qualidade em Uma
Fábrica de Software, Tese de Doutorado, Programa de Pós-Graduação em Engenharia de
Produção, Universidade Federal de Santa Catarina, 2007, p. 185
43
GAŁĘZOWSKI, Grzegorz. Test-Driven Development: Extensive Tutorial, Leanpub.com,
Creative Commons Attribution 3.0 Unported License, 03 de Setembro de 2.015. Disponível
em: http://leanpub.com/tdd-ebook. Acesso em: 08 set. 2015.
GORDON, Steven R.; GORDON, Judith R. Sistemas de Informação Uma Abordagem
Gerencial, LTC, 3ª edição, 2006, 377 páginas, ISBN 8521614799, 9788521614791.
HENDRICKSON, Elisabeth. Driving Development with Tests: ATDD and TDD, Quality
Tree Software, Inc., 2008. Disponível em: http://testobsessed.com/wpcontent/uploads/2011/04/atddexample.pdf. Acesso em: 08 set. 2015.
HENDRICKSON, Elisabeth. Tester Developers, Developer Testers, Test Obsessed, 2007.
Disponível em: http://testobsessed.com/2007/01/tester-developers-developer-testers/. Acesso
em: 12 out. 2015.
HUSTON, Tom. What is Agile Testing? A Brief Overview of the Agile Approach to
Software Development and Testing, SmartBear Software, 2015. Disponível em:
http://smartbear.com/allresources/articles/whatisagiletesting/. Acesso em: 21 set. 2015.
IEEE (1990). IEEE Standard 610.12-1990, IEEE Standard Glossary of Software
Engineering Terminology.
JEFFRIES, R.; MELNIK, G., Guest editor's introduction: TDD-the art of fearless
programming, IEEE Software, v. 24, n. 3, p. 24-30, 2007.
LI, Eldon Y., Ph. Software Testing In A System Development Process: A Life-Cycle
Perspective, Journal of Systems Management, 41 (8), August 1990, 23-31. Disponível em:
http://www.cob.calpoly.edu/~eli/pdf/jsm-90.pdf. Acesso em: 21 out. 2015.
LAHOZ, Carlos;SANT'ANNA, N. Os padrões ISO/IEC 12207 e 15504 e a modelagem de
processos da qualidade de software, Anais, III Workshop dos Cursos de Computação
Aplicada do INPE, p. 2, 2003 . Disponível em: http://mtcm18.sid.inpe.br/col/lac.inpe.br/worcap/2003/10.20.14.01/doc/LahozWorkcap_versaofinal.pdf.
Acesso em: 22 out. 2015.
KOTESKA, Bojana; MISHEV, Anastas. Agile Software Testing Technologies in a Large
Scale Project, Faculty of Sciences, University of Novi Sad, Novi Sad, Serbia, 2012, p. 122,
ISBN 978-86-7031-200-5. Disponível em: http://ceur-ws.org/Vol-920/p121-koteska.pdf.
Acesso em: 08 out. 2015.
LOVAASEN, G. Brokering with eXtreme Programming, 2001, p. 4, XP Universe
Conference Papers. Disponível em:
http://cf.agilealliance.org/articles/system/article/file/983/file.pdf. Acesso em: 08 out. 2015.
MACIEL, Ana C. F., VALLS, Carmem, SAVOINE, Márcia M. Análise da Qualidade de
Software Utilizando as Normas 12207, 15504, ISO 9000-3 e os Modelos CMM/CMMI e
MPS.BR, Revista Científica do ITPAC, Araguaína, v. 4, n. 4, Pub. 5, p. 4, Outubro 2011,
ISSN 1983-6708.
MARTIN, Robert C. Professionalism and Test-Driven Development, IEEE Software, IEEE
Computer Society, Maio/Junho 2007, p. 32-36. Disponível em: http://www-public.itsudparis.eu/~gibson/Teaching/CSC7302/ReadingMaterial/Martin07.pdf. Acesso em: 08 set.
2015.
NBR ISO/IEC 9126-1: 2003, Engenharia de Software – Qualidade de produto, ABNT –
Associação Brasileiras de Normas Técnicas, 21 páginas.
44
PRESSMAN, Roger S. Engenharia de software. 5. ed. São Paulo: Makron Books, 2002.
872p.
PRESSMAN, Roger S. Engenharia de software: uma abordagem profissional, 7, p. 29,
AMGH Editora Ltda., Porto Alegre, 2011. 780p, I.S.B.N. 9788563308337.
SERENA SOFTWARE. An Introduction To Agile Software Development, Junho 2007.
Disponível em: http://www.serena.com/docs/repository/solutions/intro-to-agile-devel.pdf.
Acesso em: 25 set. 2015.
SOMMERVILLE, Ian. Software Engineering, 9th. edition, 2011, p. 28,30,33,35,656,657,
ISBN-13: 978-0-13-703515-1, ISBN-10: 0-13-703515-2.
SOMMERVILLE, Ian. Engenharia de Software, 9ª edição, Pearson, Prentice Hall, São
Paulo, SP, 2011, tradução OLIVEIRA, Kalinka; BOSNIC, Ivan, p.32-33,144, ISBN 978-857936-108-1.
VICENTE, André A., Definição e gerenciamento de métricas de teste no contexto de
métodos ágeis, Tese de Mestrado, Instituto de Ciências Mateáticas e de Computação ICMC/USP, Universidade de São Paulo, São Carlos, SP, p. 50, Março de 2.010.
WESTFECHTEL, Bernhard; HOEK, André V. D., Software Configuration Management,
Springer Science & Business Media, p. 192, ICSE Workshops SCM 2001 and SCM 2003,
Toronto, Canada, May 14-15, 2001, and Portland, OR, USA, May 9-10, 2003. Selected
Papers, Volumes 10-11, 273 pages, ISSN 0302-9743, ISBN 3-540-14036-0 Springler-Verlag
Berllin Heidelberg New York.
WILLIAMS, Laurie. Agile/Automated Testing, North Carolina State University, 2004.
Disponível em: http://agile.csc.ncsu.edu/SEMaterials/AgileTesting.pdf. Acesso em: 21 set.
2015.
WIRTH, Niklaus. A Brief History of Software Engineering, ETH Zürich, IEEE Annals of
the History of Computing, IEEE Computer Society, p. 32, 2008. Disponível em: http://wwwpublic.int-evry.fr/~gibson/Teaching/CSC7003/ReadingMaterial/Wirth08.pdf. Acesso em: 17
out. 2015.

Documentos relacionados