Download Agile Teaching Practices- Using TDD and BDD in Software Development Teaching

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Agile Teaching Practices: Using TDD and BDD in Software
Development Teaching
Fabio G. Rocha
Layse Santos Souza
Universidade Tiradentes; ITP
Aracaju, SE
[email protected]
Universidade Federal de Sergipe; GPITIC
Aracaju, SE
[email protected]
Thiciane Suely C. Silva
Guillermo Rodríguez
Universidade Tiradentes; GPITIC
Aracaju, SE
[email protected]
ISISTAN (UNICEN-CONICET) Research Institute
Tandil, Argentina
[email protected]
ABSTRACT
1
In this paper, we aimed to analyze the application and contribution of the use of Test-Driven Development (TDD) and BehaviorOriented Development (BDD) in Software Engineering teaching. As
empirical research, we presented an experiment conducted in the
Software Engineering Laboratory (LES) course of a Private University (Tiradentes University) in the Bachelor of Computer Science
and Information Systems courses. This experiment demonstrated
the fundamentals in verifying the learning difficulties of students.
Collected data were subjected not only to quantitative analysis but
also to appropriate statistical analysis. The results showed a reduction in student absences, higher student satisfaction rate and higher
grades in the courses. Furthermore, our approach allowed students
to deliver a product in a short period, representing a possibility of
adoption of BDD due to their successful learning experience.
O ensino de Engenharia de Software tem sido um tema amplamente
debatido, Dawson [1] e Regev et al. [2] afirmam que os projetos
utilizados no ensino se afastam da realidade, formando assim, alunos
com pouco preparo para o mercado de trabalho.
Conforme Lethbridge et al. [3] as empresas tem, por vezes, que
complementar os conhecimentos dos alunos com treinamentos
para prover as habilidades necessárias para o desenvolvimento de
software. De acordo com Yamaguti et al. [4] na atualidade há um
grande desafio no ensino de Engenharia de Software no Brasil, em
razão de uma demanda por profissionais que sejam habilitados e
capacitados ao desenvolvimento de software de forma eficiente.
Ainda conforme Yamaguti et al. [4] abordagens inovadoras devem ser adotadas para permitir a integração de conteúdos por meio
da interdisciplinaridade. Assim, este estudo teve como objetivo
analisar a aplicação e a contribuição do uso do Desenvolvimento
Orientado por Testes (TDD) e Desenvolvimento Orientado por
Comportamento (BDD) no processo de ensino de Engenharia de
Software nos cursos de Bacharelado em Sistemas de Informação e
Ciências da Computação na disciplina de Laboratório de Engenharia
de Software (LES) no quarto período (segundo ano) para uma tarefa
de desenvolvimento de software, a fim de atender às mudanças de
requisitos durante o desenvolvimento do projeto.
Este experimento evidenciou os princípios necessários para a
verificação das dificuldades dos alunos na aprendizagem. Assim, as
abordagens realizadas nas análises foram quantitativa e qualitativa
empregando e relacionando os dados obtidos. Com esse experimento foi perceptível que houve uma redução no número de faltas
dos alunos, maior taxa de satisfação dos alunos e maiores notas no
curso, além da entrega de um produto em um curto espaço de tempo
comprovado através do sucesso da aprendizagem destes alunos com
a adoção do BDD.
Apesar do trabalho ter sido feito de modo colaborativo, as avaliações foram feitas tanto individualmente quanto em grupo, permitindo que o aluno aprendesse todos os aspectos do processo de
desenvolvimento do currículo. As questões de pesquisa adotadas
foram:
CCS CONCEPTS
• Software and its engineering; • Software creation and management; • Software development techniques; • Object oriented development;
KEYWORDS
BDD, TDD, Software Engineering Education, Learning Experience,
Agile Software Developlment
ACM Reference Format:
Fabio G. Rocha, Layse Santos Souza, Thiciane Suely C. Silva, and Guillermo
Rodríguez. 2019. Agile Teaching Practices: Using TDD and BDD in Software
Development Teaching. In XXXIII Brazilian Symposium on Software Engineering (SBES 2019), September 23–27, 2019, Salvador, Brazil. ACM, Bahia,
BA, Brazil, 10 pages. https://doi.org/10.1145/3350768.3351799
Permission to make digital or hard copies of all or part of this work for personal or
classroom use is granted without fee provided that copies are not made or distributed
for profit or commercial advantage and that copies bear this notice and the full citation
on the first page. Copyrights for components of this work owned by others than ACM
must be honored. Abstracting with credit is permitted. To copy otherwise, or republish,
to post on servers or to redistribute to lists, requires prior specific permission and/or a
fee. Request permissions from [email protected].
SBES 2019, September 23–27, 2019, Salvador, Brazil
© 2019 Association for Computing Machinery.
ACM ISBN 978-1-4503-7651-8/19/09. . . $15.00
https://doi.org/10.1145/3350768.3351799
INTRODUÇÃO
(1) O que é preciso ensinar aos alunos para lidar de forma rápida
e eficaz com mudanças de requisitos durante o desenvolvimento do projeto?
SBES 2019, September 23–27, 2019, Salvador, Brazil
Rocha et al.
(2) Como avaliar o desempenho individual ao ensinar um curso
respaldado em projeto baseado no TDD e no BDD?
Para realizar o experimento, 18 alunos dos cursos de Bacharelado em Sistemas de Informação e Ciências da Computação foram
divididos em 3 grupos de 6 alunos. Cada grupo tinha como tarefa o
desenvolvimento de um produto, o qual deveria ser desenvolvido
em um período de oito semanas. A fim de averiguar nosso objetivo,
um grupo não utilizou nenhuma das práticas ágeis, o segundo grupo
utilizou TDD e o terceiro grupo utilizou BDD.
Os resultados apresentam indícios de que o uso do BDD melhora
a capacidade de desenvolvimento de software do discente, bem
como resulta em um melhor aprendizado no processo de software,
e depois de praticá-los de forma efetiva em curto tempo, seguiu-se
em entregas com um menor número de falhas.
O restante do artigo está organizado da seguinte forma: a Seção 2
apresenta a fundamentação teórica sobre as práticas ágeis adotadas
no experimento. A Seção 3 expõe os trabalhos relacionados. A Seção
4 exibe a proposta da disciplina. A Seção 5 apresenta a metodologia
aplicada para a condução do estudo, o planejamento e os resultados
obtidos. A Seção 6 expressa o relato da experiência. A Seção 7
apresenta a discussão sobre os resultados. A Seção 8 manifesta as
lições aprendidas e, por fim, a Seção 9 expõe as considerações finais.
2
PRÁTICAS ÁGEIS
As práticas ágeis, conforme Cohn [5], são essenciais para a entrega
de produtos de forma sistemática e incremental. Assim, equipes
ágeis, vem utilizando, com sucesso, práticas consolidadas como o
Test Driven Development (TDD), refatoração, posse coletiva, integração continua, entrega continua, programação em pares e também
o Behavior Driven Development (BDD) [6].
2.1
TDD
O Desenvolvimento Orientado por Testes (TDD) é uma técnica de
programação que visa entregar um produto de qualidade em um
curto período de tempo. Dessa forma, apresenta como metas agir de
forma preventiva, prevenir possíveis erros e facilitar o entendimento
dos requisitos do sistema [7]. Idealizado por Kent Beck como parte
da Metodologia XP, inicialmente, era descrito como uma prática do
XP necessária para análises e testes que permitiam a refatoração e
a integração contínua.
Conforme Bissi et al. [8] o TDD vem ganhando popularidade
para além do XP, além disso, os autores apontam para um aumento
significativo da qualidade ao se utilizar esta prática no desenvolvimento de software. O TDD é a prática ágil mais utilizada no setor
de desenvolvimento de software, em partes pela simplicidade do
seu ciclo de vida [8], Figura 1, que também traz praticidade para
o desenvolvimento, iniciando pela criação de um teste de unidade
falho, visando garantir que o teste funciona e captura o erro, assim,
o foco é que o desenvolvedor conheça o erro/problema para que
possa implementar uma solução funcional que faça a correção, e
posteriormente, esta solução evolui por meio da refatoração.
Além disso, de acordo com Jazen e Saiedian [9], o TDD é uma
estratégia que requer a escrita de testes automatizados antes do
desenvolvimento do código funcional e suas iterações com a intenção de verificar se estes estão corretos, completos e qual o seu
nível de qualidade. Apesar de surgir como parte do método XP, o
Figure 1: Ciclo do TDD
TDD tem recebido atenção como uma prática independente, sendo
adotado por outros métodos e possuindo diversas ferramentas para
o suporte ao TDD em várias linguagens de programação. Também
foram escritos inúmeros livros que definem seu conceito. Além
disso, pesquisadores e educadores começaram a analisar os efeitos
do TDD na redução de defeitos e melhorias na qualidade dos ambientes acadêmicos e profissionais, e na integração desta estratégia
nos cursos de Bacharelado em Sistemas de Informação, Ciências da
Computação e Engenharia de Software. De acordo com D. North
[10] a utilização do TDD gerou alguns questionamentos, como:
Quais seriam os testes iniciais? O que deve ser testado? Como entender a falha de um teste? Tais questionamentos acabam levando
ao surgimento de dúvidas e, consequentemente, impactando no
desenvolvimento. Para solucionar esse problema North apresenta
o Desenvolvimento Orientado por Comportamento (BDD), que
tem como base o TDD e o Desenvolvimento Orientado a Testes de
Aceitação (ATDD).
2.2
BDD
O BDD foi idealizado por D. North [10] como uma resposta aos
problemas no TDD. Com o BDD é possível extrair as especificações
fornecidas pelo cliente durante o levantamento dos requisitos. Em
vista disso, é possível afirmar que o TDD progrediu para o BDD com
os seguintes questionamentos: Por onde começar? O que testar? O
que não testar? Quando testar? Como nomear os testes? Por que
um teste falha?
O BDD difere de outras abordagens ao descrever um comportamento do sistema na perspectiva de seus stakeholders, em todos
os níveis de granularidade [10], por assegurar que o foco em tal
descrição do comportamento do sistema proporciona uma melhor
comunicação.
A Figura 2 descreve como deve ser o ciclo do BDD. Primeiramente, é indispensável escrever um teste para descrever o comportamento esperado, logo o teste deve falhar porque o código
ainda não existe. Depois é necessário escrever o código para criar
o comportamento esperado descrito pelo teste. E, sucessivamente,
é fundamental reescrever (refatorar) o código para que este tenha
Teaching Agile with TDD and BDD
Figure 2: Ciclo do BDD
maior qualidade uma vez que o teste vai garantir que o comportamento continue de acordo com o esperado.
Smart [11] destaca que o BDD possui benefícios como redução
do desperdício, comunicação, redução de custo, mudança mais fácil e segura, e releases mais rápidas. Moraes [12] desaponta algumas vantagens do BDD, por exemplo, comunicação entre equipes,
visão do todo, compartilhamento de conhecimento e documentação
dinâmica. Portanto, o BDD é uma técnica de especificação que vincula os requisitos funcionais ao código fonte através da conexão
da representação textual dos requisitos aos testes automatizados.
Deste modo, pode-se confirmar que o BDD estende o TDD, Figura
3, visto que o TDD tem como objetivo obter a solução correta que
corresponda exatamente ao problema de negócio nos níveis de
unidade e integração, enquanto o BDD cuida do nível de aceitação,
onde os requisitos residem.
SBES 2019, September 23–27, 2019, Salvador, Brazil
encorajar o bom design e um processo disciplinado na qual ajuda a
evitar erros no momento da programação. O TDD oferece atenção
a qualidade do código e design, além de ter um significativo efeito
sobre quanto do tempo de desenvolvimento é gasto para corrigir defeitos ao invés de, por exemplo, implementar novas funcionalidades
ou melhorar o código base do projeto existente.
George e Williams [14] realizaram um estudo de caso com programadores profissionais no qual afirma que o uso do TDD com ciclo
de vida iterativo e incremental, assistida com detecção de falhas,
o tempo de programação aumentou em 16% quando comparada
com os desenvolvimentos tradicionais, por exemplo, cascata. Os
estudos de caso apresentados nos trabalhos de Nagappan et al. [15]
e Canfora et al. [16] também apresentaram conclusões semelhantes
com os desenvolvedores de empresas como Soluziona Software
Factory, IBM e Microsoft.
O trabalho de Edwards [17] aponta a necessidade de ensinar
habilidades de teste de software para alunos de computação, que,
conforme os autores, são, em geral, despreparados para esta tarefa.
Assim, os autores propuseram o uso do TDD como forma de exigir
que os alunos testem seus códigos, e apontam que os estudantes
produziram códigos com 45% menos defeitos por mil linhas de
códigos ao utilizarem o TDD. O trabalho de Eierman e Iversen
[18] compara o TDD com a programação em par, analisando, pela
percepção dos alunos, qual destas mais contribuiu para o aprendizado de programação, logo os resultados dos autores apontam
que ambas as técnicas são consideradas úteis, mas o TDD é visto
como uma prática importante.
Santos et al. [19] apresentaram TesterDS, um jogo voltado ao
ensino de Estruturas de Dados que utiliza técnicas de TDD e Teste
Estrutural de Software. O jogo tem foco em estudantes de disciplinas
de programação mais avançadas, e tem como objetivo facilitar e
estimular o aprendizado de Estruturas de Dados.
Seroa et al. [20] propuseram um processo de desenvolvimento
de software para implementação de demandas de uma fábrica de
software em ambiente acadêmico. A metodologia proposta tem
como base um modelo iterativo-incremental e inclui métodos tais
como Scrum, XP, RUP, BDD, e entre outros. O processo foi aplicado
como metodologia prática de ensino em um curso de nível técnico
de Engenheira de Software.
Como diferencial, este trabalho apresenta um relato de experiência em uma disciplina dos cursos de Bacharelado em Sistemas de
Informação e Ciências da Computação, no desenvolvimento de um
produto, comparando grupos de alunos que empregaram TDD e
BDD com um grupo que não utilizou práticas ágeis.
4
Figure 3: Integração do BDD e TDD
3
TRABALHOS RELACIONADOS
Segundo Koskela [13] o TDD é uma importante prática de teste que
visa aumentar a produtividade no desenvolvimento de produtos,
pois envolve parcialmente a escrita de testes e é uma técnica para
melhorar a qualidade interna do software, isto é, é uma forma de
PROPOSTA DA DISCIPLINA
A disciplina Laboratórios de Engenharia de Software (LES) foi uma
proposta elaborada durante a modificação dos currículos dos cursos de Bacharelado em computação (Ciências da Computação e
Sistemas de Informação) da Universidade Tiradentes com foco na
integração de conteúdos das disciplinas de modelagem, Engenharia
de Software, e programação de forma prática e aplicada. Esta disciplina está posicionada no quarto período em ambos os cursos e tem
com objetivo seguir a base nos estágios de Piaget [21], considerando
o estágio operacional formal ocorrido a partir dos 11 ou 12 anos
até a vida adulta do indivíduo. Aplicando-se os pressupostos desse
SBES 2019, September 23–27, 2019, Salvador, Brazil
estágio de desenvolvimento humano, na medida em que o aluno
decompõe o problema em etapas, partindo dos problemas gerais,
em uma visão concreta, aos complexos, desenvolve uma visão mais
abstrata, e estabelece o pensamento dedutivo-indutivo necessário
ao desenvolvimento de software ágil.
Ao posicionar os alunos como participantes ativos do processo
de solução de problemas, diante do concreto, das suas experiências
mais próximas, em um processo de interação pessoa-meio, conforme
descrito por Bigge [22], sobre a realidade percebida, o professor e
os colegas ficam, na dinâmica proposta, também envolvidos nessa
interação com vistas ao conhecimento, esse movimento “[...] implica
uma relação sujeito-sujeito-objeto” [22].
Esta atividade ocorreu em sala de aula, esse espaço “[...] pode
assumir para si a perspectiva de interação com o conhecimento e
com os atores do ato educativo, assim, assume também a função de
ser o principal lugar em que se desenvolva a inteligência coletiva”
[23]. O ato de desenvolver software resulta na criação de um objeto
com significância aos alunos, que vê a concretização da aplicação de
seus conhecimentos, além de integrar os conhecimentos adquiridos
ao conhecimento anterior. Para tal criação, os alunos são estimulados a perceber o problema de forma individual, mas sendo levado a
considerar a participação colaborativa dos demais na elaboração
da solução. Desta forma, os alunos passam a ter uma participação
ativa e interativa, a qual é mais positiva que a recepção passiva
sendo incentivada por meio da prontidão e da aprendizagem [22].
Na prática investigada, a participação do professor é especialmente relevante nos momentos da passagem da abordagem teórica
para a explicação detalhada sobre a forma da busca de solução ao
problema proposto. Além disso, é fundamental que o professor esclareça sobre a possibilidade da solução proposta ser revista pelos
alunos, constituindo um ciclo contínuo de melhoria da solução inicial. O processo de ensino e aprendizagem torna-se, assim, contínuo
na própria reconstrução da experiência [24].
Rocha et al.
um período de oito semanas. A cada semana os alunos deveriam
apresentar o progresso de desenvolvimento do produto.
Desta forma, para a avaliação e validação dos resultados individuais dos alunos por grupo através da distribuição das notas de
produto por aluno foram definidas as seguintes hipóteses:
H0: Existe diferença entre a distribuição das notas relacionadas
aos alunos, por grupo.
H1: Não há diferença entre as notas relacionadas aos alunos, por
grupo.
A coleta de dados foi realizada por meio do Github, utilizado
no projeto pelos grupos, mediante as tarefas desenvolvidas pelos
alunos e informações inseridas no Trello através das entregas semanais e avaliações dos alunos. Para aplicar o TDD foi utilizado o
JUnit e para o BDD foi utilizado o JBehave durante o desenvolvimento do projeto. Além dessas ferramentas, também foi utilizado o
Slack para a comunicação entre os membros dos grupos, no entanto
alguns destes grupos utilizaram o Slack para realização das reuniões
diárias.
5.1
5.2
5
METODOLOGIA
Como investigação empírica, a pesquisa constitui um relato de
experiência, tornando-se exploratória, sobre a verificação das dificuldades de aprendizagem dos alunos, e descritiva, quanto à experimentação do uso do TDD e BDD como metodologia para o
ensino.
As análises sobre os resultados foram feitas sob abordagem
qualitativa e quantitativa, associando-se os dados obtidos na atividade pedagógica e os referenciais adotados no estudo. Assim, esta
pesquisa foi estruturada em forma de relato de experiência visando
expressar a aplicação de práticas ágeis, TDD e BDD, como uma
alternativa para o ensino de práticas de Engenharia de Software.
O relato apresentado abrange edições do componente curricular
Laboratório de Engenharia de Software (LES), o qual possui 80
horas aula nos cursos de Bacharelado em Sistemas de Informação
e Ciências da Computação de uma Universidade Tiradentes, no
período de janeiro a abril de 2019.
A turma, composta de 18 alunos, foi dividida em 3 grupos de 6
alunos, um grupo não utilizou práticas ágeis, outro grupo utilizou
TDD e o outro grupo utilizou BDD. Cada grupo tinha como tarefa o
desenvolvimento de um produto, este deveria ser desenvolvido em
Trello
O Trello [25] é uma ferramenta web gratuita de gerenciamento
de projetos em quadros que pode ser ajustada de acordo com as
necessidades do usuário, isto é, moldada de acordo com os objetivos.
Pode ser usado tanto por um só indivíduo quanto em trabalhos
em equipe. Sua interface permite a rápida identificação do que está
sendo feito, quem está fazendo e em qual estado se encontra cada
tarefa.
Apesar de seu foco ser o gerenciamento de projetos, o Trello
também pode ser utilizado para organizar tarefas do trabalho, planos
de estudos, e entre outros. Neste estudo, o Trello foi utilizado para
acompanhar as tarefas desenvolvidas por cada grupo cruzando com
as informações de commit do Github.
Github
O Github [26] é uma ferramenta web de gerenciamento de projetos
e versões de códigos com controle de versão. O Git [27], sistema
por traz do Github, é open source e tem como função o controle de
versão. Com ele é possível criar todo o histórico das alterações no
código do projeto, e facilmente voltar para qualquer ponto caso
pretenda saber como o código estava em determinada data. Ou seja,
o Git ajuda a controlar o fluxo das novas funcionalidades.
Permite que programadores contribuam em projetos privados
e/ou open source. Oferece suporte ao recurso de organização que
é amplamente utilizado por aqueles que querem uma divulgação
maior dos trabalhos e promover uma fácil comunicação através de
recursos que relatam problemas ou mesclam repositórios remotos.
5.3
JUnit
O JUnit [28] é um framework open source que facilita o desenvolvimento e a execução de testes unitários em código Java, orientado a
objeto, exibindo os possíveis erros que estão ocorrendo nos métodos. Este framework é amplamente utilizado na metodologia TDD,
pois permite verificar se cada unidade de código funciona da forma
esperada. Como também, facilita a criação, a execução automática
de testes e a apresentação dos resultados.
Teaching Agile with TDD and BDD
5.4
SBES 2019, September 23–27, 2019, Salvador, Brazil
JBehave
O JBehave [29] é um framework Java de Desenvolvimento Orientado
por Comportamento, isto é, BDD. Sua ideia principal é escrever um
arquivo-texto que será executado linha a linha, relacionado a um
método que é a materialização em código do objetivo de negócio
da respectiva linha textual.
Os usuários podem especificar e executar as histórias que são
compostas por um ou mais cenários, e um cenário é composto de
uma ou mais etapas (Given, When e Then - Dado, Quando e Então).
É utilizado para facilitar a comunicação entre os stakeholders e
verificar o comportamento através da integração contínua. Além
disso, os resultados dos testes podem ser vistos em formatos HTML,
TXT e XML, por exemplo, e permite a integração com as principais
IDEs, como: Eclipse e NetBeans.
5.5
Slack
O Slack [30] é uma ferramenta criada para ajudar empresas na
colaboração das equipes melhorando sua comunicação interna, ou
seja, com o Slack é possível reduzir a necessidade da troca de e-mails
e da participação em diversas reuniões para tomada de decisão.
Transparente com os dados no compartilhamento de projetos e
processos decisórios. Nele é possível criar times para gerenciar a
comunicação, criar canais com os mesmos assuntos de interesse,
trocar mensagens diretamente com uma pessoa ou um grupo, citar
pessoas ou notificar um canal quando necessário e compartilhar
arquivos.
6
RELATO DE EXPERIÊNCIA
Esta seção apresenta os relatos das experiências em ensino realizadas
em uma edição do componente curricular Laboratório de Engenharia
de Software. O público alvo foi composto por 18 alunos entre 18
e 24 anos de idade, tendo entre os 18 alunos um total de 4 alunas,
representando aproximadamente 22.3%.
Estes alunos possuíam conceitos básicos, pois o pré-requisito
para LES é a disciplina de Engenharia de Software (ES) e conclusão
das disciplinas de Introdução à Programação e Programação Orientada a Objetos (POO). Vale ressaltar que esses alunos não possuíam
experiência prática ou avançada em desenvolvimento ágil de software. Além disso, houve o acompanhamento, na forma de coaching
por parte do professor, durante as mudanças de requisito realizados
após a terceira iteração. Logo, observou-se que compreender o problema e conseguir separar os requisitos estáveis dos não estáveis foi
essencial pela prática de BDD que traz a história de usuários e o
cenário como parte da prática, permitindo que os alunos obtivessem
um melhor conhecimento das partes do sistema.
O experimento foi realizado da seguinte forma, Figura 4, na
primeira semana foi realizada uma palestra sobre as técnicas ágeis e
como estas impactam no desenvolvimento de software, discutindo
as ferramentas - Trello, Github, Slack, JUnit e JBehave. Na segunda
semana foi desenvolvido uma prática utilizando as técnicas TDD e
BDD, e as ferramentas que foram discutidas na palestra. Na terceira
semana teve início o desenvolvimento da solução, sendo realizada
uma apresentação, e em seguida, iniciou-se o desenvolvimento que
foi seguido até a décima semana, oito sendo para a parte prática e
duas para parte conceitual.
Figure 4: Ciclo de trabalho dos alunos
Os grupos criaram um projeto no Trello, Figura 5, e adicionaram
o professor para acompanhar a execução das tarefas. Cada grupo
se auto organizou de forma a dispor no time de um Scrum Master
e um Product Owner, o professor atuou como Cliente, ou seja, o
responsável por passar ao Product Owner e ao grupo de alunos
o que é o produto, quais são as funcionalidades desejadas, e por
conseguinte, quem avalia as entregas realizadas pelos grupos. O
professor, além de funcionar como o Cliente, auxilia como Coach
durante as iterações [31] permitindo que os alunos tomassem as
decisões, todavia, auxiliando-os durante o processo.
Figure 5: Quadro Trello utilizado pelos grupos
A atuação do professor como Coach foi apresentada no trabalho de Rodriguez et al. [31] e empregada de forma que os alunos
tivessem alguém para dirimir dúvidas, porém, sem resolver os
problemas. Dessa forma, o professor atuaria como um guia da
SBES 2019, September 23–27, 2019, Salvador, Brazil
Rocha et al.
prática proposta. Com isso, foi observado que os alunos, após a
primeira iteração, sentiram-se confortáveis para procurar o professor em relação as suas dúvidas. Por fim, na entrega final, os
alunos apresentam o produto no repositório Github a um grupo de
professores, para uma avaliação final.
Durante as aulas, os alunos deveriam, em todos os grupos, entregar o que foi planejado na aula anterior, debater sobre o que foi
aprendido e os erros cometidos, e por fim realizar o planejamento
para a entrega da próxima aula, seguindo o ciclo de reuniões Scrum,
com exceção da reunião diária. O domínio do problema escolhido
foi Software para gestão de clínica médica. Para a avaliação
foram realizadas análises individuais e em grupos, empregando os
dados a seguir:
• Commits realizados individualmente;
• Tarefas desenvolvidas individualmente;
• Quantidade de retrabalho individual;
• Entrega produzida pelo grupo;
• Apresentação do produto;
• Resolução dos problemas pelo grupo;
• Avaliação teórica sobre a prática desenvolvida.
Desta forma, cada grupo teve a liberdade de escolher a linguagem
de programação, o Sistema Gerenciador de Banco de Dados (desde
que fosse open source) e como seria a divisão de tarefas entre os
membros do grupo. Foi apenas definido que semanalmente deveria
ser apresentado a entrega e a definição do que seria feito na próxima
iteração para o professor. Após isso, o professor deveria avaliar se
as tarefas atenderam as necessidades, senão, deveria ser inserido
como retrabalho.
Por conseguinte, os grupos se organizaram escolhendo a linguagem de programação e as técnicas ágeis a serem adotadas, conforme Tabela 1.
Table 1: Distribuição dos grupos de trabalho
Técnica ágil
Número de alunos
Sexo masculino
Sexo feminino
Linguagem
IDE
Framework
Grupo 1
Não utilizou
6
6
0
Java
Netbeans
Não utilizou
Grupo 2
TDD
6
4
2
Java
Netbeans
JUnit5
Grupo 3
BDD
6
4
2
Java
Netbeans
JBehave
Desta forma, o primeiro ciclo foi composto de uma reunião de
planejamento, na qual os alunos compreenderam o problema, discutiram e definiram as tarefas. Essa reunião foi de 1h e 30 min seguido
pela etapa de desenvolvimento. As demais iterações começaram
por uma reunião para discutir a entrega e apresentar ao Cliente.
Depois foi realizada uma revisão da iteração, para ver o que eles
aprenderam e como resolveram os problemas, em seguida planejavam a próxima iteração e iniciavam o desenvolvimento. Esta série
de ações foram realizadas em todas as demais iterações, na iteração final os alunos revisaram o que foi produzido, se reuniram
para verificar a entrega final e apresentaram ao Cliente (professor),
fazendo um relato das lições aprendidas. Durante todo o ciclo teve
o acompanhamento do Coach (professor), Figura 6.
Figure 6: Ciclo de iterações
Os grupos, na primeira iteração (semana de trabalho), não obtiveram grandes resultados, visto que, pela falta de experiência
prática, entregaram poucas tarefas e com muitos erros. Os grupos
que optaram por utilizar as técnicas ágeis, durante o primeiro ciclo,
entregaram menos do que o grupo que não utilizou técnicas ágeis,
segundo os alunos o motivo foi à falta de prática com a ferramenta
escolhida, assim, apenas o Grupo 1 obteve bons resultados iniciais,
a Figura 7 apresenta estes resultados.
Figure 7: Entregas por grupo
Teaching Agile with TDD and BDD
Durante a segunda iteração, o Grupo 2 realizou um maior número
de entregas, seguido pelo Grupo 1 e por fim Grupo 3. Neste ponto,
o Grupo 2 relatou que tinha compreendido o framework e a IDE que
auxiliou no processo de uso. O Grupo 3 afirmou que as entregas de
tarefas foram menores, porém entregaram documentações como
as histórias de usuários e os cenários. No ciclo seguinte, o Grupo
3 realizou um maior número de entregas, seguido pelo Grupo 2.
O Grupo 1 teve maior número de retrabalho relativo às tarefas
entregue por falta de integração com as novas tarefas.
A partir da terceira iteração houve mudanças para todos os grupos pela pouca experiência prática dos alunos. Como o projeto era
único e iniciado do zero (software para gestão de clínica médica,
com controle de agenda dos médicos; cadastro de pacientes, médicos
e atendimento; controle dos atendimentos), todos teriam o mesmo
ponto de partida e as mesmas mudanças solicitadas pelo cliente. O
uso de práticas ágeis e o uso do JUnit pelo grupo que adotou o TDD,
e o uso do JBehave + JUnit pelo grupo que adotou o BDD, reduziu
consideravelmente o retrabalho.
Assim, o Grupo 3 passou a realizar um maior número de entregas,
com um menor número de retrabalho, seguido pelo Grupo 2. Conforme os alunos do Grupo 3, o trabalho inicial relacionado a escrever
as histórias de usuários e cenários, obrigou que eles obtivessem um
entendimento prévio sobre as funcionalidades, o que demorou a ser
compreendido no início de como fazer, porém reduzindo o trabalho
nas fases seguintes. O Product Owner do grupo, ficou responsável
por escrever as histórias dos usuários, e relatou ainda ser mais fácil
se comunicar com o time e com o Cliente (professor) por meio das
histórias. O Grupo 2 relatou que a tarefa de criar os testes, apesar de parecer lento, fez com que o grupo conseguisse reduzir o
retrabalho pois tiveram que pensar nas entradas e saídas de cada
funcionalidade, antes de sua construção.
O Grupo 3 relatou que achou inicialmente que a utilização do
BDD atrapalharia, mesmo tendo selecionado, e que durante a primeira
iteração eles acharam que poderia ter perdido muito tempo, mas notaram que durante as iterações o BDD fez com que eles reduzissem
retrabalhos, além disso, os cenários auxiliaram na validação das
funcionalidades, antes mesmo de rodar o teste, pois eles tinham um
caminho para validação, que facilitava o trabalho de desenvolvimento.
Na penúltima iteração, o Grupo 3 tinha concluído as tarefas e
ficou apenas trabalhando em melhorias, o Grupo 2 fez um grupo
de entregas, e na última iteração apenas o Grupo 1 ainda tinha
entregas a serem feitas. Após a execução dos ciclos foram analisados
os resultados através do Trello e Github.
Vale ressaltar que as falhas foram acompanhadas durante as
entregas, e medidas em nível de funcionalidade entregue, sendo
que cada falha foi comunicada de duas formas: a) Como cliente, o
professor dizia o que ele esperava; b) Como consultor, o professor
explicava caminhos para solucionar os problemas. Para mensurar as
falhas pretendemos utilizar uma ferramenta de gestão de defeitos,
por exemplo, Mantis. Na seção a seguir foram representados os
resultados encontrados durante a execução deste trabalho.
7
RESULTADOS E DISCUSSÃO
As práticas adotadas na aula tiveram como objetivo aproximar a
vida acadêmica da vida profissional do estudante, tal ação é essencial
SBES 2019, September 23–27, 2019, Salvador, Brazil
para formação conforme apontado no Relatório Delors [32], assim,
observa-se que as práticas pedagógicas realizam a convergência
entre a teoria e a prática. Neste estudo, o modelo adotado traz o
princípio da autonomia, onde os grupos tiveram que decidir quais
práticas iriam adotar e como elas seriam utilizadas.
Como apontado por Gadelha e Castro [33], ao final da execução
deste trabalho, observou-se que na apresentação teórica do conteúdo, os alunos apresentaram pouco interesse, tanto que o Grupo
1 foi o primeiro a definir que não utilizaria as práticas ágeis durante
o desenvolvimento, os outros dois grupos definiram as práticas
somente durante a aula prática. Também foi tarefa dos alunos a
busca da melhor solução para o problema apresentado.
Ao final da execução das tarefas realizadas pelos grupos, pode-se
verificar que a utilização do BDD mostrou-se eficiente, do ponto de
vista de entrega com menos falhas, o Grupo 3 que adotou o BDD
obteve um maior rendimento, seguido do Grupo 2 que adotou o
TDD e por fim o Grupo 1 que não adotou as práticas ágeis.
Dessa forma, nota-se que as entregas de funcionalidades também são diferentes por grupo, neste caso, não foi contabilizado o
retrabalho. O Grupo 3 iniciou mais lentamente nas entregas, porém
a partir da terceira iteração os alunos mantiveram uma quantidade
alta de entregas, melhorando sua performance. O Grupo 2 iniciou
com melhor tempo nas entregas, porém durante as iterações não
ocorreu grande evolução. O Grupo 1 obteve o melhor resultado
no tempo das entregas iniciais, mas nas iterações seguintes não
manteve a estabilidade devido a grande quantidade de erros, reduzindo assim, a performance geral do grupo, como pode ser visto
anteriormente na Figura 7.
Quando comparado os resultados individuais dos alunos por
Grupo de 0 a 4, é possível notar que a prática do BDD permitiu ao
Grupo 3 manter uma pontuação maior, seguido do Grupo 2, esses
dados podem ser observados na Tabela 2.
No processo de validação quanto à distribuição das notas de produto por aluno, Tabela 2, usa-se a análise de variância com o teste de
Kruskal-Wallis [34], também conhecido como Test H, que compara
três ou mais grupos em amostras independentes analisando a existência de diferenças significativas nas médias entre os valores obtidos. Este foi adotado devido ao fato de que o tamanho da amostra é
pequeno.
Table 2: Distribuição das notas de produto por aluno
Aluno 1
Aluno 2
Aluno 3
Aluno 4
Aluno 5
Aluno 6
Grupo 1
3
2
1.5
1.5
1.5
1.5
Grupo 2
4
4
2.5
2.5
2.5
3
Grupo 3
4
4
4
4
4
3.5
Conforme a observação da Tabela 3 é possível observar que o
resultado do teste H foi de 0.6926 do p-value, df de 5 e qui-quadrado
de 3.0479. Vale ressaltar que para esse teste foram adotados o nível
de significância de 0.05 e o intervalo de confiança de 95%. O chisquared ou qui-quadrado ou X2 é uma medida de divergência entre
a distribuição dos dados e uma distribuição esperada. Nesse relato
SBES 2019, September 23–27, 2019, Salvador, Brazil
de experiência foi escolhido para determinar se o modelo estatístico
ajusta os dados de forma adequada. Os graus de liberdade (df) são
iguais ao número da amostra menos 1, isto é, seis alunos por grupo
avaliados por nota menos um igual a cinco.
Table 3: Resultados do teste Kruskal-Wallis
x2
3.0479
df
5
p-value
0.6926
O p-value é a probabilidade de se obter uma estatística de teste
igual ou mais extrema que aquela observada em uma amostra, sob a
hipótese nula (H0). Um intervalo de confiança é uma amplitude de
valores, derivados de estatísticas de amostras, que têm a probabilidade de conter o valor de um parâmetro populacional desconhecido.
O nível de significância é a probabilidade de se rejeitar incorretamente a hipótese nula (H0) quando ela é verdadeira.
Assim, nesse caso, é possível concluir que se o p-value associado
à sua estatística qui-quadrado for menor do que a seu nível de
significância selecionado, o teste rejeita a hipótese nula de que o
modelo ajusta os dados. Portanto, a H0 - Existe diferença entre
a distribuição das notas relacionadas aos alunos, por grupo
não será rejeitada visto que o p-value foi de 0.6926, isto é, existe uma
probabilidade de 69% de se obter esse resultado por acaso quando o
tratamento não tem nenhum efeito real.
Desta forma, ao se analisar o boxplot, Figura 8, é possível visualizar
as diferenças de notas dos grupos de alunos, nota-se que o Grupo
1, possui um ponto de outlier, ou seja, um aluno teve um maior
destaque comparado aos demais. No Grupo 3, que utilizou o BDD,
nota-se que há pouca discrepância entre as notas dos alunos, além
de estas serem mais altas do que dos demais grupos.
Rocha et al.
Table 4: Commits por grupo de alunos
Aluno 1
Aluno 2
Aluno 3
Aluno 4
Aluno 5
Aluno 6
Grupo 1
20
32
40
22
30
18
Grupo 2
32
8
16
16
8
16
Grupo 3
16
17
8
24
16
8
Todos os grupos tiveram um comportamento colaborativo entre
os membros, porém os Grupos 2 e 3 obtinham melhores feedbacks
durante o desenvolvimento, conforme os próprios alunos, como
resultado da adoção das práticas ágeis. Os conflitos gerados durante
as iterações foram sanados com apoio do Coach (professor), não
prejudicando o andamento geral dos grupos. O Grupo 3 afirmou que
os cenários possibilitaram uma comunicação rápida e eficiente com
os membros do time e com o Cliente (professor), além de facilitar na
apresentação final, pois tinham uma ideia de aceitação do produto.
Assim, foi possível responder as duas questões de pesquisa:
Figure 8: Boxplot comparativo de notas por grupo
Q1: O que é preciso ensinar aos alunos para lidar de forma
rápida e eficaz com mudanças de requisitos durante o desenvolvimento do projeto?
O modelo adotado obteve um bom resultado prático, porém
carece de melhorias no contexto teórico. Apesar dos alunos obterem
as teorias em outras disciplinas, foi relatado pelos alunos que a
ideia da palestra no início auxiliou e foi proposto que poderia
ter mais algumas palestras, porém, os alunos apontaram que tais
palestras seriam melhores aproveitadas se fossem conduzidas por
um profissional de mercado e não pelo próprio professor, falando
a respeito do uso das técnicas na indústria de software. Assim,
passa a ser necessário, conforme relatado, ao menos duas palestras
separadas sobre as técnicas ágeis.
Foi possível notar que, grupos que adoraram as práticas ágeis
tiveram menos problemas em relação as mudanças de requisitos,
conseguindo fazer as adaptações de forma mais ágil. Outro ponto
indicado pelos alunos como positivo foi o fato do professor além
de ser o Cliente, também atuou como Coach durante as iterações, o
que auxiliou na prática ágil durante as tarefas. Além disso, como
relatado pelos alunos, há dificuldades de lidar com as mudanças de
requisitos quando se trabalha em conjunto por causa da falta de
comunicação, sendo melhorado por meio das ferramentas, assim
os grupos adotaram o Slack como forma de manter as informações
relativas as dúvidas que surgiam durante o desenvolvimento, funcionando como uma reunião diária.
Quando analisado os commits dos grupos, o Grupo 1 apesar de
possuir mais commits, parte deles foram retrabalho, ou seja, tarefas
que tiveram de ser refeitas diversas vezes. No Grupo 2, o Aluno
1 optou por efetuar commit por cada funcionalidade e mudança
efetuada, e no Grupo 3 ocorreu um balanceamento na realização
dos commits, onde os Alunos 1 e 5 realizaram a mesma quantidade
de commits e o Aluno 4 realizou a maior quantidade de commits,
esses dados podem ser observados na Tabela 4.
Assim, em resposta a pergunta, é necessário que os alunos compreendam os requisitos e como eles impactam no produto, tal compreensão foi adquirida por meio das práticas ágeis. Também é preciso que os discentes aprendam que a comunicação entre os membros do time é essencial. Assim, o professor, atuando como Coach,
foi essencial para explicar aos times que, apesar deles se encontrarem em sala apenas uma vez por semana, a comunicação deveria
ser continua.
Teaching Agile with TDD and BDD
Q2: Como avaliar o desempenho individual ao ensinar um
curso respaldado em projeto baseado no TDD e no BDD?
O modelo de avaliação utilizado nas entregas do grupo, integrando o Trello com o Github para acompanhar, facilitou tanto
o trabalho do docente como o acompanhamento dos alunos, permitindo que o professor, atuando como Coach, auxiliasse os alunos
que tinham baixa produtividade. O Slack, que não foi utilizado para
avaliação, poderia ser um complemento, permitindo entender as
interações entre os alunos. Porém, o quadro de acompanhamento
de commits do Github, ao ser integrado com o Trello, facilitou o
trabalho de análise de produtividade individual e do grupo. Assim,
pode-se afirmar que a integração destas ferramentas pode ser utilizada como método de avaliação do desempenho individual dos
alunos.
8
LIÇÕES APRENDIDAS
Este trabalho apresentou a experiência de aplicação do TDD e BDD
na prática de ensino de Engenharia de Software, não apenas no
contexto teórico, mas também prático. Os alunos tiveram assim, a
possibilidade de aplicar os conhecimentos nas demais disciplinas
na criação de projeto real. Porém, como lição aprendida, pode-se
afirmar que ao liberar os alunos, que possuem pouca experiência
prática, para escolher técnicas não é a melhor opção, o mais adequado seria que tivesse sido determinado a utilização do BDD pelos
alunos durante a execução dos projetos. Outro ponto a ser observado foi a primeira iteração dos alunos, normalmente se obtém
um baixo rendimento, o que se mostra normal, devido a falta de
experiência dos alunos, assim, isso deve ser contabilizado para a
execução em sala de aula.
Além disso, as divergências nas escolhas das ferramentas e metodologias utilizadas entre os grupos acarretou em diferentes resultados desde o início do projeto até sua conclusão. Isso pode ser
comprovado aos observar os resultados apresentados da Figura 7,
onde inicialmente o Grupo 1 iniciou com maior quantidade de tarefas práticas e o Grupo 3 com a menor quantidade (os alunos tiveram
foco no planejamento), porém ao final do tempo estimado o Grupo
3 finalizou o projeto antes mesmo da última iteração enquanto o
mesmo não ocorreu com o Grupo 1. Dessa forma, pode-se ressaltar
que a etapa de planejamento é de extrema importância para evitar o
retrabalho, entregar dentro do prazo, e principalmente para manter
a qualidade do produto.
Por fim, o desempenho dos alunos está relacionado na compreensão dos problemas, o BDD auxiliou neste processo, mas carece de
uma forma de validar os cenários, pois, devido a falta de experiência
dos alunos, há possibilidade de se criar cenários que não tenham
utilidades reais para o projeto.
9
CONSIDERAÇÕES FINAIS
Neste trabalho foi apresentado um relato de experiência através
da adoção de práticas ágeis na prática de ensino de Engenharia de
Software. O relato cobre a edição de 2019 do componente curricular
Laboratório de Engenharia de Software dos cursos de Bacharelado em Ciências da Computação e Sistemas de Informação de
uma Universidade particular no nordeste brasileiro (Universidade
Tiradentes). Em LES são integrados diversos conteúdos como design de software, desenvolvimento, teste e validação, empregando
SBES 2019, September 23–27, 2019, Salvador, Brazil
metodologias ágeis, demanda apontada como necessária pelo mercado.
Com base nos resultados apresentados no relato, pode-se afirmar
que o BDD tem melhor aderência para a integração dos diversos
conteúdos, além de possibilitar um melhor entendimento sobre o
problema a ser solucionado, proporcionando, assim, benefícios a
aprendizagem dos alunos. Os resultados demonstram que a adoção
de práticas ágeis auxilia o aluno no processo de desenvolvimento,
reduzindo os ruídos relacionados ao entendimento do sistema, bem
como diminuindo o retrabalho em relação às funcionalidades.
Porém, cabe ressaltar que, as práticas ágeis são apenas uma parte
do processo, visto que a adoção de um modelo de entrega continua
e de reuniões também se fez necessário. Ferramentas como Trello e
Github apoiaram os alunos em relação ao que fazer e o professor em
relação à avaliação, tanto individual quanto do grupo, permitindo
uma auditoria das entregas de artefatos. Além disso, a atuação do
professor como Coach facilitou o trabalho dos alunos.
Como trabalhos futuros, pretende-se aplicar técnicas de análise
de cenário para melhorar a qualidade dos trabalhos, utilizar uma
ferramenta de gestão de defeitos, por exemplo Mantis, além de
utilizar palestras com profissionais de mercado durante as fases de
desenvolvimento, visando melhorar o entendimento dos alunos nas
técnicas ágeis.
10
AGRADECIMENTOS
Agradecemos o apoio da Universidade Tiradentes ao conceder bolsas que possibilitaram a execução desta pesquisa e ao Instituto de
Tecnologia e Pesquisa (ITP) pelo apoio.
REFERENCES
[1] Ray Dawson. Twenty dirty tricks to train software engineers. In Proceedings of
the 22nd international conference on Software engineering, pages 209–218. ACM,
2000.
[2] Gil Regev, Donald C Gause, and Alain Wegmann. Experiential learning approach
for requirements engineering education. Requirements engineering, 14(4):269,
2009.
[3] Timothy C Lethbridge, Jorge Diaz-Herrera, J Richard Jr, J Barrie Thompson, et al.
Improving software practice through education: Challenges and future trends.
In Future of Software Engineering (FOSE’07), pages 12–28. IEEE, 2007.
[4] Marcelo H Yamaguti, Flávio M de Oliveira, Cássio AW Trindade, and Alessandra
Dutra. Ages: An interdisciplinary space based on projects for software engineering learning. In Proceedings of the 31st Brazilian Symposium on Software
Engineering, pages 368–373. ACM, 2017.
[5] Mike Cohn. Desenvolvimento de software com Scrum: aplicando métodos ágeis
com sucesso. Bookman, 2000.
[6] Susan Hammond and David Umphress. Test driven development: the state of the
practice. In Proceedings of the 50th Annual Southeast Regional Conference, pages
158–163. ACM, 2012.
[7] Steven Fraser, Dave Astels, Kent Beck, Barry Boehm, John McGregor, James
Newkirk, and Charlie Poole. Discipline and practices of tdd:(test driven development). In Companion of the 18th annual ACM SIGPLAN conference on
Object-oriented programming, systems, languages, and applications, pages 268–270.
ACM, 2003.
[8] Wilson Bissi, Adolfo Gustavo Serra Seca Neto, and Maria Claudia
Figueiredo Pereira Emer. The effects of test driven development on internal
quality, external quality and productivity: A systematic review. Information and
Software Technology, 74:45–54, 2016.
[9] David Janzen and Hossein Saiedian. Does test-driven development really improve
software design quality? Ieee Software, 25(2):77–84, 2008.
[10] Dan North.
Introducing bdd (2006).
Verfügbar unter: http://dannorth.
net/introducingbdd, 2019.
[11] John Ferguson Smart. BDD in Action. Manning Publications, 2014.
[12] Lauriane Corrêa Pereira Moraes et al. Um estudo empírico sobre o uso do bdd e
seu apoio a engenharia de requisitos. 2016.
[13] L Koskela. Test Driven Practical TDD and Acceptance TDD for Java Developers.
Manning, 2007.
SBES 2019, September 23–27, 2019, Salvador, Brazil
[14] Boby George and Laurie Williams. A structured experiment of test-driven development. Information and Software Technology, 46:337–342, 04 2004.
[15] Nachiappan Nagappan, E. Michael Maximilien, Thirumalesh Bhat, and Laurie
Williams. Realizing quality improvement through test driven development:
Results and experiences of four industrial teams. Empir Software Eng, pages 289
– 302, June 2008.
[16] Gerardo Canfora, Aniello Cimitile, Felix Garcia, Mario Piattini, and Corrado Aaron Visaggio. Evaluating advantages of test driven development: A
controlled experiment with professionals. In Proceedings of the 2006 ACM/IEEE
International Symposium on Empirical Software Engineering, ISESE’06, pages
364–371. ACM, New York, NY, USA, 2006.
[17] Stephen H Edwards. Using test-driven development in the classroom: Providing
students with automatic, concrete feedback on performance. In Proceedings of
the international conference on education and information systems: technologies
and applications EISTA, volume 3. Citeseer, 2003.
[18] Michael A Eierman and Jakob Iversen. Comparing test-driven development and
pair programming to improve the learning of programming languages. Journal
of the Midwest Association for Information Systems| Vol, 2018(1):23, 2018.
[19] Giovanna Lorena Rodrigues dos Santos and Edmilson Campos Neto. Um processo
de desenvolvimento de software para o ensino técnico baseado em uma fábrica
de software escola. In Brazilian Symposium on Computers in Education (Simpósio
Brasileiro de Informática na Educação-SBIE), volume 29, page 1741, 2018.
[20] Iago Seroa, Helder Bertoldo, and Vânia Neves. Testerds: uma maneira fácil
e estimulante para aprender estruturas de dados. In Brazilian Symposium on
Computers in Education (Simpósio Brasileiro de Informática na Educação-SBIE),
volume 29, page 864, 2018.
Rocha et al.
[21] Jean Piaget and David Elkind. Six psychological studies, volume 462. Vintage
Books, 1968.
[22] Morris L Bigge. Learning theories for teachers. Harper & Row, 1982.
[23] Vani Moreira Kenski. Educação e tecnologias. Papirus editora, 2007.
[24] John Dewey. Experience and education: The kappa delta pi lecture series. Touchstone, 1997.
[25] Trello. https://trello.com/, 2019. [Online; accessed 19-may-2019].
[26] Github. https://github.com/, 2019. [Online; accessed 03-april-2019].
[27] Fabio Gomes Rocha, Pablo Marques Menezes, Methanias Colaço Rodrigues Junior,
Rogério Patrício Chagas do Nascimento, and Adicinéia Aparecida de Oliveira.
Integração contínua e controle de versão: Uma revisão sistemática. In 14th
CONTECSI-International Conference on Information Systems and Technology Management, 2017.
[28] Junit. https://junit.org/junit5/, 2019. [Online; accessed 20-april-2019].
[29] JBehave. https://jbehave.org/, 2019. [Online; accessed 15-may-2019].
[30] Slack. https://slack.com/intl/pt-br/, 2019. [Online; accessed 15-april-2019].
[31] Guillermo Rodríguez, Álvaro Soria, and Marcelo Campo. Measuring the impact
of agile coaching on students’ performance. IEEE Transactions on Education,
59(3):202–209, 2016.
[32] Jacques Delors and Zhou Nanzhao. Educação um tesouro a descobrir. 1998.
[33] Bruno Gadelha and Alberto Castro. A reference model for teaching collaborative
mobile systems. In Proceedings of the 31st Brazilian Symposium on Software
Engineering, pages 374–383. ACM, 2017.
[34] Changhee Kim and Won Sug Shin. Does information from the higher education
and rd institutes improve the innovation efficiency of logistic firms? 35(1):70–76,
2019.
Related documents
Artigos:
Artigos: