72
Natalie Fernández del Real DojOn : Virtualizando o conceito do Coding Dojo para a Prática Colaborativa de Programação Campos dos Goytacazes, RJ Março de 2015

DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

Natalie Fernández del Real

DojOn: Virtualizando o conceito do CodingDojo para a Prática Colaborativa de

Programação

Campos dos Goytacazes, RJ

Março de 2015

Page 2: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(
Page 3: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

Natalie Fernández del Real

DojOn: Virtualizando o conceito do Coding Dojo para aPrática Colaborativa de Programação

Trabalho de Conclusão de Curso apresen-tado ao Curso de Ciência da Computação daUniversidade Estadual do Norte FluminenseDarcy Ribeiro, como parte dos requisitos exi-gidos para a obtenção do título de Bacharelem Ciência da Computação.

Universidade Estadual do Norte Fluminense Darcy Ribeiro – UENF

Centro de Ciência e Tecnologia - CCT

Laboratório de Ciências Matemáticas - LCMAT

Cência da Computação

Orientadora: Profa. Dra. Sahudy Montenegro GonzálezCoorientadora: Profa. Dra. Annabell del Real Tamariz

Campos dos Goytacazes, RJMarço de 2015

Page 4: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(
Page 5: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

Natalie Fernández del RealDojOn: Virtualizando o conceito do Coding Dojo para a Prática Colaborativa

de Programação/ Natalie Fernández del Real. – Campos dos Goytacazes, RJ, Marçode 2015-

72 p. : il. (algumas color.) ; 30 cm.

Orientadora: Profa. Dra. Sahudy Montenegro GonzálezCoorientadora: Profa. Dra. Annabell del Real Tamariz

TCC (Graduação) – Universidade Estadual do Norte Fluminense Darcy Ribeiro –UENFCentro de Ciência e Tecnologia - CCTLaboratório de Ciências Matemáticas - LCMATCência da Computação, Março de 2015.

1. DojOn. 2. Coding Dojo. 3. Groupware.CDU 02:141:005.7

Page 6: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

Natalie Fernández del Real

DojOn: Virtualizando o conceito do Coding Dojo para aPrática Colaborativa de Programação

Trabalho de Conclusão de Curso apresen-tado ao Curso de Ciência da Computação daUniversidade Estadual do Norte FluminenseDarcy Ribeiro, como parte dos requisitos exi-gidos para a obtenção do título de Bacharelem Ciência da Computação.

Page 7: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

Folha de AprovaçãoTrabalho de Conclusão de Curso sob o título “DojOn: Virtualizando o conceito do CodingDojo para a Prática Colaborativa de Programação”, defendida por Natalie Fernández delReal e aprovada em 12 de março de 2015, em Campos dos Goytacazes, Estado do Rio deJaneiro, pela banca examinadora constituída pelos professores:

Profa. Dra. Sahudy MontenegroGonzálezOrientadora

Universidade Federal de São Carlos -UFSCar/Sorocaba

Profa. Dra. Annabell del Real TamarizCo-orientadora

Universidade Estadual do Norte FluminenseDarcy Ribeiro - UENF

Prof. Dr. Luiz Maurício de OliveiraMonteiro

Instituto Federal Fluminense - IFF/ Camposdos Goytacazes

MSc. Rodrigo Soares ManhãesUniversidade Estadual do Norte Fluminense

Darcy Ribeiro - UENF

Prof. Dr. Fermín Alfredo TangMontané

Universidade Estadual do Norte FluminenseDarcy Ribeiro - UENF

Page 8: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(
Page 9: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

Declaração de Autor

Declaro, para fins de pesquisa acadêmica, didática e técnico-científica, que o presenteTrabalho de Conclusão de Curso pode ser parcial ou totalmente utilizado desde que se

faça referência à fonte e aos autores.

Natalie Fernández del RealCampos dos Goytacazes, RJ, em Março de 2015

Page 10: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

Dedico este trabalho à A,letra tal que representa um mundo para mim.

Page 11: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

Agradecimentos

À minha família de sangue, à minha família postiça, à minha família de longe, à minhafamília de amigos. Família, obrigado a todos, especialmente, à minha mãe e ao meu paipelo amor e incentivo!

Ao Hugo, Herond e Eduardo por nos apresentarem o Coding Dojo.

Ao meu amigo Pablo, por me ajudar a encontrar o tema do meu trabalho e ser esse carasensacional!

Ao meu melhor professor de programação, Rodrigo Manhães. Obrigado por compartilharseu conhecimento comigo e com muitos outros.

À Filipe Fernandes por me dar forças quando eu precisava, por acreditar em mim sempree por fazer tudo pra me ver feliz!

À minha avó por sempre incentivar meu estudo. Você sempre me apoiou e acreditou emmim. Não te falo obrigado, porque não é isso que você quer ouvir. Te falo te amo, prasempre.

A essa pessoa que além de ser minha tia, é minha melhor amiga e, por sorte, minhaorientadora. Tudo com você fica mais divertido, até mesmo coisas trabalhosas! Obrigadopelo aprendizado. Obrigado por me suportar e pela paciência. Obrigado por me ajudar aalcançar meu sonho. Obrigado pelo seu apoio. Obrigado por me amar. Obrigado por tudo,mesmo! Você é meu role model. Amo você, Sahudy.

Finalmente, obrigado a todos aqueles que de alguma maneira fizeram parte da minhaformação. Obrigado

Page 12: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(
Page 13: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

"There is no spoon"(Matrix, Spoon boy)

Page 14: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(
Page 15: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

Lista de ilustrações

Figura 1 – Esquematização do Coding Dojo. Adaptada de Coding-Dojo (2015). . . 28Figura 2 – Comparação da prática de programação em par com a prática de dirigir

um carro. Adaptada de Pair-programming (2015). . . . . . . . . . . . . 29Figura 3 – Ciclo do Desenvolvimento Guiado por Testes. Fonte - Ciclo-TDD (2015). 30Figura 4 – Interface do Collabode. Fonte: (GOLDMAN; LITTLE; MILLER, 2011). 40Figura 5 – Interface do plugin Saros. Fonte: (SALINGER et al., 2010). . . . . . . 41Figura 6 – Interface do Jmellow. Fonte: (SCHATTEN; PöLZ; EPHESER, 2007). . 43Figura 7 – Interface do TouchDevelop. Fonte: (FAHNDRICH, 2014). . . . . . . . 44Figura 8 – Interface do Wikinext na criação de uma página. Fonte: (ARAPOV;

BUFFA; OTHMANE, 2014). . . . . . . . . . . . . . . . . . . . . . . . 45Figura 9 – Interface doWeScheme. Fonte: (YOO; SCHANZER; KRISHNAMURTHI,

2011). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46Figura 10 – Interface do Cloud9. Fonte: (MATSUMOTO et al., 2012). . . . . . . . 47Figura 11 – Fluxograma do DojOn. . . . . . . . . . . . . . . . . . . . . . . . . . . . 52Figura 12 – Arquitetura do DojOn. . . . . . . . . . . . . . . . . . . . . . . . . . . . 54Figura 13 – Arquitetura relacional entre o DojOn, Cloud9 e o Dojo Puzzles. . . . . 56Figura 14 – Interface do plugin DojOn na plataforma Cloud9 - componentes desta-

cados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58Figura 15 – Diagrama de Classes do DojOn. . . . . . . . . . . . . . . . . . . . . . . 58Figura 16 – a) Usuário pode convidar outros clicando em Share. b) Tela para convidar

outros usuários. c) Tela de chat. . . . . . . . . . . . . . . . . . . . . . . 60Figura 17 – Interface do DojOn com problema de programação após pressionar

Cmd+Shift+P. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61Figura 18 – Usuário clica em Começar, no menu DojOn, e a contagem regressiva

começa e um sinal verde aparece. . . . . . . . . . . . . . . . . . . . . . 62Figura 19 – Acaba tempo de usuário. . . . . . . . . . . . . . . . . . . . . . . . . . . 63Figura 20 – Sinal vermelho aparace para usuário e tempo é zerado. . . . . . . . . . 63Figura 21 – Outro usuário começa a programar. . . . . . . . . . . . . . . . . . . . . 64Figura 22 – Região da tela mostrando a configuração do tempo máximo do relógio. 65

Page 16: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

Lista de tabelas

Tabela 1 – Comparação entre os sistemas estudados. . . . . . . . . . . . . . . . . . 49Tabela 2 – Verificação dos Princípios de Projeto do DojOn. . . . . . . . . . . . . . 65

Page 17: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

Lista de abreviaturas e siglas

API Application Programming Interface

CD Coding Dojo

CSCL Computer-Supported Collaborative Learning

CSCW Computer-Supported Cooperative Work

IaaS Infraestrutura como Serviço

IDE Integrated Development Environment

LPs Linguagens de Programação

PaaS Plataforma como Serviço

SaaS Software como Serviço

SCV Sistema de Controle de Versão

SDK Software Development Kit

TDD Test Drive-Development

Page 18: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(
Page 19: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

ResumoUm Coding Dojo é um encontro onde um grupo de programadores se reúne para trabalharem conjunto em um desafio de programação. O objetivo é que os participantes aprendame treinem de uma maneira divertida, através de uma metodologia pragmática, melhorandoassim suas habilidades de programação e de trabalho em grupo. Adicionalmente, alunosdos cursos de computação e áreas afins são iniciados no processo de aprendizagem deprogramação com conceitos totalmente novos e uma lógica de raciocínio computacionaldiferente da comum. Com o intuito de facilitar e melhorar a aprendizagem de programaçãoe o encontro de programadores para o compartilhamento de conhecimento, propõe-se avirtualização do conceito do Coding Dojo. Este trabalho tem como objetivo apresentaruma arquitetura e desenvolver o sistema DojOn (Dojo Online), uma aplicação Web paracolaboração em tempo real entre programadores, levando em conta a filosofia do CodingDojo. O projeto tem como missão o desenvolvimento de um ambiente virtual colaborativo,onde diferentes usuários poderiam se reunir para trabalhar em um mesmo problema. Oambiente foi implementado utilizando a IDE Cloud9 e é composto por: (1) um editor detexto; (2) compilador e/ou interpretador para várias linguagens de programação suportadaspela plataforma; (3) chat para a interação entre os usuários; (4) um gerenciador de tempopara satisfazer os requisitos do Coding Dojo; (5) um gerenciador de uso para controlar afila de participantes de acordo com os requisitos do Coding Dojo; e (6) um repositório(Dojo Puzzles) de problemas, que devem ser solucionados com testes automatizados. Ostrês primeiros componentes foram integrados ao ambiente usando recursos, já disponíveis,do Cloud9. Os dois últimos foram criados a partir de três gerenciadores: de tempo, de usoe de problemas. Ao todo, o ambiente manipula quatro recursos: o timer, que controla otempo de participação dos programadores; o problema a ser resolvido; o sinal que indicapara os participantes a sua vez de programar; e o chat para interação entre os participantes.Além do protótipo do ambiente, este trabalho traz como resultado um estudo comparativode dez ambientes afins, de desenvolvimento e/ou edição, que serviram como base para aconcepção do DojOn.

Palavras-chave: Coding Dojo, groupware, Web-IDE, ambiente colaborativo, aprendizagemde programação.

Page 20: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(
Page 21: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

AbstractA Coding Dojo is a meeting where a group of programmers works together to solve aprogramming challenge. The aim is learning and training in a fun way, through a pragmaticmethodology, thereby improving programming skills and teamwork. Furthermore, computercourses and related fields’s students are initiated on the programming learning process withtotally new concepts and different logic, computational thinking. In order to facilitate andimprove programming learning and the reunion between programmers to share knowledge,it is proposed the virtualization of the Coding Dojo concept. This work aims to presentan architecture and to develop the DojOn (Dojo Online) system - a Web application tocollaboration between programmers in real time, considering Coding Dojo philosophy.This project has as mission the development of a virtual collaborative environment, whereseveral users could meet to work in the same problem. The environment was implementedemploying the Cloud9 IDE and it is composed by: (1) text editor; (2) compiler and/orinterpreter to several programming languages supported by the platform; (3) chat tointeraction between users; (4) a time manager to satisfy the Coding Dojo requirements;(5) a use manager to control the participants queue in accordance with to the CodingDojo requirements; and (6) a Dojo Puzzles’s repository of programming challenges, whichmust be solved with automatic tests. The first three components were integrated into theenvironment by using resources already available in Cloud9. The last two were createdusing three managers: time manager, use manager and problem manager. In all, theenvironment handles four resources: the timer, which controls the time of participation ofdevelopers; the problem to be solved; the semaphore indicating the turn of the participantsfor programming; and the chat for interaction among participants. Further the systemprototype, this work brings as result a comparative study of ten related systems ofdevelopment and/or edition, which served as a base to the DojOn conception.

Keywords: Coding Dojo, groupware, Web-IDE, collaborative environment, programminglearning.

Page 22: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(
Page 23: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

Sumário

1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231.1 Motivação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241.2 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251.3 Organização do Trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . 25

2 Coding Dojo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272.1 Programação em Par . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282.2 Desenvolvimento Guiado por Testes . . . . . . . . . . . . . . . . . . . . 292.3 Baby Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3 Fundamentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.1 Sistemas Colaborativos . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.2 Engenharia de Groupware . . . . . . . . . . . . . . . . . . . . . . . . . . 353.3 Web-IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

4 Estado da Arte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394.1 DEVaaS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394.2 Collabode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394.3 Saros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414.4 College . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424.5 Jmellow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424.6 TouchDevelop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434.7 WikiNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444.8 WeScheme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454.9 D&G . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464.10 Cloud9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474.11 Resumo Comparativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

5 DojOn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515.2 Conceito do Ambiente . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515.3 Princípios do Projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525.4 Arquitetura do Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . 535.5 Desenvolvimento do Ambiente . . . . . . . . . . . . . . . . . . . . . . . 555.5.1 Modelo do Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585.6 Cenários de Uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605.6.1 Cenário 1: Interação entre usuários . . . . . . . . . . . . . . . . . . . . . 605.6.2 Cenário 2: Visualizando problemas . . . . . . . . . . . . . . . . . . . . . 61

Page 24: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

5.6.3 Cenário 3: Rotina de participação . . . . . . . . . . . . . . . . . . . . . 625.6.4 Cenário 4: Configurando o tempo máximo do relógio . . . . . . . . . . . 645.7 Discussão dos Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . 65

6 Conclusões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676.1 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

Page 25: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

23

1 Introdução

A computação ocupa uma posição privilegiada. Possivelmente, em todos os segmen-tos da atual sociedade é necessário o uso de um dispositivo computacional- como desktops,smartphones, laptops, etc.- e em alguns casos é indispensável seu uso. Seja em restaurantes,universidades, hospitais ou até mesmo em casa, aplicações computacionais estão presentespara facilitar a vida das pessoas.

Programação é o processo de escrita, teste e manutenção de um programa decomputador, sendo escrito em uma determinada linguagem de programação e criando umalgoritmo. Um algoritmo é uma sequência de passos para realizar uma tarefa ou resolverum problema. Em nosso dia a dia utilizamos algoritmos para realizar nossas atividades,definindo a sequência de atividades que devemos fazer para atingir um objetivo. Dessaforma, um algoritmo é uma descrição passo a passo de como o computador irá executaruma operação específica (KNUTH, 1973).

Alunos de cursos de computação e áreas afins no Brasil são iniciados na comunidadede desenvolvimento computacional com a disciplina de programação. Nessa disciplina, éensinado o conceito de algoritmos e a criação deles mediante uma linguagem de programaçãobásica. Com isso, o aluno passa a conhecer linguagens de programação e, consequentemente,desenvolver sistemas para computador. Porém, esse processo de aprendizagem podeser difícil para muitos porque conceitos totalmente novos e uma lógica de raciocíniocomputacional são apresentados para eles. Sendo Programação uma disciplina essencialpara os cursos de computação e afins, deve-se ter um cuidado extra para o melhoraprendizado dos alunos.

O “compartilhamento” das coisas possui grande foco atualmente, pois existe umagrande prática, facilidade e admiração por parte dos seus executores. A Internet possibilitouesse compartilhamento em massa. Quando compartilhamos algo, acabamos, diretamente,compartilhando conhecimento. Existem muitas razões para um programador querer com-partilhar seu código com outros. Por exemplo, na maioria das vezes, um segundo par deolhos é mais útil para "debugar"o código; o programador pode querer ganhar reconheci-mento na comunidade ou desejar dividir seu trabalho com outros, exercendo os conceitosde: dividir para conquistar.

Compartilhamento de código é, geralmente, feito de maneira assíncrona, no qual,o código é transferido via email, algum dispositivo, repositório de código, ou algumoutro método. No entanto, hoje em dia procura-se cada vez mais agilizar a produção,precisando-se desenvolver mais rapidamente. Uma maneira de apurar a produção de códigoé compartilhando-o em tempo real.

Page 26: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

24 Capítulo 1. Introdução

As oportunidades colaborativas oferecidas por um navegador Web são muitointeressantes: participação instantânea por qualquer um com um navegador Web, interfacesgráficas que melhoram a colaboração, e um servidor de desenvolvimento que gerenciaprojetos locais, mesmo quando o ponto de acesso do usuário é um celular.

Cada vez mais, vem se criando softwares próprios para navegador e, até mesmo,softwares próprios para desktop estão passando por migração. Hoje em dia, queremos ascoisas cada vez mais rápidas e o compartilhamento dos recursos nos ajuda nesse processode aceleração.

1.1 Motivação

Um Coding Dojo1 (CD) é um encontro onde um grupo de programadores sereúne para trabalhar em conjunto em um desafio de programação. O objetivo é que osparticipantes aprendam e treinem de uma maneira divertida, através de uma metodologiapragmática, melhorando assim suas habilidades de programação e de trabalho em grupo.

Ex-alunos do curso de Ciência da Computação da UENF tiveram a brilhante ideiade ensinar e incentivar a programação para os novatos do curso com a prática de CD, e coma ajuda da coordenadora criaram uma disciplina optativa. Para os alunos, incluindo-me,era uma novidade ter aulas dessa maneira: dinâmicas e descontraídas. Coding Dojo nosmostrou que programar podia ser divertido.

Gostando tanto da maneira como o CD funciona, decidimos tentar realizar CDs forada disciplina. Como não havia tempo para nos encontrar pessoalmente, resolvemos fazerum Coding Dojo Online. Para isso utilizamos Skype2 e Google Docs3 para a comunicaçãoe compartilhamento de código em tempo real, respectivamente, porém, não podíamoscompartilhar um terminal para rodar os testes. Dessa maneira, acabou ficando cansativo enada agradável fazer os CDs online, pois tínhamos que copiar o código escrito no GoogleDocs, colar em um editor de texto e salvar no computador, para assim, executar noterminal. Desde o começo vimos que não era a melhor opção e começamos a pensar emoutras idéias, como acesso remoto.

Concluímos que este era um problema para um cientista da computação resolver.Por que complicar as coisas procurando várias ferramentas para poder programar onlinecolaborativamente se podíamos criar uma plataforma com todas esses recursos e resolvernosso problema e talvez de muitos outros que também tiveram a mesma idéia? Sim, resolverproblemas e simplificar processos faz parte da nossa profissão, por tais motivos decidimosdesenvolver DojOn (Dojo Online).

1 http://codingdojo.org2 http://skype.com3 https://docs.google.com

Page 27: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

1.2. Objetivo 25

1.2 ObjetivoCom o intuito de facilitar a aprendizagem de programação e o encontro de progra-

madores para o compartilhamento de conhecimento, propõe-se a virtualização do conceitodo Coding Dojo. Este trabalho tem como objetivo apresentar uma arquitetura e desenvolvero sistema DojOn (Dojo Online), uma aplicação Web para uma colaboração em tempo realentre programadores, levando em conta a filosofia do Coding Dojo. O projeto tem comomissão o desenvolvimento de um ambiente virtual colaborativo, onde diferentes usuáriospoderiam se reunir para trabalhar em um mesmo problema.

1.3 Organização do TrabalhoPara a melhor compreensão do trabalho, este é dividido da seguinte maneira:

• Coding Dojo e Fundamentos: estes capítulos apresentam uma preparação da pesquisa,ou seja, são uma introdução e explicação sobre os temas que serão abordados adiante,tais como CD, programação em par, desenvolvimento guiado a testes, colaboração,groupware, dentre outros;

• Estado da Arte: apresenta uma revisão da literatura com projetos semelhantes e umestudo comparativo entre eles;

• DojOn: expõe os requisitos básicos do sistema, sua arquitetura, protótipo cominterface gráfica e diagramas de desenvolvimento e cenários que ilustram seu funcio-namento.

• Por fim, as conclusões do projeto e os trabalhos futuros são apresentados.

Page 28: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(
Page 29: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

27

2 Coding Dojo

A palavra Dojo, traduzida do Japonês, significa ’local do caminho’. Foi utilizadaoriginalmente para designar espaços de meditação dos monges budistas. Neste contexto,pode ser traduzida como ’o local para estudar a vida’. Hoje em día, é bem conhecida comoo local onde artes marciais são praticadas (BATISTA; NETO; NORONHA, 2013).

Coding Dojo (CD) é uma atividade que tem sido utilizada por programadorespara treinar práticas ágeis, especialmente, desenvolvimento guiado por testes (Test Drive-Development - TDD), programação em par e baby steps (BISSI, 2007). Em uma sessão deCD, programadores se juntam para aprender uns com os outros em um ambiente social eamigável.

O objetivo do CD é a prática de metodologias ágeis para o aprendizado, melhora-mento e até desenvolvimento de sistemas. As metodologias ágeis mais comuns utilizadasem CDs são a programação em par, o desenvolvimento guiado por testes e baby steps. Opropósito principal é que o participante melhore a forma como escreve seus códigos deprogramas, aprendendo com a experiência de outros participantes.

Um CD normalmente é realizado em um intervalo de tempo de uma a duas horas.Ele pode ser realizado em diversas linguagens de programação e todos os participantespraticam diante de apenas um computador, um teclado e um mouse, sendo a tela dessecomputador projetado para que todos tenham acesso ao que está sendo desenvolvido ecada dupla se reveza até que todos passem pelo computador para dar sua contribuição eresolver o problema proposto (BRUM; PEREIRA, 2012).

O primeiro passo para realizar um CD é escolher um desafio de programação.Não há a necessidade de resolver ou terminar o desafio durante o CD. Em turnos detempo limitado, um par trabalha na solução, usando um computador, fazendo pequenospassos na direção da solução, usando TDD e, o mais importante, comunicando a ideia aosespectadores. Quando o tempo acaba, o piloto, que é o que está escrevendo o código, sejunta ao resto dos espectadores. O co-piloto, que é quem ajuda o piloto, passa pro lugardo piloto, sendo a vez dele escrever código. Um voluntário da platéia torna-se co-piloto.Cada turno pode ter um expert e um iniciante, para assim aprenderem juntos. A Figura1 é uma esquematização do CD.

Page 30: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

28 Capítulo 2. Coding Dojo

Figura 1: Esquematização do Coding Dojo. Adaptada de Coding-Dojo (2015).

2.1 Programação em Par

A programação em par é a prática de ter dois programadores trabalhando junto emum mesmo computador, e tem como objetivo melhorar a comunicação e compartilhamentode conhecimento entre estes, influenciando assim, a produtividade e a qualidade de software.A programação em par foi popularizada pela metodologia ágil Programação Extrema(eXtreme Programming - XP) (BECK, 2003).

A programação em par funciona da seguinte maneira: um programador controla oteclado e o mouse, escrevendo o código, e o outro fornece sugestões. Depois de um intervalode tempo, os papéis são trocados, dando assim a oportunidade dos dois programadorestrabalharem igualmente no código.

Os dois programadores possuem papéis diferentes: aquele que está digitando échamado de piloto (driver) e o que está observando e dando sugestões sobre o código(procurando erros, pensando em alternativas, considerando implicações estratégicas, etc.)é chamado de co-piloto (navigator). O conceito pode ser visualizado na Figura 2, onde écomparado a prática de programação em par à prática de dirigir um carro.

Page 31: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

2.2. Desenvolvimento Guiado por Testes 29

Figura 2: Comparação da prática de programação em par com a prática de dirigir umcarro. Adaptada de Pair-programming (2015).

Esta prática tem a intenção de manter cada programador na tarefa, realizandobrainstorms para o refinamentos desta, esclarecendo ideias, tomando a iniciativa quandoseu parceiro está com dificuldades (BATISTA; NETO; NORONHA, 2013).

Defensores da programação em par assumem as seguintes vantagens: melhora atransferência de conhecimento, resultados finais mais significativos e melhora no processode formação de equipe. Pesquisas têm mostrado que a programação em par é útil paracompletar tarefas complexas e criar código mais legível (WALDMANN; LEHMAN, 2010).

A prática de desenvolver software em grupo e equipe vem crescendo cada vezmais na comunidade computacional. Existe a necessidade de um maneira rápida, segurae eficiente para programadores desenvolverem numa mesma versão de um código. Esteproblema está se tornando cada vez mais relevante na medida que a programação em parganha seguidores e os programadores dependem uns dos outros para apoio e solução deproblemas (RASMUSSON, 2010).

2.2 Desenvolvimento Guiado por TestesCom TDD, os desenvolvedores seguem duas regras: escrever código apenas se um

teste automático falha e eliminar repetições (BECK, 2003). Tendo, assim, um ciclo dedesenvolvimento curto e rápido. Essas duas regras implicam numa ordem para as tarefas

Page 32: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

30 Capítulo 2. Coding Dojo

de programação, conhecida como o mantra TDD: vermelho-verde-refatorar. Vermelho -primeiro escrever um teste simples que falha; verde - fazer o teste funcionar rapidamente,e refatorar - eliminar qualquer duplicação criada, unicamente, ao fazer o teste funcionar.TDD é um conjunto de técnicas que "incentiva projetos simples e conjuntos de testes queinspirem confiança". Na Figura 3, observa-se o ciclo do TDD explicado acima.

Figura 3: Ciclo do Desenvolvimento Guiado por Testes. Fonte - Ciclo-TDD (2015).

Como pode ser observado na figura, podemos detalhar, mais aprofundadamente, ociclo de desenvolvimento guiado por testes funciona da seguinte maneira:

1. Adicione um teste - cada nova funcionalidade inicia com a criação de um teste. Esteteste precisa inevitavelmente falhar porque ele é escrito antes da funcionalidade serimplementada. Para escrever um teste, o desenvolvedor precisa claramente entenderas especificações e requisitos da funcionalidade. O desenvolvedor pode fazer issoatravés de casos de uso que cubram os requisitos e exceções condicionais. Esta é adiferenciação entre desenvolvimento dirigido a testes entre escrever testes de unidade’depois’ do código desenvolvido. Ele torna o desenvolvedor focado nos requisitos’antes’ do código, que é uma sutil mas importante diferença.

2. Escrever código - este passo é escrever código que irá ocasionar ao teste passar. Onovo código escrito até esse ponto poderá não ser perfeito e pode, por exemplo,passar no teste de uma forma não elegante. Isso é aceitável porque posteriormenteele será melhorado.

Page 33: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

2.3. Baby Steps 31

3. Refatorar código - neste ponto o código pode ser limpo como necessário. Ao re-executar os testes, o desenvolvedor pode confiar que a refatoração não é um processodanoso a qualquer funcionalidade existente. Um conceito relevante nesse momento éo de remoção de duplicação de código, considerado um importante aspecto ao designde um software.

4. Repita tudo - iniciando com outro teste, o ciclo é então repetido, empurrando afuncionalidade a frente. O tamanho dos passos deve ser pequeno - tão quanto de1 a 10 edições de texto entre cada execução de testes. Se novo código não satisfazrapidamente um novo teste, ou outros testes falham inesperadamente, o programadordeve desfazer ou reverter as alterações ao invés do uso de excessiva depuração.

Utilizado dentro do contexto de um Coding Dojo, a prática de desenvolvimentoguiado por teste deve seguir outras regras. Como foi mencionado anteriormente, o pilotoescreve um teste que falhe (vermelho), pois não existe código para este teste, nestemomento, não deve haver participação da platéia, apenas do co-piloto, se necessário. Apósescrever código para esse teste e ele passar (verde), a platéia pode sugerir outras soluçõese participar do processo de refatoração. Resumidamente, esta regra diz o seguinte:

• Vermelho - Não deve haver participação da platéia, apenas do piloto e co-piloto;

• Verde - A platéia pode participar com dicas e sugestões.

2.3 Baby StepsAs metodologias ágeis incluem um conjunto de métodos de desenvolvimento de

software e providenciam uma estrutura conceitual para administrar projetos de Engenhariade Software. Uma delas são os Baby Steps (passos de bebê). Apesar de ser tentador fazergrandes mudanças em grandes passos, a prática "Baby Steps"confirma que as despesasgerais de pequenos passos são muito menores do que quando uma equipe volta atrás degrandes mudanças. Esta prática é especialmente usada no TDD, a qual procede em umteste de cada vez (BATISTA; NETO; NORONHA, 2013).

Como parte do trabalho descrito em (LUZ; NETO; NORONHA, 2013), uma pes-quisa digital com diferentes grupos de Coding Dojo no Brasil foi realizada, e concluiu-se queessa atividade favorece a colaboração em ambientes de aprendizado. Em (HEINONEN K.;VIHAVAINEN, 2013), expõe-se que 82% dos participantes recomendariam a participaçãoem sessões de Coding Dojo para seus colegas.

No trabalho experimental, descrito em (LUZ; NETO; NORONHA, 2013), teve 64participantes (com mais de 10 sessões de Coding Dojo). A maioria (64%) respondeu que

Page 34: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

32 Capítulo 2. Coding Dojo

os baby steps simplificam o processo de achar a solução, o uso de TDD ajuda aprender ametodologia e a programaçãoo em par ajuda a nivelar o grupo.

Acima foram citadas algumas evidências de que um ambiente colaborativo integradoà metodologia do Coding Dojo pode ser de benefício para a aprendizagem de programacaçãoou o reforço dessa aprendizagem.

Page 35: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

33

3 Fundamentos

Colaboração é uma palavra importante nesse estudo. Esta remete a várias cate-gorias como aprendizagem colaborativa, escrita colaborativa e, principalmente, softwarecolaborativo.

O uso de estratégias de colaboração e de apoio melhora o processo de ensino-aprendizagem, facilitando o trabalho em grupo e à distância. Neste capítulo, serão concei-tuados Sistemas Colaborativos e Engenharia de Groupware, que são a área e sub-área demaior foco neste trabalho. Web-IDE é um caso de estudo da Engenharia de Groupwareque, também, possui grande importância para o entendimento do trabalho.

3.1 Sistemas Colaborativos

Segundo (SCHATTEN; PöLZ; EPHESER, 2007), a comunicação e colaboraçãosão apoiadas por uma infinidade de aplicações e sistemas diferentes. Ao mesmo tempo,novas necessidades de colaboração surgem: as pessoas querem se comunicar em tempo real,compartilhar recursos, manter o controle de seus problemas e não querem ser perturbadasdesnecessariamente.

Programadores constantemente colaboram uns com os outros. As maneiras maiscomuns de compartilhamento entre eles é: dividindo um único computador e uma IDE(Integrated Development Environment), ou compartilhando o código fonte por um Sistemade Controle de Versão (SCV), como o Git1. Porém, nenhum desses fornece suporte a umacolaboração síncrona em tempo real entre os programadores que contribuem ativamentecom o mesmo código.

Utilizar um sistema de controle de versão requer que os programadores manual-mente atualizem seu código, podendo criar vários conflitos no código. Por exemplo: doisprogramadores estão trabalhando em um mesmo arquivo computadores diferentes; se oProgramador 1 alterar uma determinada linha do arquivo e enviar suas alterações parao repositório online e o Programador 2 também realizar alguma modificação no mesmoarquivo, e também enviar suas modificações para o repositório segundos depois que oProgramador 1, este não terá as novas atualizações que o Programador 1 realizou e istogerará um conflito. Compartilhar uma única IDE também gera conflitos, por exemplo:utilizar uma única IDE significa que apenas o programador que controla o teclado emouse pode escrever código, e os outros podem dar opiniões de como o código deve serescrito. Porém, dessa maneira a comunicação pode ficar incompreensível, dependendo do

1 http://git-scm.com

Page 36: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

34 Capítulo 3. Fundamentos

número de participantes presentes, ou, mesmo, os participantes observadores podem ficardesinteressados no código que está sendo desenvolvido.

Segundo (PELLEGRINO; HILTON, 2012), nos últimos anos, as técnicas de co-laboração têm sido cada vez mais adotadas e desenvolvidas para serviços baseados naWeb. Estes serviços têm aumentado o interesse no desenvolvimento colaborativo por ter,principalmente, uma grande variedade de aplicações. Sistemas colaborativos suportammúltiplos usuários trabalhando juntos para editar um documento compartilhado em umarede. O documento compartilhado pode ser de vários formatos, desde um texto simples aum formato complexo como um ambiente virtual. Sistemas colaborativos podem permitirparticipantes editar colaborativamente o mesmo documento simultaneamente (em temporeal), não simultaneamente (não em tempo real), ou combinando estes dois (a qualquermomento). Os principais benefícios dos sistemas colaborativos incluem (1) a redução dotempo de conclusão de uma tarefa, aproveitando o paralelismo e (2) a melhor qualidadede solução.

Na última década, várias ferramentas de apoio à colaboração foram desenvolvidas.No nível mais alto, existem dois tipos de ferramentas de colaboração. Por um lado, háo compartilhamento de tela e aplicativos de desktop remoto. Essas aplicações replicamo ambiente de trabalho de um usuário e permitem que usuários remotos colaborarem,assumindo o controle do mouse e do teclado. Por outro lado, estão as ferramentas decolaboração que se estendem em áreas específicas apenas para criar um espaço de colabora-ção compartilhado. Ferramentas de colaboração podem, então, ser ainda sub-classificadasem editores colaborativos (que são projetados para edição de textos arbitrários) e edi-tores especializados (que se concentram em um domínio de aplicação específica como odesenvolvimento de software, e são muitas vezes integradas em aplicações já existentes)(GADHIKAR et al., 2013).

A área de Sistemas Colaborativos desenvolveu-se rapidamente e já tem bastantematuridade. Estes sistemas têm sido aplicados, com sucesso, tanto em sistemas de trabalho- CSCW (Computer-Supported Cooperative Work) - como em sistemas de aprendizagem -CSCL (Computer-Supported Collaborative Learning). O paradigma de colaboração temcomo um dos domínios de aplicação a construção de programas, sendo denominadoDesenvolvimento Colaborativo de Aplicações. Este último não deve-se confundir com De-senvolvimento de Aplicações Colaborativas, também denominado Engenharia de Groupware(FUKS et al., 2008). Neste trabalho, é focado o Desenvolvimento de Aplicações Cola-borativas, pois o objetivo é desenvolver um sistema coloborativo e não desenvolvê-locolaborativamente.

Page 37: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

3.2. Engenharia de Groupware 35

3.2 Engenharia de GroupwareOs ambientes virtuais colaborativos, também denominados groupwares, são simula-

ções de mundos reais ou imaginários, onde vários usuários podem interagir em tempo real,compartilhar informações e manipular objetos no ambiente.

Apesar da crescente popularidade, groupwares ainda apresentam uma série dedesafios em seu desenvolvimento. Entre esses desafios podem ser mencionados os problemasrelacionados ao gerenciamento de recursos de rede (controle de concorrência, perda dedados, escalabilidade, etc.), às aplicações gráficas em tempo real (por exemplo, alocação deCPU para geração das imagens) e às aplicações multi-usuários (por exemplo, manutençãode consistência entre os usuários). Também, há as dificuldades específicas da área deaplicação do groupware, tais como a integração com grandes bases de dados (por exemplo,para as informações geográficas de simulações militares) e a autenticação de usuários (paraaplicações de comércio eletrônico, por exemplo) (FUKS et al., 2008)

Um groupware online permite um acesso universal aos dados e a criação de gruposde trabalho. É uma tecnologia que permite que um grupo de pessoas possam trabalharno mesmo aplicativo ou sistema, não importa onde eles estejam. A seguir são listadas asprincipais características de um groupware:

• permite que usuários acessem dados idênticos de qualquer dispositivo com conexão àInternet;

• projetado para armazenar e gerenciar os dados, oferecendo fácil acesso;

• registra modificações feitas e quem foi o responsável pela modificação;

• melhora a comunicação entre os usuários com meios e comunicação audiovisual e/ouescrita.

Estudos apontam que dois de dez programadores trabalhando juntos simulta-neamente sugerem que edição compartilhada em tempo real é eficaz e divertida. Istooferece novas oportunidades para desenvolvimento de software colaborativo (GOLDMAN;LITTLE; MILLER, 2011).

3.3 Web-IDEIDEs são ferramentas úteis na criação, edição e teste do código. Uma IDE tem

muitas ferramentas para fazer o trabalho do programador mais fácil, como: destaque dasintaxe, indentação e formatação automáticas, diagramas de hierarquia de classes, etc.(SALINGER et al., 2010). A última tendencia é pegar aplicações online de desktop e

Page 38: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

36 Capítulo 3. Fundamentos

fornecê-las como um servico (HARDING, 2014). IDEs, que são usadas para programare desenvolver aplicações podem ser um software na nuvem. Para isto, a IDE deve sersuportada por um navegador Web.

Com a introdução de um editor colaborativo em tempo real, a restrição de, obriga-toriamente, os dois programadores estarem no mesmo lugar, para realizar a técnica deprogramação em par, poderia ser descartada.

A Computação em nuvem é o futuro da Computação. A característica mais relevanteé o fato de que tudo, incluindo dados e aplicações são armazenados na nuvem e são acessadospor uma conexão de Internet e um navegador Web. Esta permite que usuários acesseme compartilhem informações de dispositivos como laptops, desktops, smartphones, entreoutros, que possuam acesso à Internet. A Computação em nuvem permite usuários de todoo mundo acessar aplicações sem ter que fazer download ou instalações no seu computador.Esta pode fornecer ilimitado amazenamento virtual, ao contrário de servidores locais ouhard-drives.

Segundo (YOO; SCHANZER; KRISHNAMURTHI, 2011), um ambiente de progra-mação que roda inteiramente dentro de um navegador Web oferece muitos benefícios paraeducadores e alunos, dentre eles:

• qualquer usuário com um navegador Web pode usar o ambiente sem a instalação deoutras ferramentas;

• o armazenamento de programas na nuvem, que permite o compartilhamento fácil,tendo sempre acesso aos seus arquivos de qualquer lugar;

Um ambiente Web de desenvolvimento integrado (Web-IDE) é uma IDE baseada emnavegador que possibilita um ambiente de trabalho portátil. Muitas Web-IDEs suportamvárias linguagens de programação, enquanto outras suportam apenas uma linguagemespecífico. A maioria dos IDEs Web permitem acesso a uma linha de comando quepermite ao usuário instalar ou executar qualquer software que seja necessário para odesenvolvimento, permitindo o controle "total"sobre o ambiente de desenvolvimento. Web-IDEs de código aberto permitem a instalação em servidores ou máquinas locais e pode serusado para dar ao desenvolvedor mais controle sobre o ambiente de desenvolvimento. Asvantagens de se utilizar uma Web-IDE são:

• acesso a partir de qualquer lugar ou em qualquer computador (com acesso à Internet);

• espaço de trabalho centralizado;

• não há necessidade de instalar softwares localmente;

• pode ser usado como uma IDE de desktop quando configurada para trabalhar offline.

Page 39: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

3.3. Web-IDE 37

Por outro lado, existem alguns problemas ao se utilizar uma Web-IDE:

• possíveis problemas de segurança;

• possível inatividade do servidor;

• a maioria não suporta smartphones ou tablets;

• além de ser necessário uma boa conexão de Internet.

Algumas IDEs online são bem conhecidas pelos desenvolvedores Web, incluindoCloud92, Nitrous.IO3, Jsfiddle4, e Jsbin5. Cloud9 e Nitrous.IO são exemplos de IDEsbaseadas na Web, que suportam uma grande variedade de recursos de desenvolvimento deproduto. Eles suportam SCV, desenvolvimento colaborativo de múltiplos usuários, assimcomo compilação e execução de um projeto. Enquanto isso, jsfiddle.com e jsbin.com sãoexemplos de serviços de compartilhamento de código. Nesses serviços, os desenvolvedorespodem escrever código HTML/CSS/JavaScript e compartilhá-lo.

2 http://c9.io3 https://www.nitrous.io4 http://jsfiddle.net5 http://jsbin.com

Page 40: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(
Page 41: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

39

4 Estado da Arte

Os trabalhos apresentados a seguir foram pesquisados no Google Acadêmico1,usando os termos de busca Collaborative Code System (Sistema Colaborativo de Programa-ção) e Web-IDE. Existe uma variedade de aplicações Web de código aberto e comercial paraprogramação colaborativa. Nesse capítulo, serão apresentados o objetivo, a arquiteturabásica, dentre outras características de algumas delas. No fim, uma tabela comparativaexpõe um resumo deles com as características mais relevantes a uma Web-IDE colaborativa.

4.1 DEVaaS

Desenvolvimento como Serviço (DEVaaS - Development as a Service) (MATSU-MOTO et al., 2012) é um ambiente de desenvolvimento, no qual o desenvolvimento e aimplementação são integrados. O sistema, atualmente, suporta sistema de rastreamento debugs, sistema de integração contínua, sistema de controle de versão, várias linguagens deprogramação conhecidas, um editor e um ambiente de implementação em nuvem. Permiteváriadas linguagens de programação (LPs).

SaaS, Software como Serviço, é um software que fornece os serviços necessáriosapenas quando é realmente requerido (GADHIKAR et al., 2013). Por outro lado, PaaS,Plataforma como Serviço, é uma plataforma onde o desenvolvimento de software integradoé executado usando o ambiente de rede (GADHIKAR et al., 2013). O objetivo de DEVaaSé integrar ambos, SaaS e PaaS.

No lado do cliente, o usuário precisa instalar Eclipse2 e um SCV. Eclipse é usadocomo um editor de código fonte, enquanto o SCV é utilizado para administrar o códigofonte e o documento do projeto em questão. DeVaaS foi desenvolvido com o frameworkpara desenvolvimento de aplicações Ruby on Rails3.

4.2 Collabode

Collabode (GOLDMAN; LITTLE; MILLER, 2011) é uma IDE open source4 paraprogramar em Java5, colaborativamente, via navegador. Modificações de múltiplos pro-gramadores são compartilhadas imediatamente, e cada programador possui uma interface

1 https://scholar.google.com.br2 https://eclipse.org3 http://rubyonrails.org4 https://github.com/uid/collabode5 https://www.java.com

Page 42: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

40 Capítulo 4. Estado da Arte

diferente relacionada ao seu esforço na colaboração. O programador deve utilizar umnavegador para se conectar a um servidor Collabode, o qual hospedará seu projeto.

A Figura 4 mostra a interface gráfica do Collabode. A interface do usuário foiimplementada em HTML e JavaScript e roda completamente no navegador. Novos progra-madores podem se juntar a um projeto e, imediatamente, começar a trabalhar simplesmentevisitando a URL. Não há a necessidade de verificar o código ou configurar o ambiente dedesenvolvimento local.

Figura 4: Interface do Collabode. Fonte: (GOLDMAN; LITTLE; MILLER, 2011).

No servidor, Collabode usa Eclipse para administrar projetos e serviços padrõesda IDE como: compilação contínua, erros do compilador, avisos, formatação de código,refatoração e execução. Qualquer projeto existente pode ser compilado e modificado usandoo editor do Collabode, que possui uma interface semelhante ao Eclipse. O código é executadono servidor e o(s) cliente(s) podem visualizar a saída do console. Portanto, Collabode nãoé atualmente adequado para desenvolver programas com interfaces gráficas. Collabodeutiliza EtherPad6 para suportar colaboração múltipla entre colaboradores simultâneos.

6 http://etherpad.org/

Page 43: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

4.3. Saros 41

4.3 SarosSaros (SALINGER et al., 2010) é um plugin open source7 para o Eclipse IDE, que

oferece ao desenvolvedor a habilidade de trabalhar colaborativamente em seus projetos,permitindo acesso simultâneo à edição destes. Ao editar documentos, os desenvolvedorespodem ver imediatamente as modificações feitas por todos os outros participantes e Sarosvisualiza quem é responsável por cada alteração.

Figura 5: Interface do plugin Saros. Fonte: (SALINGER et al., 2010).

A seguir são listados alguns recursos e componentes do Saros, que podem servisualizados na Figura 5, os quais permitem ao usuário se manter consciente do que seuscolaboradores estão fazendo.

1. Arquivos marcados, onde usuários com permissão de escrita tenham aberto (amarelo)ou visualizados (verde).

2. Texto atual selecionado por outro usuário.7 https://github.com/saros-project/saros

Page 44: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

42 Capítulo 4. Estado da Arte

3. Texto alterado por outro usuário (por padrão, as últimas vinte edições estão marca-das).

4. Vista atual de outros usuários (ou seja, que parte de um arquivo estão visualizando).

5. Usuários na sessão atual. Observe como sua cor aqui corresponda às suas anotaçõesno editor.

6. Lista de contatos.

7. Janela de chat, para você pode enviar mensagens instantâneas para todos na sessãoatual.

Saros é projetado para gerenciar e mapear formas de colaboração em um ambientedistribuído. Isto implica que a maioria dos benefícios de interação humana cara-a-caraprecisa ser compensada por Saros. Para a comunicação entre os desenvolvedores, Sarosoferece um chat, onde é possível visualizar os ’editores’ que estão online e os que estãooffline, além de conversar em grupo.

4.4 CollegeCOLLEGE (COLLaborative Edition, compilinG, and Execution of programs) (BRAVO;

REDONDO; ORTEGA, 2004) é um sistema desenvolvido para suportar a programação emgrupo. O propósito de College é ser um sistema colaborativo síncrono para a aprendizagemde programação, que pode ser usado tanto em laboratórios como em outros lugares (emcasa, bibliotecas, etc.). De acordo com o modelo que foi construído, o sistema suportaedição, compilação e execução de programas em grupo pelos alunos, e a revisão do tra-balho realizado dos estudantes pelo professor para tirar conclusões sobre o processo deprogramação em grupo.

O sistema está desenvolvido em Java e funciona seguindo o modelo cliente/servidor.O subsistema de sincronização funciona sobre a Infra-estrutura de Sincronização paraSistemas Colaborativos (ISSC), desenvolvida a partir do Java Shared Data Toolkit8 (JSDT).JSDT apresenta uma arquitetura de comunicação centralizada.

4.5 JmellowJMellow (SCHATTEN; PöLZ; EPHESER, 2007) é um framework para colaboração

instantânea. JMellow foi criado como um projeto de pesquisa, porque foi vista a necessidadede uma plataforma de fácil configuração, que permita a comunicação instantânea e,particularmente, a troca de recursos como anotações, discussões e versionamento.8 https://eclipse.org/webtools/jsdt/

Page 45: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

4.6. TouchDevelop 43

JMellow pode ser visto mais como um middleware de colaboração instantânea quecomo um sistema específico baseado em cliente, ou seja, o sistema pode ser facilmenteincorporado em uma infra-estrutura existente. A Figura 6 apresenta a interface gráfica doJmellow.

Figura 6: Interface do Jmellow. Fonte: (SCHATTEN; PöLZ; EPHESER, 2007).

4.6 TouchDevelop

TouchDevelop9 (FAHNDRICH, 2014) é uma IDE puramente baseada na Webpara escrever pequenas aplicações em dispositivos touch, como smartphones e tablets. Osprogramas podem ser editados e executados no dispositivo sem um PC auxiliar. A transiçãoentre programar em um único dispositivo e continuar em outro é perfeita. O aplicativoWeb, também, funciona offline. A Figura 7 mostra a interface gráfica do TouchDevelop.

9 https://www.touchdevelop.com/

Page 46: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

44 Capítulo 4. Estado da Arte

Figura 7: Interface do TouchDevelop. Fonte: (FAHNDRICH, 2014).

Para os pesquisadores, TouchDevelop fornece uma plataforma de campo abertopara explorar: a IDE e o design da linguagem de programação, bem como as técnicas deexecução e abstrações de armazenamento de dados distribuídos.

O código de entrada em TouchDevelop é uma mistura entre a edição estruturadade instrução/bloco, e a entrada de símbolo (token) no nível de expressão. A entrada desímbolo (token) é crucial para a programação baseada em toque, pois evita a digitação de,por exemplo, palavras-chave, e substitui a programação de letra por letra pela seleção.

4.7 WikiNextWikiNEXT10 (ARAPOV; BUFFA; OTHMANE, 2014) é um mecanismo wiki escrito

em JavaScript. Muitos projetos, como o mecanismo MediaWiki11 da Wikipédia12 sãobaseada nela. MediaWiki é um exemplo de um mecanismo wiki para fazer a publicação deartigos. É extensível mediante plugins e extensões que devem ser instalados do lado doservidor.

WikiNEXT foi projetado para atuar em aplicações Web diretamente em um navega-dor. Este combina as funcionalidades wiki com aquelas de uma Web-IDE, para desenvolveraplicações Web. Ele oferece aos desenvolvedores uma API (Application Programming Inter-face) interna e oferece várias funcionalidades para explorar dados da Web. A abordagem10 http://wikinext.gexsoft.com/11 https://www.mediawiki.org/wiki/MediaWiki12 http://pt.wikipedia.org/

Page 47: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

4.8. WeScheme 45

usa templates e um tipo especial de páginas wiki, que representam o modelo semântico dedados. A Figura 8 mostra a interface na criação de uma página do WikiNext. Como podeser observado, ao incluir links e figuras no editor, WikiNEXT realiza a leitura destes linkse cria um layout amigável par ao usuário com todas as informações que foram passadaspor links no editor.

Figura 8: Interface do Wikinext na criação de uma página. Fonte: (ARAPOV; BUFFA;OTHMANE, 2014).

4.8 WeScheme

WeScheme (YOO; SCHANZER; KRISHNAMURTHI, 2011) roda num navegadorWeb e suporta desenvolvimento interativo. Os programadores podem salvar códigosdiretamente na Web, tornando-os acessíveis a partir de qualquer lugar. Como resultado,o compartilhamento de programas é o foco central de WeScheme. WeScheme é utilizadopor estudantes, e é, especialmente, valioso em escolas que têm proibições de instalação desoftwares ou não têm a demanda computacional para ambientes de programação.

WeScheme oferece duas linguagens de programação Scheme13 e Racket14 paraconstruir programas. Ele fornece um editor com destaque de sintaxe, uma ferramentainterativa para executar programas e um hub para compartilhar programas. A Figura 9mostra a interface gráfica do Wescheme.

13 http://www.schemers.org/14 http://racket-lang.org/

Page 48: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

46 Capítulo 4. Estado da Arte

Figura 9: Interface do WeScheme. Fonte: (YOO; SCHANZER; KRISHNAMURTHI, 2011).

4.9 D&GDoppel e Ganger (D&G) (CHANDRA; LIEM, 2013) é uma aplicação Web destinada

para o monitoramento de processos de codificação, através da gravação de atividades dedigitação. Ele também suporta a compilação e execução online. O propósito de D&G éapoiar o processo de aprendizagem de programação.

D&G pode ser usada a partir de um computador independente ou como parte de umsistema integrado de aprendizagem de programação. O editor de código, chamado Doppel,lida com a edição e processo de gravação e classificação do código fonte. O compiladoré chamado de Ganger e é responsável por delegar a compilação ou execução. D&G foiimplementado usando JavaScript e HTML515.

D&G não é um editor para desenvolver um aplicativo, ele é projetado com o objetivode aprender a programar. Com esta especialidade, D&G tem suas próprias exigências.15 https://html5.org/

Page 49: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

4.10. Cloud9 47

Existem dois requisitos funcionais: (1) edição do código fonte e compilação / execução, (2)a gravação e classificação do processo de digitação.

4.10 Cloud9

A IDE Cloud9 fornece o serviço de um editor online, como ilustra a Figura 10. Foidesenvolvido em JavaScript, especialmente Node.js16. A IDE Cloud9 é um ambiente dedesenvolvimento colaborativo online e pode importar projetos do GitHub. Este permiteprogramar em variadas linguagens de programação. Por exemplo: Ruby17, C++, Javascript,Java, Python18, etc.. Possui um compilador/interpretador para executar programas epermite a instalação de qualquer biblioteca necessária para executar o sistema peloterminal. Oferece um chat para comunicação entre os usuários de um mesmo projeto.

Figura 10: Interface do Cloud9. Fonte: (MATSUMOTO et al., 2012).

A IDE é relativamente nova e em constante desenvolvimento. O número de recursose linguagens suportados está em constante evolução. As principais características incluem:colaboração em tempo real, implementação do código em serviços como o Heroku19 e a

16 http://nodejs.org/17 https://www.ruby-lang.org/pt/18 https://www.python.org/19 https://www.heroku.com/

Page 50: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

48 Capítulo 4. Estado da Arte

execução e compilação de código no próprio navegador. Além disso, há uma versão offlineda IDE, que pode ser instalada e usada localmente, sem conexão com a Internet.

Desde a atualização mais recente do Cloud9, os programadores podem compartilharseu código com os outros, conceder acesso de gravação e código de colaboração em temporeal. Finalmente, Cloud9 é uma aplicação de código aberto20, hospedado no GitHub21. Osprogramadores podem desenvolver plugins para ampliar suas funcionalidades, alterar ocódigo existente e contribuir para o crescimento da IDE (PFEIFFER; METZKE, 2014).Para isto, é necessário solicitar permissão à plataforma Cloud9, e esta por sua vez deveanalisar e validar esta nova contribuição, pois será hospedada no próprio servidor daplataforma.

4.11 Resumo ComparativoPara estabelecer a comparação foram definidas as seguintes características consi-

deradas como importantes dentro do foco deste trabalho: Web-IDE colaborativa. Elassão:

• Colaborativo - permitem colaboração simultânea e/ou assíncrona?

• Código aberto - o código de implementação é aberto para a comunidade?

• Tipo de Ambiente - qual é o tipo de sistema? Por exemplo: plugins, Web-IDE,IDE, framework, etc.

• Plataforma - qual é o ambiente de uso - se são próprios para navegador, desktopou dispositivo móveis.

• Dependências - quais dependências possui para instalação e/ou uso?

• Implementação - qual a linguagem predominante utilizada para sua implementa-ção?

• LPs - quais linguagens de programação são oferecidas para a construção de progra-mas?

A Tabela 1 ilustra as características para cada um dos dez sistemas descritos nestecapítulo.

Observou-se que 70% dos sistemas estudados são colaborativos, 60% são Web epossuem uma IDE Web, o que confirma a tendência atual. 50% oferecem mais de uma20 https://github.com/c9/core21 https://github.com/

Page 51: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

4.11. Resumo Comparativo 49

Colabo- Código Tipo de Plataforma Dependências Implementação LPsrativo Aberto ambiente

DEVasS Sim Sim Plugin Desktop Eclipse e SCV Ruby Variadas

Collabode Sim Sim Web-IDE Web Nenhuma Java Java

Saros Sim Sim Plugin Desktop Eclipse Java Variadas

College Sim Não Web-IDE Web Nenhuma Java Variadas

Jmellow Sim Não Framework Desktop Nenhuma Não Informado Não possui

TouchDev Não Não IDE Mobile Nenhuma Não Informado Própria

WikiNext Não Não Web-IDE Web Nenhuma Não Informado Não possui

WeScheme Sim Não Web-IDE Web Nenhuma Não Informado Scheme/Racket

D&G Não Não Web-IDE Web Nenhuma JavaScript Variadas

Cloud9 Sim Sim Web-IDE Web Nenhuma JavaScript Variadas

Tabela 1: Comparação entre os sistemas estudados.

linguagem de programação para os programadores, o que é relevante e bastante útil paranossa comunidade e a formação de desenvolvedores.

O Collabode e o Cloud9 são os sistemas mais similares com o proposto nestetrabalho, pois são colaborativos, suas IDEs baseadas na Web e sem dependências, alémde serem sistemas de código aberto, fato que melhora o entendimento de como foramimplementados. O maior diferencial entre estes dois sistemas é que o Collabode apenasaceita a programação em Java para o usuário final, enquanto o Cloud9 aceita váriaslinguagens de programação.

Apesar dos trabalhos analisados neste capítulo serem relacionados ao proposto,nenhum deles possui como base o conceito do Coding Dojo em si. O maior diferencial dotrabalho proposto é a administração do tempo que cada participante tem para programar eque, mesmo sendo uma aplicação colaborativa em tempo real, apenas um participante podeeditar o código na sua vez e o restante dos participantes ficará observando e aguardandosua vez, de acordo com a filosofia escolhida.

Page 52: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(
Page 53: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

51

5 DojOn

O ambiente Web colaborativo proposto recebeu o nome DojOn - Dojo Online - porter como finalidade a filosofia do Coding Dojo. Este ambiente pretende criar sessões entreprogramadores para a prática de programação.

Neste capítulo, apresentamos uma visão geral do ambiente proposto neste trabalho.Apresentamos os objetivos; o conceito do sistema, onde são descritos como deve ser oambiente e como este deve funcionar; os princípios do projeto, onde são listados os requisitosbásicos que devem ser satisfeitos pelo sistema; a arquitetura e o do desenvolvimento dosistema, incluindo o processo de implementação. Por fim, apresentamos os cenários de usomais relevantes do sistema, com as respectivas interfaces, e o sumário com o resumo docapítulo e a verificação do cumprimento dos princípios de projeto.

5.1 ObjetivosO objetivo do projeto é o desenvolvimento de um ambiente virtual colaborativo

que permita encontro entre usuários para a prática de programação, seguindo a filosofia doCoding Dojo, com a finalidade de facilitar a realização deste, devido aos vários benefíciosque a Web oferece.

O sistema tem o objetivo de criar um ambiente que ofereça uma plataforma comtodos os itens necessários para sessões de Coding Dojo Online.

5.2 Conceito do AmbienteOs usuários indicados para usar o ambiente são programadores que já têm, pelo

menos, alguma experiência em programação. Em uma mesma sessão, podem ter usuárioscom diferentes níveis de experiência, o que é altamente recomendado, pois isso acabagerando aprendizado para aqueles mais novatos.

Para ter acesso ao ambiente, os usuários devem realizar um cadastro básico. Apóso login, cada usuário pode criar uma nova sessão ou participar de uma sessão já iniciada àqual foi convidado. Quando feito um convite, o usuário convidado recebe no seu email oendereço Web da sessão.

Uma vez começada a sessão, é criado uma lista com o primeiro participante quecomeçará e a sequência dos próximos; é exibido, para todos os participantes, um problemade programação aleatório; e é definido um tempo n já padrão, que é tempo que cadaparticipante tem para utilizar o editor na sua vez. A sessão espera que haja pelo menos

Page 54: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

52 Capítulo 5. DojOn

dois participantes. Se não houver mais de dois participantes a sessão é automaticamenteterminada. Se houver mais de dois participantes, o primeiro participante da lista começacom a solução do problema, podendo utilizar o editor. Este participante é realocado nofinal da lista. Após n minutos é a vez do próximo participante na sequência. Essa rotinaacontece até o problema ser resolvido ou até que não haja mais participantes na sessão.Todos podem se comunicar via chat. Todos podem trabalhar como assistentes e oferecerajudar ao piloto caso este esteja tendo algum problema, ou se estiver digitando algoequivocado, etc. A Figura 11 é o fluxograma detalhando o processo descrito anteriormente.

Figura 11: Fluxograma do DojOn.

O CD possui como regra o uso de TDD, por tal motivo, os participantes, alémde escrever código em uma linguagem de programação, devem escrever testes para estecódigo, o qual deve ser o único a ser executado para verificar se o código está funcionando.Existem variados frameworks para suporte de testes automatizados. Normalmente, cadaframework permite testar uma linguagem de programação específica, por exemplo: RSpec1

permite testar código em Ruby, JUnit2 em Java, Jasmine3 em JavaScript.

5.3 Princípios do Projeto

Para funcionar de acordo com o previsto, o sistema deve atender os dez princípiosde projeto básicos, expostos a seguir. Os princípios de projeto estão divididos em doisconjuntos. O primeiro refere-se aos princípios que satisfazem os requisitos impostos peloCoding Dojo ou os recursos para agir de acordo com sua metodologia. O segundo conjuntose refere aos princípios de projetos definidos pela autora.1 https://rubygems.org/gems/rspec2 http://junit.org/3 http://jasmine.github.io/

Page 55: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

5.4. Arquitetura do Sistema 53

Do Coding Dojo:

1. ser colaborativo: permitir que a solução de um problema seja construída em conjunto;

2. permitir interação comunicativa entre os usuários;

3. ter um gerenciador de tempo de uso dos participantes;

4. apresentar um problema de programação;

5. permitir desenvolvimento guiado a testes;

6. para cumprir o anterior, o editor de código deve permitir a criação/edição de pelomenos dois arquivos, um para o código e outro para teste;

7. começar as sessões de Coding Dojo com a presença virtual de dois ou mais partici-pantes.

Do sistema:

8. ser Web-IDE;

9. ser de código aberto;

10. permitir várias linguagens de programação e não se restringir a apenas uma, assimcomo, oferecer suporte para a inclusão de novas linguagens de programação;

5.4 Arquitetura do SistemaPara atender os princípios básicos listados acima, o sistema possui os seguintes

componentes básicos:

• editor de texto;

• compilador e/ou interpretador;

• meio de comunicação;

• gerenciador de tempo;

• gerenciador de uso;

• gerenciador de problemas de programação.

Page 56: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

54 Capítulo 5. DojOn

O gerenciador de uso gerencia os participantes. Para isto, o sistema deve permitira escrita de apenas um usuário por vez e criar uma lista de espera, além de determinar ointervalo de tempo que o usuário pode escrever código. O sistema deve avisar ao usuárioquando é sua vez de escrever código, quando o usuário não tem permissão de escrevercódigo e mostrar um relógio com contagem regressiva para que o usuário que está digitandosaiba quando tempo ainda lhe resta.

A Figura 12 mostra a arquitetura do sistema DojOn com os componentes básicosdo ambiente. Nele, o usuário pode:

• digitar no editor de texto;

• solicitar a execução de um arquivo no compilador/interpretador e este deve retornarmensagens de erros e/ou a saída do arquivo;

• pode interagir com outros usuário e ter retorno pelo meio de comunicação;

• escolher o intervalo de tempo que pode usar o editor pelo gerenciador de tempo eeste mostrar o tempo restante que o usuário ainda tem;

• ler o problema de programação e solicitar outro caso deseje no gerenciador deproblema.

Figura 12: Arquitetura do DojOn.

Page 57: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

5.5. Desenvolvimento do Ambiente 55

O gerenciador de tempo repassa para o gerenciador de uso o intervalo de tempoescolhido pelo usuário e este se encarrega de permitir ou proibir o uso do editor de texto.

5.5 Desenvolvimento do AmbienteNa revisão da literatura, foi mencionado que alguns projetos eram de código aberto.

Dois deles, Collabode e Cloud9 são os únicos que suprem todos os principais requisitos daproposta deste trabalho. Porém, apenas Cloud9 aceita várias linguagens de programação,inclusive frameworks para testes automatizados, pois permite instalar, a partir do terminal,qualquer pacote de dados disponível na Internet. Por exemplo, para instalar o frameworkRSpec de testes automatizados para a linguagem Ruby, basta digitar o comando deinstalação. Assim, optamos por criar um módulo para a IDE Cloud9, que adiciona osrecursos necessários para construir o ambiente proposto.

Cloud9 já possui um editor de texto, compilador/interpretador e frameworks paratestes automatizados para várias linguagens de programação, um ambiente de chat e umgerenciador de arquivos. Sendo assim, o módulo DojOn se encarregaria dos gerenciadoresde tempo e de usuários e da inclusão do problema de programação na interface do sistema.

Para a execução do sistema é necessário um navegador Web e uma conexão aInternet. Ao utilizar a IDE Cloud9 é preciso fazer um cadastro e realizar login para poderacessar sua área de trabalho.

Para a implementação do módulo em geral foi utilizada a plataforma Node.js,também utilizada para a construção da IDE Cloud9. Além de ser ideal para aplicaçõesdistribuídas de dados em tempo real, como no nosso caso, Node.js é uma plataformaem JavaScript baseada em eventos, o que ajuda a cuidar do problema de concorrênciaencontrada em sistemas síncronos.

Pacotes são os blocos de construção de Cloud9 SDK4. Cada item de funcionalidadedo Cloud9 é implementado em um pacote. Um pacote consiste em um ou mais plugins.Todos os plugins têm acesso a todas as APIs dos outros plugins do Cloud9. Isso significa queé possível estender, implementar ou re-implementar qualquer recurso para/de o Cloud9.

O módulo foi desenvolvido como um pacote para a IDE Cloud9. A idéia surgiu aose observar que a comunidade de desenvolvedores da plataforma é ativa e sempre estácriando novas ferramentas para esta, além da API Cloud95 ser aberta e bem documentada.O módulo DojOn é uma ferramenta para "gerenciar"uma sessão de Coding Dojo Online.

O Dojo Puzzles6 é uma página Web que possui um repositório de problemas deprogramação. O gerenciador de problemas do DojOn utiliza um script em JavaScript para4 http://cloud9-sdk.readme.io/v0.1/docs/contributing-to-cloud95 https://docs.c9.io/api/6 http://dojopuzzles.com/

Page 58: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

56 Capítulo 5. DojOn

mostrar os problemas presentes no Dojo Puzzles na interface do Cloud9, simplificandoassim o desenvolvimento do módulo e sem precisar usar uma base de problemas próprios.O gerenciador de problemas mostra ao usuário um problema de programação do DojoPuzzles, oferecendo mediante o Dojo Puzzles a opção ao usuário de trocar o problemacaso deseje. O gerenciador de problemas faz com que todos os usuários da sessão vejam omesmo problema, mesmo que um usuário tenha solicitado a troca. Portanto, os recursosdo DojOn são quatro: o timer, o sinal, o problema e o chat. Apesar do chat não ser umrecurso especificamente manipulado por nenhum dos gerenciadores do módulo, ele é umrecurso que o ambiente disponibiliza para os usuários.

A Figura 13 mostra a arquitetura relacional entre o DojOn, Cloud9 e o DojoPuzzles.

Figura 13: Arquitetura relacional entre o DojOn, Cloud9 e o Dojo Puzzles.

Assim, optamos por criar um plugin para a IDE Cloud9, que adiciona os recursos

Page 59: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

5.5. Desenvolvimento do Ambiente 57

necessários para construir o ambiente proposto. O DojOn tira proveito dos recursos jádisponíveis no Cloud9, integrando os mesmos como parte do ambiente. Adicionalmente, oDojOn é encarregado de desenvolver os gerenciadores de tempo, de usuários e de problemasde programação, que são os recursos idealizados pelo Coding Dojo. Respectivamente, cadagerenciador é responsável por:

• gerenciamento do tempo: deve ser definido o intervalo de tempo que o usuário tempor vez;

• gerenciamento de uso: deve criar uma fila de usuários por sessão e permitir apenasum usuário por vez digitar no editor de texto, proibindo os outros; e

• gerenciamento de problemas: deve se encarregar de mostrar o problema de progra-mação para o usuário.

Para construir os gerenciadores do DojOn, foram empregados três plugins quejuntos dão propósito ao módulo. Os plugins do DojOn possuem, cada um, um arquivo.html, .css e um .js. Nos arquivos .js ficam as funções específicas de cada um. Estesprecisam de arquivos .html, pois têm que mostrar algo ao usuário, como o relógio, osinal e o problema, respectivamente. Nos arquivos .css ficam os estilos de formato dosconteúdos.

O gerenciador de tempo permite ao usuário começar o seu tempo e mostra um relógiocom o tempo restante, além de emitir um aviso ao acabar o tempo deste. O gerenciador deuso deve manter uma fila de participantes e permitir ou negar ao(s) usuário(s) utilizar(em)o editor, mostrando um sinal vermelho ou verde para avisar ao usuário que é ou não a suavez.

Na Figura 14, pode-se obter uma visualização geral da interface do sistema. Afigura ilustra a interface com os componentes básicos enumerados: gerenciador de tempoe de uso, indicado pelo número (1); o editor de texto (2); meio de comunicação (chat)(3); problema de programação (4); além do terminal para a interpretação/compilação docódigo (5).

Page 60: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

58 Capítulo 5. DojOn

Figura 14: Interface do plugin DojOn na plataforma Cloud9 - componentes destacados.

5.5.1 Modelo do Sistema

O diagrama de classes da Figura 15 apresenta a estrutura interna do móduloDojOn e sua interação com algumas classes pertencentes a plugins do Cloud9.

Figura 15: Diagrama de Classes do DojOn.

O plugin c9.ide.collab7 é responsável pela colaboração entre os usuários, ou seja,este permite que usuários convidem outros usuário para um mesmo projeto, representado7 https://github.com/c9/c9.ide.collab

Page 61: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

5.5. Desenvolvimento do Ambiente 59

pela função share(); permita que estes escrevam no projeto, representado pela funçãoallowWrite(user, project); que estes se comuniquem através do chat, representadopela função chat(); além de mostrar o número total de usuários no projeto, determinadopela função numberUsers(project). Este plugin não possui apenas uma classe com mesmonome, mas este recurso foi usado para simplificar o diagrama e não entrar em muitosdetalhes sobre a implementação de plugins externos ao módulo DojOn. Por esse motivo, odiagrama mostra apenas os métodos necessários para o plugin de UseManage. O mesmofoi feito para as classes Projct e User do Cloud9, que foram simplificadas. Estas duasúltimas classes são utilizadas pela classe c9.ide.collab, para saber o projeto e usuárioscorrentes para permitir e gerenciar a colaboração.

A classe UseManager é dependente da classe C9.ide.collab e utiliza a variáveltimeN da classe TimeManager. Possui os seguintes métodos: listUsers - a qual retorna umarray com uma sequência aleatória de usuários - e denyWrite(users, project)- a qualproibe a utilização de todos os usuários na lista, exceto o primeiro-. Após a contagem dotempo N, é realizado um push na lista, ou seja, o primeiro elemento do array é realocadoe enviado para o final deste. Esta classe é reponsável por mostrar ao usuário um sinal,verde ou vermelho. Se for verde significa que este pode utilizar o editor de texto, se forvermelhor significa que não pode.

A classe TimeManager possui os métodos: timer, um script que faz contagemregressiva de um tempo N dado (timeN); setN e getN, que atualiza e obtém o valor de N,respectivamente. Esta classe é reponsável por exibir um relógio com contage regressiva emostrar uma mensagem ao usuário, informando-lhe que seu tempo se esgotou.

A classe ProblemsManager possui um método, o script loadDojoPuzzles, que éresponsável por chamar o conteúdo da página Dojo Puzzles e expô-lo.

A classe DojOn é o gerenciador geral do pacote, esta possui o método callPlugins,que chama três recursos do DojOn (o timer, o problema e o sinal). O método callPluginsé o responsável de fazer a interface com os plugins.

Page 62: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

60 Capítulo 5. DojOn

5.6 Cenários de UsoNesta seção, apresentamos quatro cenários de uso do sistema. Para cada cenário,

mostram-se os recursos e os gerenciadores envolvidos.

5.6.1 Cenário 1: Interação entre usuários

Neste cenário, é mostrado como um usuário pode convidar outros usuários com ointuito de criar uma sessão de DojOn.

Recursos envolvidos: chat

Gerenciadores envolvidos: nenhum

Ao entrar em um projeto, o usuário pode convidar outros usuários clicando emShare, vide Figura 16 a). A seguir, uma tela é mostrada, onde é possível escrever os emailsdos usuários para convidá-los ou compartilhar um link com estes, vide Figura 16 b). Osusuários presentes podem interagir via chat uns com os outros, vide Figura 16 c).

Figura 16: a) Usuário pode convidar outros clicando em Share. b) Tela para convidaroutros usuários. c) Tela de chat.

Como pode ser observado na Figura 16 c), a qual representa a tela do chat, existemdois usuários ativos.

Page 63: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

5.6. Cenários de Uso 61

5.6.2 Cenário 2: Visualizando problemas

Neste cenário, mostra-se como o usuário pode visualizar ou esconder o problemade programação da sessão.

Recursos envolvidos: problema.

Gerenciadores envolvidos: de problema

O usuário pode visualizar o problema de programação, vide Figura 17, apertandoas teclas Cmd+Shift+P em Mac Os ou Ctrl+Shift+P em Windows ou Linux. Para ocultaro problema apenas apertar as mesmas teclas novamente.

Figura 17: Interface do DojOn com problema de programação após pressionarCmd+Shift+P.

Page 64: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

62 Capítulo 5. DojOn

5.6.3 Cenário 3: Rotina de participação

Neste cenário, mostra-se o processo de participação do usuário, detalhando-se asequência de passos a ser seguida por este e pelos demais participantes.

Recursos envolvidos: timer, sinal.

Gerenciadores envolvidos: de tempo, de uso.

Quando um usuário que iniciou o projeto decide começar, este deve ir no menuDojOn e clicar no Começar. Assim que começar, um sinal verde será acesso (indicadopor uma seta vermelha na Figura 18) e começará a contar o tempo predefinido de cincominutos.

Figura 18: Usuário clica em Começar, no menu DojOn, e a contagem regressiva começa eum sinal verde aparece.

Assim que o tempo acabar, aparecerá uma mensagem informando que seu tempose esgotou e um sinal vermelho será acesso, vide Figuras 19 e 20. A diferença entre asfiguras é uma película na primeira que indica o bloqueio da tela.

Page 65: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

5.6. Cenários de Uso 63

Figura 19: Acaba tempo de usuário.

Figura 20: Sinal vermelho aparace para usuário e tempo é zerado.

É a vez de outro usuário. Este agora deve apertar o botão Começar novamentepara começar a contagem do tempo mais uma vez, vide Figura 21. Essa rotina se repeteaté que o problema seja terminado.

Page 66: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

64 Capítulo 5. DojOn

Figura 21: Outro usuário começa a programar.

5.6.4 Cenário 4: Configurando o tempo máximo do relógio

Este cenário mostra como o usuário pode alterar o tempo do timer.

Recursos envolvidos: timer.

Gerenciadores envolvidos: de tempo.

O usuário pode redefinir o tempo acessando o menu Cloud9/Preferences ou, simples-mente digitando Ctrl-. Logo após, deverá acessar o submenu Settings/DOJON/Relógio,vide Figura 22. Existem as opções de 5, 10 ou 15 minutos para escolher.

Page 67: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

5.7. Discussão dos Resultados 65

Figura 22: Região da tela mostrando a configuração do tempo máximo do relógio.

5.7 Discussão dos ResultadosNeste capítulo, foram apresentados a descrição do ambiente DojOn, sua arquitetura

e detalhes de desenvolvimento. Também, quatro cenários de uso do ambiente foramdescritos, ilustrando os recursos e gerenciadores envolvidos em cada caso.

A seguir, a Tabela 2 expõe um resumo para verificação da execução dos princípios deprojeto e como foram solucionados para atingir os resultados esperados no desenvolvimentodo sistema.

Princípio Solução? Como?1. Colaborativo sim Cloud92. Interação entre os usuários sim Cloud93. Gerenciamento do tempo sim DojOn4. Apresentar problema sim DojOn com Dojo Puzzles5. Desenvolvimento baseado em teste sim Cloud96. Editor com dois arquivos ou mais sim Cloud97. Dois ou mais participantes iniciam uma sessão sim∗ DojOn8. Web-IDE sim Cloud99. Código aberto sim DojOn e Cloud910. Várias Linguagens de Programação sim Cloud9

Tabela 2: Verificação dos Princípios de Projeto do DojOn.

Como pode ser observado na tabela, foram encontradas soluções durante o desen-volvimento para todos os princípios de projeto. O asterisco no Príncipio 7 sinaliza que,atualmente, o ambiente permite que uma sessão no DojOn seja iniciada com qualquer

Page 68: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

66 Capítulo 5. DojOn

número de participantes, isto é, com a presença no ambiente de um único participanteuma sessão pode, também, ser iniciada.

O ambiente supre os dez princípios de projeto inicialmente planejados na Seção 5.3.Para atendê-los, o DojOn é composto por: (1) um editor de texto; (2) compilador e/ouinterpretador para várias linguagens de programação suportadas pela IDE Cloud9; (3) chatpara a interação entre os usuários; (4) um gerenciador de tempo para satisfazer os requisitosdo Coding Dojo; (5) um gerenciador de uso para controlar a fila de participantes de acordocom os requisitos do Coding Dojo; e (6) um repositório (Dojo Puzzles) de problemas,que devem ser solucionados com testes automatizados. Os três primeiros componentesforam integrados ao ambiente usando recursos, já disponíveis, do Cloud9. Os dois últimosforam criados a partir de três gerenciadores: de tempo, de uso e de problemas. Ao todo, oambiente manipula quatro recursos: o timer, que controla o tempo de participação dosprogramadores; o problema a ser resolvido; o sinal que indica para os participantes a suavez de programar; e o chat para interação entre os participantes.

Page 69: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

67

6 Conclusões

A virtualização de encontros para a prática de programação, estilo Coding Dojo,foi a proposta inicial deste trabalho, à qual enxergamos como uma contribuição para/coma comunidade computacional, pois tudo que incentiva e facilita o aprendizado é vantajosoem qualquer área profissional.

O objetivo deste trabalho foi desenvolver um ambiente virtual colaborativo paraa prática de programação, seguindo a filosofia de Coding Dojo. O ambiente, atualmente,encontra-se funcional. A pesquisa aumentou a compreensão sobre o tema abordado eajudou a encontrar ambientes semelhantes com o proposto e ver como estes funcionam,além de encontrar a plataforma Cloud9, que garantiu a realização de alguns princípios deprojeto básicos do DojOn.

Para a execução do ambiente somente é necessário um navegador Web e umaconexão a Internet. Para acessar a IDE Cloud9 basta apenas ter cadastro de usuário.

As contribuições resultantes deste trabalho de conclusão de curso são:

• um estudo comparativo de dez ambientes relacionados ao proposto, de desenvol-vimento e/ou edição, que serviram como base para a concepção do DojOn. Acomparação foi realizada com base em características de sistema colaborativos eWeb-IDE.

• A modelagem, arquitetura e protótipo do ambiente DojOn, como um plugin parasuprir a filosofia do Coding Dojo sobre a IDE Cloud9.

6.1 Trabalhos Futuros

Como trabalhos futuros, temos a intenção de: finalizar o plugin do Gerenciadorde Uso, afim de atender integralmente o sétimo princípio de projeto; utilizar o estilo dainterface da plataforma Cloud9 na interface visual do plugin; solicitar a permissão dogrupo de desenvolvedores da plataforma Cloud9 para incluir o módulo DojOn como umplugin da plataforma, e com isto, validar o sistema com usuários reais. Uma validação comusuários reais permitiria verificar o número máximo de participantes numa sessão de CDcom sentido para o significado da colaboração.

Adicionalmente, poderíamos incluir um meio de comunicação visual e outrosrequisitos do CD, como os listados a seguir:

Page 70: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

68 Capítulo 6. Conclusões

• permitir a escrita no chat pelos participantes apenas quando o teste esteja passando(verde) e não permitir quando o teste falhe (vermelho);

• permitir que o copiloto, ou seja, o próximo participante na fila, seja o único a tercontato direto com o piloto.

Page 71: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

69

Referências

ARAPOV, P.; BUFFA, M.; OTHMANE, A. Developing web of data applications from thebrowser. International World Wide Web Conference Committee (IW3C2), Seoul, Korea,2014. Citado 3 vezes nas páginas 13, 44 e 45.

BATISTA, R.; NETO, A.; NORONHA, R. Teaching tdd, the coding dojo style. IEEE13th International Conference on Advanced Learning Technologies, 2013. Citado 3 vezesnas páginas 27, 29 e 31.

BECK, K. Test-Driven Development by Example. [S.l.]: Addison Wesley, 2003. Citado 2vezes nas páginas 28 e 29.

BISSI, W. SCRUM - Metodologia de Desenvolvimento Ágil. Campo Mourão: Campo Dig.,2007. Citado na página 27.

BRAVO, C.; REDONDO, M.; ORTEGA, M. Aprendizaje en grupo de la programaciónmediante técnicas de colaboración distribuida en tiempo real. Interacción, Lleida, España,2004. Citado na página 42.

BRUM, J.; PEREIRA, W. Utilização de arduino no ensino de algoritmos, lógica deprogramação e robótica. SBA Controle e Automação, 2012. Citado na página 27.

CHANDRA, T.; LIEM, I. Source code editing evaluator for learning programming. The4th International Conference on Electrical Engineering and Informatics (ICEEI 2013),2013. Citado na página 46.

CICLO-TDD. 2015. Acessado em Janeiro de 2015. Disponível em: <http://goo.gl/KFiYP2>. Citado 2 vezes nas páginas 13 e 30.

CODING-DOJO. 2015. Acessado em Janeiro de 2015. Disponível em: <http://tapchilaptrinh.vn/2012/09/29/coding-dojo-la-gi/>. Citado 2 vezes nas páginas 13 e 28.

FAHNDRICH, M. Lessons from a web-based ide and runtime. PEPM, San Diego, CA,USA, v. 4, n. 2., 2014. Citado 3 vezes nas páginas 13, 43 e 44.

FUKS, H. et al. Inter- and intra-relationships between communication coordination andcooperation in the scope of the 3c collaboration model. 12th International Conference onCSCW in Design – CSCWD 2008, Xi’an,China, v. 2, 2008. Citado 2 vezes nas páginas 34e 35.

GADHIKAR, M. et al. Browser based ide to code in the cloud. Springer-Verlag BerlimHeidelberg., 2013. Citado 2 vezes nas páginas 34 e 39.

GOLDMAN, M.; LITTLE, G.; MILLER, R. Collabode: Collaborative coding in thebrowser. CHASE, Waiikiikii, Honollullu, HII, USA, 2011. Citado 4 vezes nas páginas 13,35, 39 e 40.

HARDING, T. Experiences of using a collaborative programming editor in a first-yearprogramming course. K-State Salina Professional Day, Salina, Kansas, USA, 2014.Citado na página 36.

Page 72: DojOn: Virtualizando o conceito do Coding Dojo …...Coding Dojo (CD) é uma atividade que tem sido utilizada por programadores paratreinarpráticaságeis,especialmente,desenvolvimentoguiadoportestes(

70 Referências

HEINONEN K., H. K. L. M.; VIHAVAINEN, A. Learning agile software engineeringpractices using coding dojo. Proceedings of the 14th Annual ACM SIGITE Conference onInformation Technology Education, SIGITE ’13, 2013. Citado na página 31.

KNUTH, D. The Art of Computer Programming Fundamental Algorithms (2a edição).[S.l.]: Addison-Wesley, 1973. Citado na página 23.

LUZ, R. D.; NETO, A. S. S.; NORONHA, R. V. Teaching tdd, the coding dojo style.Advanced Learning Technologies (ICALT), IEEE 13th International Conference, 2013.Citado na página 31.

MATSUMOTO, K. et al. Design of development as a service in the cloud. 15thInternational Conference on Network-Based Information System - IEEE, 2012. Citado 3vezes nas páginas 13, 39 e 47.

PAIR-PROGRAMMING. 2015. Acessado em Janeiro de 2015. Clicar em "PairProgramming". Disponível em: <http://1minus1.com/develop>. Citado 2 vezes naspáginas 13 e 29.

PELLEGRINO, J. W.; HILTON, M. Education for life and work: Developing transferableknowledge and skills in the 21st century. Committee on Defining Deeper Learning and21st Century Skills, National Research Council, Board on Testing and Assessment andBoard on Science Education, Division of Behavioral and Social Sciences and Education,The National Academies Press, Washington, DC., 2012. Citado na página 34.

PFEIFFER, T.; METZKE, T. Coffeescript and jasmine testing – tool support for cloud9ide. Hasso-Plattner-Institute, Potsdam, Germany, 2014. Citado na página 48.

RASMUSSON, J. The Agile Samurai - How Agile Masters Deliver Great Software. [S.l.]:The Pragmatic Programmers, 2010. Citado na página 29.

SALINGER, S. et al. Saros: An eclipse plug-in for distributed party programming.CHASE, Cape Town, South Africa, 2010. Citado 3 vezes nas páginas 13, 35 e 41.

SCHATTEN, A.; PöLZ, D.; EPHESER, M. Instant collaboration - developing a frameworkto support new patterns of team-cooperation. CiteSeer, 2007. Citado 4 vezes nas páginas13, 33, 42 e 43.

WALDMANN, B.; LEHMAN, D. Integrating the google wave platform with eclipsefor collaborative, real-time code creation. SIGITE’10, Midland, Michigan, USA., 2010.Citado na página 29.

YOO, D.; SCHANZER, E.; KRISHNAMURTHI, S. Wescheme: The browser is yourprogramming environment. ITiCSE, Darmstadt, Germany, 2011. Citado 4 vezes naspáginas 13, 36, 45 e 46.