You are on page 1of 60

FACULDADE DE ENGENHARIA DA UNIVERSIDADE DO PORTO

Jogos Srios para Ensino de Engenharia


de Software
Edgar Alves

Mestrado Integrado em Engenharia Informtica e Computao


Orientador: Joo Carlos Pascoal de Faria (Doutor)
Junho de 2013

Edgar Alves, 2013

Jogos Srios para Ensino de Engenharia de Software


Edgar Alves

Mestrado Integrado em Engenharia Informtica e Computao

Aprovado em provas pblicas pelo Jri:


Presidente: Rosaldo Rossetti (Doutor)
Vogal Externo: Daniel Silva (Doutor)
Orientador: Joo Carlos Pascoal de Faria (Doutor)
____________________________________________________

29 de Julho de 2013

Resumo

Desde o aparecimento dos jogos de computador que o impacto deles na sociedade tem
vindo a aumentar. Cada vez mais se veem crianas, adolescentes e at mesmo adultos que
despendem tempo da sua vida com jogos de computador. Isto deve-se ao facto dos jogos terem a
capacidade de captar a ateno do jogador, de o estimular e desafiar, chegando por vezes at a
ser viciantes. Dada a importncia dos jogos de computador na sociedade, surgiu a ideia de se
criar jogos que, para alm da componente de entretenimento, inclussem tambm uma
componente didtica. O objetivo desta combinao , sobretudo, aproveitar a capacidade dos
jogos como focos de ateno e entretenimento, e acrescentar-lhes uma fonte de conhecimento
tornando-os num mtodo mais agradvel de aprendizagem. Estes jogos, que combinam
entretenimento e aprendizagem, chamam-se jogos srios.
O presente trabalho de dissertao teve precisamente como objetivo, criar um jogo srio
aplicado ao ensino de Engenharia de Software de forma a incentivar os alunos do ensino
superior a estudarem atravs de mtodos de estudo mais agradveis. A aplicao desenvolvida,
de nome SCOREL, ou Source COde REview Learning, consiste num jogo que permite agilizar
e incentivar a prtica de reviso de cdigo, uma das muitas tarefas da Engenharia de Software.
Permite tambm que os utilizadores faam o carregamento dos seus prprios exerccios de
reviso de cdigo para que, sejam posteriormente utilizados por outros utilizadores. Para a
realizao deste trabalho foi importante fazer um estudo inicial do estado da arte relativamente
aos jogos srios aplicados na Engenharia de Software para averiguar o que j existe na rea.

Abstract

Since the advent of computer games their impact on society is increasing. Increasingly one
sees children, teenagers and even adults who spend time playing computer games. This is due to
the fact that games have the ability to capture the attention of the player, to stimulate and
challenge him, even to be addictive sometimes. Given the importance of computer games in
society, arises the idea of creating games that in addition to the entertainment component would
include a learning component as well. The aim of this combination is primarily harnessing the
ability of games as focal points and entertainment and add them a source of knowledge making
them a more enjoyable method of learning. These games, that combine entertainment and
learning, are called serious games.
This dissertation work aims to create a serious game applied to Software Engineering
education in order to encourage higher education students to study through nicer methods. The
developed application named SCOREL, or Source COde REview Learning, is a game that
allows one to streamline and encourage the practice of code review, one of the many tasks of
Software Engineering. It also allows that users upload their own exercises of code revision to be
used by the other users. For this project it was important to make an initial study of the state of
the art relative to serious games used in Software Engineering to find out what already exists in
this area.

ii

Agradecimentos

Agradecimento ao orientador desta tese, professor Joo Carlos Pascoal de Faria pela
dedicao e ateno prestada, sempre acompanhando o desenvolvimento do trabalho de
dissertao com sugestes e ideias visando o aperfeioamento do mesmo. Agradecimento
tambm, ao aluno e colega de curso, Amaro Silva, pelo seu apoio e conselhos de nvel tcnico
na fase inicial do projeto e ainda ao professor Miguel Pimenta Monteiro pelo esclarecimento de
algumas dvidas e partilha de conhecimento relativamente arquitetura do mesmo.

Edgar Alves

iii

ndice

Resumo .......................................................................................................................................... i
Abstract ........................................................................................................................................ ii
Agradecimentos .......................................................................................................................... iii
ndice ........................................................................................................................................... iv
Lista de Ilustraes .................................................................................................................... vi
Lista de Tabelas........................................................................................................................ viii
Abreviaturas e Smbolos ............................................................................................................ ix
1.

2.

3.

Introduo ..........................................................................................................................1
1.1.

Enquadramento ..............................................................................................................1

1.2.

Motivao e Objetivos ...................................................................................................2

1.3.

Estrutura do Documento ................................................................................................3

Conceitos Bsicos ...............................................................................................................5


2.1.

Jogos...............................................................................................................................5

2.2.

Jogos de Computador .....................................................................................................5

2.3.

Jogos Srios....................................................................................................................6

2.4.

Game-Based Learning e Digital Game-Based Learning ...............................................7

2.5.

Engenharia de Software..................................................................................................8

2.5.1.

Verificao & Validao de Software ....................................................................9

2.5.2.

Reviso de Cdigo .................................................................................................9

Reviso Bibliogrfica .......................................................................................................11


3.1.

Introduo ....................................................................................................................11
iv

4.

5.

6.

7.

8.

3.2.

Jogos Srios de Programao .......................................................................................12

3.3.

Jogos Srios de Processo e Gesto de Engenharia de Software ...................................13

3.4.

Concluso .....................................................................................................................14

Definio do Conceito do Jogo ........................................................................................15


4.1.

Seleo do Tema ..........................................................................................................15

4.2.

Objetivo do Jogo ..........................................................................................................15

4.3.

Objetivo de Aprendizagem ..........................................................................................16

4.4.

Funcionalidades ...........................................................................................................16

Desenho e Implementao ...............................................................................................19


5.1.

Escolha de Tecnologias ................................................................................................19

5.2.

Arquitetura ...................................................................................................................20

5.3.

Servidor ........................................................................................................................20

5.4.

Base de Dados ..............................................................................................................21

5.5.

Cliente ..........................................................................................................................22

5.6.

Comunicao Cliente Servidor .................................................................................25

5.7.

Comunicao Servidor Base de Dados .....................................................................27

Utilizao e Experimentao...........................................................................................29
6.1.

Modo de Utilizao ......................................................................................................29

6.2.

Experimentao ............................................................................................................39

Concluses e Trabalho Futuro........................................................................................41


7.1.

Satisfao dos Objetivos ..............................................................................................41

7.2.

Trabalho Futuro............................................................................................................42

Referncias .......................................................................................................................43

Anexo A - Exemplo utilizado nas aulas de Engenharia de Software .....................................45

Lista de Ilustraes

Ilustrao 1 reas de conhecimento da Engenharia de Software.................................................. 9


Ilustrao 2 Robocode - Ambiente de jogo ................................................................................. 12
Ilustrao 3 Alice - Ambiente de jogo ........................................................................................ 13
Ilustrao 4 SimSE - Ambiente de jogo ...................................................................................... 13
Ilustrao 5 MO-SEProcess - Ambiente de jogo ........................................................................ 14
Ilustrao 6 Diagrama de casos de uso ....................................................................................... 18
Ilustrao 7 Diagrama de arquitetura .......................................................................................... 20
Ilustrao 8 Diagrama relacional da base de dados..................................................................... 21
Ilustrao 9 Diagrama UML do cliente ....................................................................................... 22
Ilustrao 10 Painel do menu principal ....................................................................................... 23
Ilustrao 11 Painel da rea de jogo ............................................................................................ 23
Ilustrao 12 Painel do fim do jogo ............................................................................................ 24
Ilustrao 13 Diagrama de navegao entre painis ................................................................... 24
Ilustrao 14 Estrutura do JAX-WS (Docentes de Sistemas Distribudos, DEI, IST, UTL) ...... 25
Ilustrao 15 Painel de login ....................................................................................................... 30
Ilustrao 16 Painel de registo .................................................................................................... 30
Ilustrao 17 Painel do menu principal ....................................................................................... 31
Ilustrao 18 Painel de gesto de ficheiros ................................................................................. 32
Ilustrao 19 Seletor de ficheiros ................................................................................................ 32
Ilustrao 20 Painel de seleo de erros (checklist predefinida) ................................................. 33
Ilustrao 21 Painel de seleo de erros (checklist configurvel) ............................................... 34
Ilustrao 22 Painel de adio de novo tipo ................................................................................ 34
Ilustrao 23 Painel de remoo de tipo existente ...................................................................... 35
Ilustrao 24 Painel de seleo de ficheiro ................................................................................. 35
vi

Ilustrao 25 Painel de jogo ........................................................................................................ 36


Ilustrao 26 Painel de resultados ............................................................................................... 37
Ilustrao 27 Painel de solues ................................................................................................. 38
Ilustrao 28 Painel de melhores resultados ............................................................................... 38

vii

Lista de Tabelas

Tabela 1 Tipos de jogos srios (Wikipdia - Serious game; Serious Game University) .............. 6
Tabela 2 GBL vs Ensino tradicional (New Media Institute) ......................................................... 8
Tabela 3 Tabelas da base de dados ............................................................................................. 21

viii

Abreviaturas e Smbolos

API

Application Programming Interface

DGBL

Digital Game-based Learning

FEUP

Faculdade de Engenharia da Universidade do Porto

FPS

First Person Shooter

GBL

Game-based Learning

HTTP

Hypertext Transfer Protocol

IEEE

Institute of Electrical and Electronics Engineers

JAX-WS

Java API for XML Web Services

JDBC

Java Database Connectivity

RPC

Remote Procedure Call

RPG

Role-Playing Game

SCOREL

Source COde REview Learning

SW

Software

SWEBOK

Guide to the Software Engineering Body of Knowledge

UDK

Unreal Development Kit

V&V

Verificao e Validao

WSDL

Web Services Description Language

XML

eXtensible Markup Language

ix

1. Introduo

Este documento descreve o trabalho de dissertao desenvolvido e nele so apresentados


os resultados da aplicao denominada SCOREL, ou Source COde REview Learning, uma
aplicao desenvolvida com o propsito de inovar os mtodos de estudo de Reviso de Cdigo
uma das tarefas de Verificao e Validao de software.
Neste captulo feito um enquadramento e uma pequena descrio do trabalho de
dissertao desenvolvido e qual a motivao e objetivos do mesmo. Por fim explicado como o
documento se encontra estruturado.

1.1. Enquadramento
Este trabalho foi desenvolvido no mbito da Dissertao do Mestrado Integrado em
Engenharia Informtica e Computao na Faculdade de Engenharia da Universidade do Porto
que est entre as vinte melhores da Europa e as cem melhores de todo o mundo (Ranking Web
of Universities 2013). conhecida por ser uma faculdade com um grande grau de exigncia e
por isso uma faculdade com bastante prestgio tanto a nvel nacional como a nvel internacional.
O objetivo desta dissertao o desenvolvimento de um jogo srio para o ensino de
Engenharia de Software e surge com o propsito de inovar os mtodos de estudo tradicionais. O
estudo tradicional, acima de tudo quando associado a um ensino exigente como o superior,
tem, por vezes, uma conotao negativa como atividade aborrecida e maadora. E, por isso,
muitas vezes, os alunos estudam por obrigao e por necessidade sendo poucos os que gostam
dessa tarefa. Por outro lado, jogar jogos de computador uma atividade imediatamente
associada a emoes como motivao e diverso. uma atividade que geralmente qualquer
pessoa gosta por ser desafiante e motivadora, sendo por isso muito cativante e um grande foco
de ateno para quem a pratica. Portanto, a incluso de jogos nos mtodos de ensino, os
1

chamados jogos srios, uma tentativa de tornar o estudo numa tarefa mais agradvel
combinando a capacidade de entreter que os jogos tm com uma componente de ensino.

1.2. Motivao e Objetivos


Hoje em dia, cada vez mais se v a utilizao de jogos em situaes de bastante seriedade.
Exemplo disso so os simuladores, considerados jogos, que permitem encenar situaes muito
prximas da realidade. Este tipo de jogos tm a grande vantagem de permitirem experimentao
sem risco possibilitando assim o treino e aperfeioamento das tcnicas antes da utilizao das
mesmas na vida real onde a falha, por vezes, pode sair cara. O facto de j existirem exemplos de
jogos srios de grande sucesso noutras reas a grande motivao para este projeto. Apesar
deste tipo de jogos j abranger um variado leque de reas (Frye 2010), a disciplina de
Engenharia de Software no est ainda muito explorada havendo reas de conhecimento desta
que, segundo a pesquisa efetuada, no esto ainda exploradas. Este trabalho de dissertao tem
como objetivo, o desenvolvimento de uma soluo que aborde uma destas reas. Assim, a
soluo desenvolvida consiste numa aplicao Java que tem como principal funcionalidade a
Reviso de Cdigo, uma das tarefas da Verificao e Validao, sob a forma de um jogo.
Em sntese, a tese que se pretende demonstrar com o desenvolvimento desta aplicao,
que possvel automatizar exerccios para o treino de prticas de engenharia de software, como
as prticas de reviso de cdigo, e ao mesmo tempo introduzir componentes de um jogo srio,
nomeadamente, a competio entre utilizadores.
A automatizao dos exerccios consiste num sistema que permite uma avaliao e
feedback automtico dado pelo computador ao utilizador. Este sistema de avaliao revelou-se
algo desafiante no seu desenvolvimento pois utiliza uma ferramenta de comparao de strings
para a verificao das solues. Isto tem os seus inconvenientes pois a marcao de erros
atravs da seleo de texto pode, por vezes, ser subjetiva e por isso foi preciso criar um sistema
de avaliao o mais robusto possvel. Para evitar estes problemas de subjetividade, este
documento apresenta no captulo 6 um tutorial de marcao de erros apresentando o padro que
deve ser utilizado tanto pelos autores como pelos jogadores.
A incluso de componentes de jogos srios, nomeadamente, a competio entre
utilizadores, como foi referido anteriormente, consiste na utilizao de um sistema de
pontuaes e tabela de melhores resultados, que incentiva a realizao de cada vez mais
exerccios de forma a subir na tabela classificativa. O sistema de pontuaes utilizado ser
explicado com maior detalhe na seco 4.4.
A metodologia de desenvolvimento escolhida para este trabalho, consistiu numa
abordagem iterativa com uma definio incremental de requisitos e de opes de
implementao segundo prioridades estabelecidas. Optou-se por este mtodo por se tratar de um
projeto de inovao.

1.3. Estrutura do Documento


Este documento encontra-se estruturado em dez captulos. Aps a Introduo, segue-se o
captulo intitulado Conceitos Bsicos. Neste, feita uma descrio de conceitos integrantes do
mesmo, nomeadamente, jogos de computador e Engenharia de Software. De seguida sucede-se
o captulo da Reviso Bibliogrfica onde apresentada parte do trabalho de pesquisa elaborado
relativamente ao Estado da Arte. Seguem-se depois, os captulos Definio do Conceito do Jogo
e Desenho e Implementao do projeto. Aps o captulo da Desenho e Implementao
explicado o modo de funcionamento da soluo desenvolvida e resultados da experimentao
no captulo Utilizao e Experimentao. Este documento termina ento com o captulo de
Concluses e Trabalho Futuro seguido das Referncias e dos Anexo.

2. Conceitos Bsicos

O presente captulo aborda o problema deste projeto sendo apresentadas em maior detalhe
as reas integrantes do mesmo, nomeadamente os jogos de computador e a Engenharia de
Software.

2.1. Jogos
Um jogo representa uma atividade ldica que engloba um conjunto de vrias componentes.
Entre elas h trs obrigatrias que so:
Jogador um ou mais elementos que procuram diverso partilhando ou disputando
objetivos caso sejam parceiros de equipa ou adversrios, respetivamente;
Regras definem o modo como o jogo deve ser jogado indicando as permisses e
restries do jogo;
Objetivos conjunto de elementos ou estado do jogo que os jogadores tentam alcanar.
O jogo tem a capacidade de incutir no jogador a vontade de superar o desafio superando
o(s) adversrios(s) ou superando-se a si mesmo. por isso uma atividade que alm de divertida,
por vezes viciante sendo um grande foco de ateno para os jogadores (Wikipdia - Jogo
2013).

2.2. Jogos de Computador


Os jogos de computador so jogos digitais que tm como plataforma um computador.
semelhana dos jogos tradicionais, estes englobam o mesmo conjunto de componentes
obrigatrios. Um jogo de computador pode estar inserido num vasto conjunto de tipos de jogos,
de entre os quais se podem destacar por exemplo os Role-Playing Games (RPGs), os First
5

Person Shooters (FPSs), jogos de estratgia, jogos de desporto, jogos de combate, jogos de
conduo entre outros.

2.3. Jogos Srios


Nem todos os jogos tm apenas a finalidade de divertir e entreter o jogador. Na dcada de
oitenta surgiu o primeiro jogo onde o propsito principal no era a diverso mas sim a
transmisso de contedo de cariz educativo (Wikipdia - Serious game 2013). A estes jogos dse o nome de jogos srios, do termo ingls Serious Games.
Eles so chamados jogos srios, no porque os outros jogos no o so, mas sim porque
estes so usados de uma forma pedaggica para fins polticos, sociais, publicitrios,
econmicos, ambientais ou causas humanitrias (Arvers 2009).
A utilizao de jogos para fins educacionais tem como principal objetivo transmitir
informao de uma forma mais agradvel e deste modo mais eficaz tambm. Na geografia - que
quase ignorada nos dias de hoje - no h razo para uma gerao que consegue memorizar
mais de 100 personagens Pokmon incluindo as suas caractersticas, histria e evoluo, no
consiga aprender os nomes, populaes, capitais e relaes de todas as 101 naes do mundo.
Depende apenas de como apresentado (Prensky 2001a). Talvez a diferena mais importante
que o material a ser aprendido informao, conceitos, relaes, etc. no pode
simplesmente ser dito a estas pessoas. Tem de ser aprendido por elas prprias, atravs de
questes, descoberta, construo, interao e, acima de tudo, diverso (Prensky 2001b).
Os jogos srios servem ento para combater a desmotivao dos alunos relativamente s
prticas estudantis aborrecidas e dessa forma obterem melhores resultados.
Estes jogos esto frequentemente ligados a reas como defesa, educao, explorao
cientfica, servios de sade, engenharia entre outros. Segundo as reas onde os jogos srios se
inserem, estes podem ser classificados de vrios tipos. A classificao dos jogos srios no est
ainda muito slida mas h termos comuns para alguns tipos existentes. De entre eles destacamse os indicados na Tabela 1.
Tabela 1 Tipos de jogos srios (Wikipdia - Serious game 2013; Serious Game University
2013)
Designao (ingls)
Advergames
Edutainment

Descrio
Jogo utilizado para promover uma marca, um produto, uma
organizao ou um ponto de vista.
Jogo de entretenimento que projetado para ser educativo.
Jogo com objetivos de aprendizagem. So projetados de

Game-based Learning

forma a equilibrar a componente ldica com a componente


didtica.

Newsgames

Jogo jornalstico que reporta acontecimentos recentes ou


6

envia comentrios editoriais sobre o acontecimento.


Training and Simulation
Games

Jogo que simula atividades da vida real com a maior exatido


possvel. Utilizado para adquirir ou exercitar diferentes
habilidades.
Jogo que influencia os jogadores a agirem atravs da

Persuasive Games

jogabilidade. projetado para mudar atitudes e


comportamentos dos utilizadores atravs da persuaso.
Jogo projetado com propsitos especficos de promover o
desenvolvimento pessoal e formao de carter. Aborda

Organizational-dynamic

questes de dinmica organizacional, em trs nveis:


comportamento individual, dinmica de grupo e rede e
dinmica cultural.

Games for Health


Art Games
Militainment

Jogo utilizado para ensaios mdicos, educao de sade,


terapia psicolgica e reabilitao fsica ou cognitiva.
Jogo utilizado para expressar ideias artsticas ou arte
produzida atravs de jogos digitais.
Jogo utilizado para fins militares que replica operaes com
um alto grau de preciso.

2.4. Game-Based Learning e Digital Game-Based Learning


GBL o tipo de jogo srio mais relacionado com a soluo pretendida para o presente
projeto uma vez que este tipo de jogos srios tem como objetivo a aprendizagem. Neste caso,
como se trata de um jogo de computador, o termo correto ser DGBL que no fundo assenta na
definio do GBL mas tendo a ateno que se refere a jogos digitais.
GBL utiliza exerccios competitivos, colocando os estudantes uns contra os outros ou a
desafiarem-se a si prprios, a fim de motiv-los a aprender melhor (Starting Point-Teaching
Entry Level Geoscience 2013). Uma prova disso a seguinte tabela que resume uma
comparao entre o GBL e o ensino tradicional.

Tabela 2 GBL vs Ensino tradicional (New Media Institute 2013)

Facilmente se percebe atravs da Tabela 2 que o GBL consegue combinar as vantagens do


estudo terico e treino prtico, duas atividades do estudo tradicional. Com isto se pode concluir
que, quando bem desenvolvido, um GBL tem um valor acrescido sobre o estudo tradicional pois
para alm das vantagens a nvel educativo tem a vantagem de ser um jogo e tornar o estudo
numa atividade divertida.

2.5. Engenharia de Software


O problema desta dissertao est centrado na disciplina de Engenharia de Software. Esta
disciplina uma rea da computao focada na definio, desenvolvimento e manuteno de
sistemas de software, visando a organizao, a produtividade e a qualidade do produto com a
aplicao de tecnologias e prticas de outras disciplinas.
Segundo a ltima verso oficial do SWEBOK (Bourque et al. 2004) um documento criado
pelo IEEE com a finalidade de servir de referncia na rea de Engenharia de Software, esta
disciplina composta por um vasto conjunto de reas de conhecimento. Na Ilustrao 1 so
apresentadas as reas de conhecimento que integram a Engenharia de Software.

Ilustrao 1 reas de conhecimento da Engenharia de Software


Como a Engenharia de Software uma disciplina bastante vasta, decidiu-se considerar
apenas parte dela para o desenvolvimento deste projeto. A rea de conhecimento escolhida, por
ser das menos exploradas, foi ento a Qualidade de Software, que engloba atividades como
verificao e validao de software.

2.5.1. Verificao & Validao de Software


Verificao e Validao so processos independentes utilizados na rea de Engenharia de
Software, que so utilizados em conjunto para garantir que um produto, servio ou sistema
cumprem os requisitos e especificaes definidas e que vo de encontro ao propsito do seu
desenvolvimento.
Verificao o processo de avaliao de um sistema ou componente para determinar se o
produto satisfaz as especificaes determinadas no incio da fase. Ou seja, Estamos a construir
o produto corretamente?.
Validao o processo de avaliao para determinar se o sistema atende s necessidades e
requisitos dos utilizadores. Ou seja, Estamos a construir o produto correto? (Sommerville
2011; Software Testing Fundamentals 2013).

2.5.2. Reviso de Cdigo


uma tarefa que integra a rea de conhecimento Qualidade de Software que consiste na
anlise de cdigo fonte na tentativa de encontrar e corrigir os erros que tenham escapado na fase
9

inicial de desenvolvimento, melhorando tanto a qualidade geral do software como as


habilidades dos programadores (Sommerville 2011).

10

3. Reviso Bibliogrfica

Este captulo apresenta o trabalho de pesquisa efetuado, nomeadamente, o estudo do estado


da arte feito a fim de averiguar a viabilidade do desenvolvimento deste projeto. Foi realizado
um estudo na rea dos jogos de computador para Engenharia de Software j existentes com a
finalidade de avaliar as reas de conhecimento menos exploradas, procurando desenvolver uma
soluo numa rea onde a concorrncia fosse menos forte.

3.1. Introduo
Como anteriormente foi referido, os jogos srios para o ensino de Engenharia de Software
no esto ainda muito explorados e o que existe insere-se, sobretudo, apenas em algumas das
reas de conhecimento. Por isso, a possibilidade de criar uma soluo para a Engenharia de
Software, principalmente numa das reas de conhecimento menos exploradas, que traga
vantagem ao utilizador pela sua utilizao como acontece com os simuladores de voo por
exemplo, a grande motivao para o desenvolvimento deste projeto.
A indstria dos jogos de computador uma das mais rentveis em todo o mundo e a oferta
cada vez maior. Atualmente existe uma quantidade considervel de jogos srios e a rea de
Engenharia de Software tambm conta com alguns exemplares bem sucedidos.
A maior parte dos jogos srios para Engenharia de Software insere-se sobretudo em reas
de conhecimento como Construo de Software, Processo de Engenharia de Software e Gesto
de Engenharia de Software. Segundo a pesquisa efetuada, no h conhecimento de jogos
desenvolvidos na rea de Qualidade de Software, mais propriamente, que abordem a Reviso de
Cdigo, rea na qual se insere a aplicao desenvolvida. No entanto, de seguida, apresentam-se
alguns exemplos de jogos srios para Engenharia de Software (Game-Based Learning Dev
2013).
11

3.2. Jogos Srios de Programao


Robocode: um jogo open source de aprendizagem projetado para ajudar as pessoas a
aprenderem a programar em Java e desfrutar da experincia. O jogo consiste em programar um
rob seguindo uma API para depois o introduzir num campo de batalha com outros robs de
forma a testar a eficcia da inteligncia artificial do mesmo (Robocode 2013).

Ilustrao 2 Robocode - Ambiente de jogo


Alice: um software educativo utilizado como uma ferramenta de ensino para computao
introdutria que ensina os alunos a programar em ambiente 3D (Alice 2013).

12

Ilustrao 3 Alice - Ambiente de jogo

3.3. Jogos Srios de Processo e Gesto de Engenharia de


Software
SimSE: um simulador de processos de Engenharia de Software onde o papel do jogador
ser gestor de um projeto. O objetivo do jogo gerir um projeto da melhor forma possvel
escolhendo as tarefas para os funcionrios consoante grau de experincia e fadiga. O jogo
comea com um oramento e um tempo estimado para o projeto. Este jogo tem como finalidade
estabelecer uma ligao entre a grande quantidade de conhecimento conceptual dado aos
estudantes nas aulas e a pequena quantidade desse conhecimento aplicada em casos prticos
(SimSE 2013).

Ilustrao 4 SimSE - Ambiente de jogo

13

MO-SEProcess: um jogo multijogador 3D de processo de Engenharia de Software


baseado no jogo SimSE desenvolvido para o Second Life. O jogo tem como objetivo ensinar os
princpios do processo de engenharia de software, simulando o desenvolvimento de um projeto
de software de tamanho moderado (MO-SEProcess 2013).

Ilustrao 5 MO-SEProcess - Ambiente de jogo

3.4. Concluso
O estado da arte relativo aos jogos srios para Engenharia de Software, como referido
anteriormente, conta j com alguns bons exemplares. Acima podemos ver 4 exemplos que
abrangem 3 reas de conhecimento diferentes, Construo de Software, Processo de engenharia
de Software e Gesto de engenharia de Software. Estas so as reas de Engenharia de Software
que mais esto exploradas a nvel de jogos srios. Quanto a jogos que abranjam a rea de
conhecimento abordada neste projeto no h conhecimento de nenhum exemplar. Por isso, j
uma mais-valia para este projeto uma vez que no ter concorrncia direta nessa rea de
conhecimento.

14

4. Definio do Conceito do Jogo

O presente captulo apresenta uma descrio detalhada do trabalho de dissertao


desenvolvido. Alm da seleo do tema, so apresentados tambm os objetivos, tanto do jogo
como de aprendizagem, e ainda o conjunto de funcionalidades que a soluo desenvolvida
integra.

4.1. Seleo do Tema


O presente trabalho de dissertao tem como problema a resolver o desenvolvimento de
um jogo srio a ser aplicado no ensino de Engenharia de Software. Aps a pesquisa efetuada
relativamente ao estado da arte, a opo escolhida para soluo ao problema recaiu sobre as
reas de conhecimento da Engenharia de Software menos exploradas pelos jogos srios. Como
fora referido anteriormente neste documento, a soluo desenvolvida consiste num jogo que
permite praticar tcnicas de Reviso de Cdigo, atividade essa que faz parte da Qualidade de
Software, uma das reas de conhecimento da Engenharia de Software menos exploradas pelos
jogos srios.

4.2. Objetivo do Jogo


A aplicao tem como objetivo de jogo, comum a todos os jogos, obter melhores
pontuaes que os outros utilizadores. Para isso preciso ser-se eficaz, encontrando o maior
nmero de erros sem assinalar erros inexistentes (falsos positivos), e eficiente, executando essa
tarefa no menor espao de tempo possvel. A pontuao baseia-se ento nestas trs
componentes: erros corretos, erros errados e tempo gasto. A pontuao dada sob a forma de
percentagem para ser possvel comparar exerccios de diferente escala.
15

4.3. Objetivo de Aprendizagem


Com esta aplicao os utilizadores tm a possibilidade de praticarem tcnicas de reviso de
cdigo de uma forma mais agradvel do que com os mtodos de estudo tradicionais. Para alm
disso torna o estudo menos maador por ser mais simples e mais rpido do que a tradicional
folha de papel para resoluo deste tipo de problemas. Funciona um bocado semelhana dos
testes de exame de cdigo. Como todos sabemos, existem exames em formato impresso e em
formato digital sendo que o formato digital tem muito mais sucesso por vrias razes: no ocupa
espao, no tem gastos em papel e acima de tudo apresenta o resultado obtido de forma
automtica sem precisar que o utilizador v confirmar por si mesmo perdendo tempo de estudo
precioso.

4.4. Funcionalidades
A soluo desenvolvida consiste numa aplicao que permite praticar tcnicas de Reviso
de Cdigo como anteriormente foi dito. A aplicao dispe de trs grandes funcionalidades,
carregar exerccio, resolver exerccio e consultar pontuaes como se pode ver na Ilustrao 6
que apresenta o diagrama de casos de uso.
Quanto funcionalidade de carregamento de exerccios, os utilizadores, no papel de
professores/autores, apenas tm de escolher o ficheiro que pretendem carregar e posteriormente
simular um jogo definindo os erros para servirem como soluo do exerccio. Durante a
simulao de jogo o utilizador pode definir uma checklist predefinida ou uma personalizada
para classificar os tipos de erros do exerccio. Nesta segunda opo o utilizador adiciona novos
itens checklist medida que v precisando. A checklist indica o conjunto de vrios itens a
verificar como por exemplo, comentrios de documentao, adeso a convenes de nomes,
validao de pr condies, validao de ps condies, entre outros. O facto desta aplicao se
encontrar ligada a um servidor, permite a partilha de exerccios entre os utilizadores.
Relativamente funcionalidade de resoluo de exerccios, os utilizadores, no papel de
alunos/jogadores, iniciam o jogo escolhendo o exerccio que pretendem resolver. Este, quando
em modo de jogo, deparando-se com um conjunto de linhas de cdigo, deve apenas identificar
todos os erros que encontrar com base numa checklist. A marcao de um erro composta pela
seleo do segmento de cdigo pretendido e pela indicao do tipo de erro segundo a checklist
que apresentada com o clique do boto direito do rato. Aps dar o jogo por terminado ser-lhe apresentado um conjunto de estatsticas com os resultados obtidos assim como uma pontuao
de forma percentual com base nos erros identificados e no tempo gasto para o fazer. O utilizador
pode ainda atravs de dois botes indicar se gostou ou no do exerccio para contribuir para as
estatsticas do ficheiro.
A outra funcionalidade consiste na consulta de pontuaes mximas dos utilizadores. A
pontuao de um jogo calculada com base no nmero de erros bem e mal assinalados assim
como no tempo gasto para resolver o exerccio. O resultado divido por uma pontuao
16

considerada perfeita para transform-lo em formato de percentagem. Apesar de a frmula


permitir valores fora dos limites a pontuao obtida nunca inferior a 0 nem superior a 100. A
frmula da pontuao ento a seguinte:

P = pontuao obtida (%);


N = nmero de erros na soluo;
T = tempo esperado por erro (estabelecido como 2 minutos);
a = nmero de erros assinalados corretamente;
b = nmero de erros assinalados erradamente;
t = tempo total gasto (minutos);
importante referir que o mtodo racional mais adequado para se chegar a uma frmula
para a pontuao seria baseado numa anlise econmica tendo em ateno o custo de hora do
revisor, o custo da identificao de falsos positivos e o custo de erros no assinalados, mas os
parmetros so extremamente varveis, pelo que se optou por valores que se julgaram razoveis,
podendo estes serem configurados.
A tabela de pontuaes mximas composta por trs colunas: Username, Average Score,
Overall Score sendo ordenada por ordem decrescente pela terceira coluna. A coluna Average
Score obtida a partir da mdia das primeiras pontuaes obtidas em todos os ficheiros
resolvidos pelo utilizador. A coluna Overall Score calculada a partir da segunda coluna mas
tem tambm em conta o nmero de ficheiros j resolvidos pelo utilizador para que quanto maior
o nmero de ficheiros resolvidos melhor seja a pontuao. Eis a frmula de clculo:

O = Overall Score;
A = Average Score;
n = nmero de ficheiros resolvidos pelo utilizador;
N = nmero total de ficheiros no sistema;
Este sistema de pontuao funciona como um estmulo para o utilizador fazer mais
exerccios para subir na tabela classificativa e previne que um utilizador com apenas um
ficheiro resolvido com boa pontuao fique frente de outro com uma pontuao ligeiramente
inferior mas com um nmero mais elevado de ficheiros resolvidos por exemplo. A utilizao de
uma escala logartmica em vez de linear permite que um utilizador possa atingir uma
classificao relativamente alta resolvendo uma frao de exerccios mais pequena.
A Ilustrao 6 apresenta o diagrama de casos de uso da aplicao.

17

Ilustrao 6 Diagrama de casos de uso

18

5. Desenho e Implementao

Neste captulo so apresentados todos os detalhes de implementao dispostos por cinco


subcaptulos. O primeiro deles composto por uma explicao das escolhas tecnolgicas,
segue-se depois o subcaptulo que apresenta a arquitetura do projeto. Depois, seguem-se ento
os subcaptulos que descrevem as partes integrantes do projeto sendo eles o Servidor, a Base de
Dados e o Cliente, terminando com dois subcaptulo que explicam a forma como as partes
comunicam.

5.1. Escolha de Tecnologias


Para o desenvolvimento de qualquer jogo, comum utilizar-se um motor de jogo como os
famosos CryEngine, UDK, Unity3D entre outros. Como a aplicao a desenvolver tem o
propsito de um jogo, seria de esperar que se utilizasse um desses motores para a desenvolver.
Acontece que estes motores de jogo so mais indicados para jogos com componentes de fsica
como movimento, colises, gravidade e outros. Uma vez que esta aplicao no carece desse
tipo de componentes deixa de ser necessria a utilizao deste tipo de motores de jogo. A
tecnologia escolhida para o desenvolvimento desta aplicao consiste numa aplicao Java que
atua como cliente e conecta por web services com um servidor desenvolvido tambm em Java
que por sua vez se conecta com uma base de dados em MySQL, um dos sistemas de gesto de
base de dados open source mais popular. A portabilidade, a possibilidade de migrao para Java
Applet podendo assim ser integrado em pgina web, o nvel de interatividade permitido, o grau
de conhecimento da linguagem e ainda a popularidade foram alguns dos fatores que
influenciaram a escolha de uma aplicao Java para a soluo deste trabalho. Quanto
arquitetura da soluo consiste num sistema distribudo cliente-servidor capaz de funcionar
sobre a Internet que tem em ateno algumas questes de segurana como por exemplo o facto
19

de o cliente no aceder diretamente base de dados, apenas com invocao ao servidor. Tanto o
cliente como o servidor foram desenvolvidos no IDE Eclipse.
No desenvolvimento deste projeto foram utilizadas ainda vrias APIs que sero
identificadas ao longo do captulo 5 na seco mais indicada.

5.2. Arquitetura
O produto desenvolvido composto por um conjunto de 3 partes, sendo elas, o servidor, a
base de dados e o cliente. Estas 3 partes sero descritas em maior detalhe nos subcaptulos
seguintes. Antes de passar explicao detalhada eis a Ilustrao 7 que mostra um diagrama de
deployment que representa a arquitetura do produto.

Ilustrao 7 Diagrama de arquitetura

5.3. Servidor
O servidor desta aplicao baseia-se num servio web do tipo JAX-WS Web Service ou
seja, um servio web baseado em XML. Este implementado de forma autnoma, ou seja,
apenas utilizada uma aplicao Java que publica um servio web atravs do mtodo publish da
classe javax.xml.ws.Endpoint. Este comando cria um ambiente de execuo de servios web
includo no Java SE 6 e implanta-o num servidor leve HTTP. O servio depois acedido pelos
clientes atravs do endereo fornecido no mtodo publish que disponibiliza um ficheiro em
formato WSDL, uma linguagem baseada em XML para descrever servios web. No captulo 5.6
este tema ser explicado em maior detalhe enquadrando-se na explicao da comunicao
20

cliente-servidor. O servidor dispe ainda de uma comunicao com uma base de dados MySQL
que ser descrita com maior detalhe no captulo 5.7.

5.4. Base de Dados


A base de dados, desenvolvida em MySQL, conta com um conjunto de sete tabelas
necessrias para garantir o funcionamento da aplicao. A Tabela 3 apresenta a lista de tabelas
da base de dados e respetiva descrio. A Ilustrao 8 representa o diagrama relacional da base
de dados.
Tabela 3 Tabelas da base de dados
Nome

Descrio

user

Tabela onde so guardados os registos dos utilizadores.

hile

Tabela onde so guardados os ficheiros para os exerccios.

error

Tabela onde so guardados os erros dos ficheiros.

score

Tabela onde so guardados os primeiros jogos dos utilizadores em cada ficheiro.

likes

Tabela onde so guardados os likes dos utilizadores nos ficheiros.

dislikes
types

Tabela onde so guardados os dislikes dos utilizadores nos ficheiros.


Tabela onde so guardadas as checklists dos ficheiros.

Ilustrao 8 Diagrama relacional da base de dados


21

5.5. Cliente
O cliente uma aplicao Java com uma interface grfica desenvolvida atravs da
biblioteca SWING. O cliente encontra-se divido em trs pacotes, um pacote principal relativo ao
funcionamento da aplicao (pt.up.fe.diss), um pacote de interface grfica (pt.up.fe.diss.gui) e
um ltimo pacote relativo comunicao com o servio web disponibilizado pelo servidor
(pt.up.fe.diss.jaxws). No captulo 5.6 ser explicado em detalhe como feita esta comunicao.
A Ilustrao 9 apresenta o diagrama UML do projeto do cliente.

Ilustrao 9 Diagrama UML do cliente


A interface grfica do cliente foi desenvolvida atravs da biblioteca SWING com o auxlio
do WindowBuilder, um plugin para Eclipse que permite desenvolver o ambiente grfico atravs
de ferramentas WYSIWYG. O desenvolvimento da interface grfica baseia-se num conjunto de
painis, compostos por vrios componentes, que vo transitando entre si. De entre os
componentes utilizados destacam-se o JLable (rea de texto no editvel), o JTestArea (rea de
texto editvel), o JButton (boto que ativa uma ao) e o JTextPane (rea de texto
personalizvel). Seguem-se algumas ilustraes dos painis principais da aplicao com os
respetivos componentes assinalados.

22

Ilustrao 10 Painel do menu principal

Ilustrao 11 Painel da rea de jogo

23

Ilustrao 12 Painel do fim do jogo


Uma vez que a aplicao composta por um conjunto de painis, importante perceber
como funciona a transio entre eles. Eis ento a Ilustrao 13 que apresenta o diagrama de
estados da aplicao, sendo cada estado, a representao de um painel da aplicao e a etiqueta
de transio, o nome do boto que origina tal transio.

Ilustrao 13 Diagrama de navegao entre painis


24

A Ilustrao 13 apenas representa a transio entre painis a partir dos componentes dos
mesmos. H tambm um conjunto de transies entre painis, ainda que menor, a partir da barra
de menus da janela, que foram omitidos para facilitar a interpretao do diagrama de estados.

5.6. Comunicao Cliente Servidor


A comunicao entre o cliente e o servidor feita com base na biblioteca JAX-WS, uma
biblioteca de chamadas remotas, em ingls, RPC - Remote Procedure Call. O objetivo do RPC
permitir que o cliente faa invocaes de funes do servidor como se fossem funes locais.
Todos os aspetos de comunicao e de representao tratados pela biblioteca RPC e por objetos
gerados automaticamente designados por ties, no lado do servidor e por stubs no lado do cliente.
A Ilustrao 14 apresenta em detalhe a estrutura de um JAX-WS Web Service.

Ilustrao 14 Estrutura do JAX-WS (Docentes de Sistemas Distribudos, DEI, IST 2013)


O desenvolvimento de um servio deste gnero feito de uma forma bastante simplificada.
Primeiramente foi necessrio desenvolver as classes do servio, anotando-as segundo a
biblioteca javax.jws e de seguida desenvolver uma classe que publicasse esse servio. Eis como
faz-lo abaixo:
WS.java (Endpoint Interface)
@WebService(name="WS", serviceName = "WSService", portName = "WSPort")
public interface WS {
@WebMethod
boolean checkConnection();
...
}
WSImpl.java (Endpoint Implementation)
@WebService(endpointInterface = "PACKAGENAME.WS")
public class WSImpl implements WS{

25

@Override
boolean checkConnection(){...}
...
}
WSPublisher.java (Endpoint Publisher)
public class WSPublisher {
public static void main(String[] args){
String address = "http://localhost:8080/WS";
WSImpl service = new WSImpl();
Endpoint.publish(address, service);
}
}

Posteriormente foi necessrio gerar os stubs para o cliente poder comunicar com o servio.
Estes foram gerados automaticamente com o comando wsimport da framework JAX-WS RI a
partir do WSDL disponvel no endereo onde o servio publicado atravs do Enpoint
Publisher. O comando o seguinte: wsimport -keep -verbose http://localhost:8080/WS?wsdl.
Por fim, incluindo os stubs gerados no projeto do cliente, criou-se o meio de conexo com
o servio para poder invocar as funes que se desejar. Eis como faz-lo abaixo:
WSImplService service = new WSImplService();
WS wsPort = service.getWSImplPort();
wsPort.checkConnection();

Outra biblioteca til para a comunicao cliente-servidor foi a JAXB. Esta biblioteca
utilizada para permitir o retorno de tipos complexos nas funes do servio. Para isso
necessrio criar a classe do tipo complexo no projeto do servidor e anot-la segundo a biblioteca
javax.xml.bind.annotation. Eis como faz-lo abaixo:
ComplexData.java
@XmlRootElement(name = "complexData")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ComplexDataType", propOrder = {
"attribute1",
"_elements"
})
public class ComplexData {
@XmlElement(name = " attribute1")
private String attribute1;
@XmlAnyElement
private Collection<org.w3c.dom.Element> _elements = null;
...
}

A gerao dos stubs, atravs do comando wsimport acima referido, gera tambm as classes
necessrias para o retorno de objetos do tipo ComplexData. Do lado do cliente objetos deste
tipo assumem o nome ComplexDataType.

26

5.7. Comunicao Servidor Base de Dados


Como referido na seco 5.4 a base de dados do projeto foi desenvolvida em MySQL. Para
estabelecer a comunicao entre o servidor e a base de dados foi necessria a utilizao da
biblioteca JDBC. Esta biblioteca utilizada quando se pretende estabelecer a comunicao entre
uma aplicao Java e uma base de dados em MySQL. Para estabelecer esta ligao foi
necessrio instalar o MySQL Workbench, uma ferramenta grfica para a modelao de bases de
dados, que permite criar uma ligao para posteriormente ser acedida pela aplicao Java. A
conexo com a base de dados a partir da aplicao Java feita da seguinte forma:
private
private
private
private
private
private

Connection connection = null;


String driver = "com.mysql.jdbc.Driver";
String server = "localhost";
String dataBaseName = "wsdatabase";
String username = "user";
String password = "pass";

private String url = "jdbc:mysql://" + server + ":3306/" + dataBaseName;


...
try {
Class.forName(driver);
connection = DriverManager.getConnection(url, username, password);
} catch(ClassNotFoundException ex) {
System.err.println(ex.getMessage());
} catch(IllegalAccessException ex) {
System.err.println(ex.getMessage());
} catch(InstantiationException ex) {
System.err.println(ex.getMessage());
} catch(SQLException ex) {
System.err.println(ex.getMessage());
}

27

28

6. Utilizao e Experimentao

Este captulo apresenta o resultado final do trabalho de dissertao. composto por dois
subcaptulos, tendo o primeiro a mesma finalidade de um manual de utilizao e sendo o
segundo uma demonstrao de um de um caso experimental realista utilizado nas aulas de
Engenharia de Software.

6.1. Modo de Utilizao


A aplicao inicia com um painel de login onde o utilizador se pode autenticar ou ento
escolher a opo de registo caso no esteja registado, conforme apresentado na Ilustrao 15.

29

Ilustrao 15 Painel de login


No caso de ser um novo utilizador e ento optar por fazer novo registo ser-lhe-
apresentado um painel onde deve preencher os campos apresentados e validar o registo tal como
mostra a Ilustrao 16.

Ilustrao 16 Painel de registo

30

Qualquer uma das duas opes anteriores, login ou registo, leva a que seja apresentado um
painel com o menu principal. Uma vez neste painel o utilizador tem sua disposio um
conjunto de botes como mostrado na Ilustrao 17.

Ilustrao 17 Painel do menu principal


Escolhendo a opo Manage Files o utilizador depara-se com o painel representado pela
Ilustrao 18 onde pode gerir os seus ficheiros no sistema eliminando existentes ou carregando
novos ficheiros. Neste caso o utilizador ainda no carregou nenhum ficheiro.

31

Ilustrao 18 Painel de gesto de ficheiros


Escolhendo a opo Upload presente no painel da Ilustrao 18 surge uma caixa de
dilogo que permite ao utilizador selecionar o ficheiro pretendido como mostra a Ilustrao 19.
Como foi referido noutras seces deste documento, a aplicao suporta o carregamento de
ficheiros RTF e HTML.

Ilustrao 19 Seletor de ficheiros


Aps selecionar o ficheiro pretendido e confirmar a operao, apresentado o painel da
Ilustrao 20 onde o utilizador deve marcar os erros para que sirvam de soluo para o ficheiro
32

carregado. Para marcar os erros o utilizador apenas tem de selecionar a poro de texto
pretendida com o rato e, com o boto direito do mesmo, selecionar o tipo de erro em questo.
No painel esquerdo vo surgindo os erros marcados sob a forma de lista podendo ser associado
um comentrio a cada um deles consoante o que esteja selecionado na lista. Para anular um erro,
basta seleciona-lo na lista e clicar na opo Remove ou na tecla Delete. Os erros podem ser
marcados segundo uma checklist predefinida ou configurvel. Para definir qual utilizar,
apenas necessrio escolher a opo pretendida no canto inferior esquerdo do painel. A alterao
de tipo de checklist provoca um recomeo da marcao de erros devido diferena de tipos.
Escolhendo a opo de checklist predefinida, o menu do boto direito do rato tem o aspeto
apresentado na Ilustrao 20.

Ilustrao 20 Painel de seleo de erros (checklist predefinida)


Escolhendo a opo de checklist configurvel, o menu do boto direito do rato tem o
aspeto apresentado na Ilustrao 21. O utilizador pode gerir os tipos de erros da checklist
atravs dos dois primeiros itens do menu do boto direito do rato. A Ilustrao 22 e Ilustrao
23 apresentam, respetivamente, as janelas de adio e remoo de tipos da checklist
configurvel.

33

Ilustrao 21 Painel de seleo de erros (checklist configurvel)

Ilustrao 22 Painel de adio de novo tipo

34

Ilustrao 23 Painel de remoo de tipo existente


Havendo ficheiros no servidor, o utilizador pode dar incio a um jogo selecionando a opo
Single Player presente no painel da Ilustrao 17. Esta opo conduz a aplicao ao painel
presente na Ilustrao 24 onde o utilizador tem acesso a uma lista com todos os ficheiros no
sistema. Os ficheiros desta lista esto identificados com um crculo colorido indicando o seu
estado para o utilizador conectado: a amarelo exerccio por resolver e a verde exerccio j
resolvido. Para iniciar o jogo basta selecionar o ficheiro da lista pretendido e escolher a opo
Start.

Ilustrao 24 Painel de seleo de ficheiro


35

Uma vez em jogo o utilizador, semelhana do que acontece quando se carrega um


ficheiro, apenas tem que marcar os erros selecionando o texto em questo e com o boto direito
escolher o tipo de erro com base na checklist associada ao ficheiro. A anulao de erros feita
da mesma forma que no carregamento de ficheiros como se pode ver na Ilustrao 25 que
representa a rea de jogo.

Ilustrao 25 Painel de jogo


Aps terminar o jogo surge o painel de resultados como apresenta a Ilustrao 26. Neste
painel possvel ver estatsticas do ficheiro acima e estatsticas do exerccio efetuado.
Explicando a validade do resultado final obtido, pode-se ver que o utilizador acertou em metade
dos erros presentes no exerccio, no assinalando nenhum mal. Desta forma daria um resultado
de 50% mas teve um total de 58.6% pois resolveu o exerccio num tempo muito reduzido. O
utilizador pode ainda ver a soluo se assim o desejar antes de concluir o jogo, para isso basta
escolher a opo Solution.

36

Ilustrao 26 Painel de resultados


O painel de solues apresenta a amarelo, os erros marcados no exerccio e a verde as
solues. Atravs do painel esquerdo, o utilizador pode navegar entre as solues e ver o tipo e
comentrio associado a cada um para perceber melhor a soluo. Como se pode ver na
Ilustrao 27, a aplicao assume como correto mesmo que se selecione espaos em branco
antes ou depois da seleo correta. Isto acontece no erro em segundo lugar na lista em que a
soluo int length = 0; e o utilizador selecionou a linha toda. Na seco 6.2 ser explicado
em detalhe qual o padro de seleo para cada tipo de erro admitido pela aplicao.

37

Ilustrao 27 Painel de solues


Aps terminar o exerccio o utilizador pode confirmar a alterao na lista de melhores
resultados como apresentado na Ilustrao 28. Para isso deve selecionar a opo High
Scores do painel representado pela Ilustrao 17. A tabela de melhores resultados apresenta
uma lista ordenada pela coluna Overall Score que uma pontuao baseada na mdia das
pontuaes obtidas, valor da coluna Average Score, mas tendo tambm em conta o nmero de
ficheiros resolvidos.

Ilustrao 28 Painel de melhores resultados


38

6.2. Experimentao
A fim de comprovar a utilidade da aplicao foi feito um teste utilizando um exemplo
realista usualmente abordado nas aulas de Engenharia de Software. O exemplo utilizado
encontra-se disponvel para consulta em Anexo A - Exemplo utilizado nas aulas de Engenharia
de Software. Uma vez que a seleo de erros pode, por vezes, ser ambgua, aproveita-se a
apresentao deste caso para explicar qual o padro de seleo de erros que deve ser utilizado
para o bom funcionamento da aplicao. importante referir que de forma a reforar o sistema
de avaliao, a aplicao no considera caracteres em branco nos extremos da string para que
no se corra o risco de selecionar um espao em branco por distrao e, desta forma, avaliar o
erro como mal assinalado. Segue-se ento a apresentao da experimentao.
O primeiro erro existente no exemplo um erro do tipo comentrio incorreto uma vez
que falta o autor e a data. A forma correta de o assinalar selecionando o comentrio todo.
/**
* Represents a linked list of values (objects) of any type T.
* Supports appending and traversing the list sequentially.
* Changed to also support inserting and retrieving values by
* position and finding a value in the list.
*/
O segundo um erro do tipo instruo no utilizada. A sua marcao deve abranger
toda a instruo em questo.
int length = 0;
O terceiro erro a aparecer no cdigo um erro do tipo validao de argumento
incorreta ou em falta pois os limites de n no so verificados. Nesta situao o utilizador
deve selecionar o tipo e o nome da varivel como apresentado a seguir.
public T getNthValue(int n){
O quarto erro do mesmo tipo que o terceiro ou seja validao de argumento incorreta
ou em falta sendo por isso marcado do mesmo modo.
public void insert(T x, int n){
O quinto erro um erro do tipo dados incorretos pois o valor inicial de i devia ser 1.
Neste caso deve-se selecionar apenas o valor em questo como mostrado a seguir.
for (int i = 0; i < n; i++)
O sexto erro do cdigo um erro do tipo ps-condio incorreta ou em falta. Neste
caso falta atualizar o campo this.lastNode se ficar no fim da lista e o campo
newNode.nextNode. Este tipo de erros deve ser assinalado na chaveta que fecha a funo em
causa.
public void insert(T x, int n){
39

Node<T> newNode = new Node<T>(x);


if (n == 0) {
newNode.setNextNode(firstNode);
firstNode = newNode;
}
else {
Node<T> prev = firstNode;
for (int i = 0; i < n; i++)
prev = prev.getNextNode();
prev.setNextNode(newNode);
}
}
O stimo erro outro erro do tipo dados incorretos. Como dito acima deve ser marcado
apenas no valor em questo.
int index = -1;
O oitavo erro um erro do tipo expresso lgica incorreta sendo marcada toda a
expresso lgica mesmo que s parte dela esteja errada. Neste caso, o correto seria a negao da
segunda parte da expresso.
while (node != null && node.getValue().equals(x)) {
O nono erro um erro do tipo valor de retorno incorreto. Este tipo de erros deve ser
marcado na chaveta que fecha a funo em causa.
public int find(T x){
int index = -1;
Node<T> node = firstNode;
while (node != null && node.getValue().equals(x)) {
node = node.getNextNode();
index++;
}
return index;
}
O dcimo erro do mesmo tipo que o primeiro, ou seja, comentrio incorreto e deve
ser marcado selecionando todo o comentrio. Neste caso falta o autor e data.
/**
* Represents a node in a linked list of values (objects) of
type T.
*/
Para alm dos erros presentes neste exemplo existem ainda outros tipos de erros suportados
pela aplicao. Um deles instruo em falta em que deve ser marcada a linha completa
imediatamente a seguir posio da instruo em falta e o outro pr-condio incorreta ou
em falta que semelhana da ps-condio deve ser assinalada na chaveta de abertura da
funo.
40

7. Concluses e Trabalho Futuro

Este captulo apresenta concluses obtidas do trabalho desenvolvido assim como planos de
melhoria para futuro.

7.1. Satisfao dos Objetivos


Aps o desenvolvimento deste projeto de dissertao pode-se concluir que os objetivos
pretendidos foram alcanados. A aplicao obtida no final deste projeto, desenvolvida com a
finalidade de permitir praticar tcnicas de reviso de cdigo com melhores resultados que o
estudo tradicional cumpre os objetivos estipulados inicialmente. E tanto quanto do
conhecimento do autor no h nenhuma outra aplicao do gnero da desenvolvida. Esta
aplicao permite exercitar os tradicionais processos de reviso de cdigo atravs de um sistema
simples e prtico, econmico, eficiente e comunitrio. Exemplo disso que, utilizando esta
aplicao, o utilizador apenas tem que escolher o exerccio pretendido e sublinhar os erros
marcando-os com um simples clique do rato de forma to simples e prtica como soa. Para alm
disso, mais econmico pois no tem gastos em material como papel ou instrumento de escrita,
mais eficiente na medida em que poupa tempo na correo do exerccio e comunitrio pois
permite a partilha de exerccios entre utilizadores poupando tempo na pesquisa de novos
exerccios.
No fundo, esta aplicao segue a tendncia do mundo atual em utilizar as capacidades da
tecnologia para complementar ou substituir atividades tradicionais. Um exemplo que se
assemelha a este so os exerccios de exames de cdigo da estrada. Toda a gente sabe que
existem exerccios em formato digital (cd/dvd) e em formato fsico (livro), no entanto a
percentagem de pessoas que utiliza o formato digital superior de formato fsico. Uma das
vrias vantagens da utilizao do formato digital o simples facto de no computador, o
41

resultado ser apresentado de imediato e o utilizador no ter de perder tempo a verificar as


solues como o tem de fazer em papel.
importante realar que o trabalho obrigou a algumas iteraes para afinar a abordagem
do ponto de vista funcional e para responder aos principais desafios, crendo-se que a soluo
final, eventualmente com algumas adaptaes, possa vir a ser utilizada nas aulas prticas de
Engenharia de Software.

7.2. Trabalho Futuro


A aplicao desenvolvida, apesar de satisfazer os objetivos propostos inicialmente, ficou
aqum de todas as ideias surgidas. De entre todas as ideias possudas pretende-se, nesta seco,
realar as que poderiam ter maior influncia na melhoria.
Como melhoramento do sistema de checklist configurvel estava idealizado incluir um
sistema de tutorial para a identificao de erros consoante o tipo. Ou seja, o utilizador ao fazer o
carregamento de um ficheiro com uma checklist configurvel teria tambm de apresentar uma
espcie de tutorial de marcao dos tipos de erros dessa checklist. Atualmente parte-se do
princpio que todos os tipos de erros suportados pela aplicao estejam documentados na seco
6.2.
Uma ideia para desenvolvimento futuro seria a incluso da atividade de Team Inspection
que no fundo tratar-se-ia de uma verso da aplicao em modo multijogador na qual os
utilizadores poderiam competir com outras equipas enquanto interagiam com a sua atravs de
uma janela de conversao.
Uma outra ideia e bem mais desafiante que a anterior seria o melhoramento do sistema de
correo de exerccios passando a ser possvel uma avaliao mais precisa atravs da seco de
comentrios. Deste modo permitia que o utilizador identificasse no s o tipo de erro assim
como a correo para o mesmo tal como pode ser feito no ensino tradicional.
Num cenrio mais avultado do projeto passaria por melhorar a aplicao ao ponto de
incluir o maior nmero de atividades possveis associadas ao estudo de Engenharia de Software
e integrar a aplicao no moodle da faculdade.
Para trabalho futuro, fica tambm pendente, a experimentao envolvendo pessoas
externas ao trabalho, nomeadamente, alunos de Engenharia de Software, que s no foi possvel
devido a limitaes de tempo.

42

8. Referncias

Alice. 2013. Alice.org. Acedido a 6 de Fevereiro de 2013. http://www.alice.org/.


Arvers, Isabelle. 2009. Serious Games. The International Digital Art Magazine.
Bourque, Pierre, Robert Dupuis, Alain Abran, James W Moore, e Leonard Tripp. 2004. Guide
to the Software Engineering Body of Knowledge. IEEE Software. Los Alamitos, CA,
United States.
Docentes de Sistemas Distribudos, DEI, IST, UTL. 2013. JAX-WS. Acedido a 20 de Maro
de 2013. http://disciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013/labs/lab3/jaxws/index.html.
Frye, Jonathan. 2010. Understanding Serious Games.
Game-Based Learning Dev. 2013. Game-Based Learning for Software Engineering.
WordPress.com. Acedido a 5 de Fevereiro de 2013.
http://learninggamedev.wordpress.com/2010/01/11/game-based-learning-for-softwareengineering/.
MO-SEProcess. 2013. Software Engineering Process Game - VITAL Lab Public Wiki.
Acedido a 6 de Fevereiro de 2013.
http://vital.cs.ohiou.edu/vitalwiki/index.php/Software_Engineering_Process_Game.

43

New Media Institute. 2013. Game-Based Learning: What It Is, Why It Works, and Where Its
Going. Acedido a 5 de Fevereiro de 2013. http://www.newmedia.org/game-basedlearning--what-it-is-why-it-works-and-where-its-going.html.
Prensky, Marc. 2001a. Digital Natives, Digital Immigrants Part 1. On the Horizon 9 (5): 16.
. 2001b. The Digital Game-Based Learning Revolution. Em Digital Game-Based
Learning, Chapter 1:119.
Ranking Web of Universities. 2013. University | Ranking Web of Universities. Acedido a 15
de Janeiro de 2013. http://www.webometrics.info/en/detalles/up.pt.
Robocode. 2013. Robocode Home. Acedido a 6 de Fevereiro de 2013.
http://robocode.sourceforge.net/.
Serious Game University. 2013. Serious Game Types & Examples. Acedido a 4 de Fevereiro
de 2013.
http://www.seriousgameuniversity.com/index.php?option=com_content&view=article&id
=22&Itemid=149.
SimSE. 2013. SimSE Online. Acedido a 6 de Fevereiro de 2013.
http://www.ics.uci.edu/~emilyo/SimSE/index.html.
Software Testing Fundamentals. 2013. Verification Vs Validation. Acedido a 20 de Maio de
2013. http://softwaretestingfundamentals.com/verification-vs-validation/.
Sommerville, Ian. 2011. Software Engineering Boston: : Pearson, .
Starting Point-Teaching Entry Level Geoscience. 2013. Game-Based Learning. Acedido a 4
de Fevereiro de 2013. http://serc.carleton.edu/introgeo/games/index.html.
Wikipdia - Jogo. 2013. Jogo Wikipdia, a Enciclopdia Livre. Acedido a 20 de Maio de
2013. http://pt.wikipedia.org/wiki/Jogo.
Wikipdia - Serious game. 2013. Serious Game Wikipdia, a Enciclopdia Livre. Acedido a
4 de Fevereiro de 2013. http://pt.wikipedia.org/wiki/Serious_game.

44

Anexo A - Exemplo utilizado nas aulas de


Engenharia de Software

LinkedList.java
package esof.utils;
/**
* Represents a linked list of values (objects) of any type T.
* Supports appending and traversing the list sequentially.
* Changed to also support inserting and retrieving values by
* position and finding a value in the list.
*/
public class LinkedList<T> {
private Node<T> firstNode = null;
private Node<T> lastNode = null;
int length = 0;
/**
* Appends a value "x" at the end of the list.
*/
public void append(T x) {
Node<T> newNode = new Node<T>(x);
if (firstNode == null)
firstNode = newNode;
else
lastNode.setNextNode(newNode);
lastNode = newNode;
}
/**
* Retrieves the first node in the list (null if list is
empty).
45

* To get the value in that node and next node, see class
Node.
*/
public Node<T> getFirstNode(){
return firstNode;
}
/**
* Retrieves the value in position "n" of list (0 to length1).
*/
public T getNthValue(int n){
Node<T> node = firstNode;
for (int i = 0; i < n; i++)
node = node.getNextNode();
return node.getValue();
}
/**
* Inserts value "x" in position "n" of the list (0 to
length).
*/
public void insert(T x, int n){
Node<T> newNode = new Node<T>(x);
if (n == 0) {
newNode.setNextNode(firstNode);
firstNode = newNode;
}
else {
Node<T> prev = firstNode;
for (int i = 0; i < n; i++)
prev = prev.getNextNode();
prev.setNextNode(newNode);
}
}
/**
* Retrieves the position of the first occurrence of value
"x"
* in the list (between 0 and length), or -1 if not found.
*/
public int find(T x){
int index = -1;
Node<T> node = firstNode;
while (node != null && node.getValue().equals(x)) {
node = node.getNextNode();
index++;
}
return index;
}
}
Node.java
46

package esof.utils;
/**
* Represents a node in a linked list of values (objects) of
type T.
*/
public class Node<T> {
private T value;
private Node<T> nextNode;
/**
* Creates a new node containing a value "x".
* Should only be called from LinkedList.
*/
Node(T x) {
value = x;
nextNode = null;
}
/**
* Sets the next node.
* Should only be called from LinkedList.
*/
void setNextNode(Node<T> nextNode) {
this.nextNode = nextNode;
}
/**
* Retrieves the value stored in this node.
*/
public T getValue(){
return value;
}
/**
* Retrieves the next node (null if there is none).
*/
public Node<T> getNextNode(){
return nextNode;
}
}

47

You might also like