Projeto de Trabalho de Conclusão de Curso — TCC em Computação @ UFCG

João Arthur Brunet
8 min readMar 20, 2019

--

Eduardo Galeano — “Um homem do povo de Neguá, no litoral da Colômbia, conseguiu subir ao alto do céu e na volta contou: Disse que tinha contemplado, lá de cima, a vida humana. E disse que somos um mar de foguinhos. O mundo é isso, revelou: um montão de gente, um mar de foguinhos. Não existem dois fogos iguais. Cada pessoa brilha com luz própria, entre todas as outras. Existem fogos grandes e fogos pequenos, e fogos de todas as cores. Existe gente de fogo sereno, que nem fica sabendo do vento, e existe gente de fogo louco, que enche o ar de faíscas. Alguns fogos, fogos bobos, não iluminam nem queimam. Mas outros…Outros ardem a vida com tanta vontade que não se pode olhá-los sem pestanejar, e quem se aproxima se incendeia”.

Contextualização

O objetivo deste documento é apresentar e discutir a natureza de trabalhos de conclusão de curso (TCCs) no contexto de Ciência da Computação. Tipicamente, TCCs tem um caráter científico e, por isso, há muita discussão sobre a validade ou não de propostas de TCC diante das exigências estabelecidas por esse viés.

Não vamos aqui restringir com exatidão o escopo de um TCC em Computação tampouco encerrar a discussão sobre Ciência da Computação ser ciência ou não. Essa discussão é antiga e se arrasta por tempo suficiente para sabermos que a resposta é menos importante do que a pergunta. Uma excelente referência sobre o assunto é o artigo do professor Peter J. Denning que foi discutido pelo professor Jacques Sauvé neste vídeo. No artigo, Denning analisa os critérios para uma área ser considerada ciência e discute Computação sob a perspectiva desses critérios.

Iremos, sim, apresentar e discutir possibilidades de TCCs que vão além da realização de pesquisas científicas. Essa é uma diretriz do Núcleo Docente Estruturante e do Colegiado do nosso curso. A ideia é que o TCC sirva de instrumento para avaliar a sua capacidade de conduzir um trabalho técnico de maneira individual em que você demonstre domínio de parte das habilidades que desenvolveu durante o curso.

TCC em Computação @ UFCG?

Formalmente, o TCC em Computação @ UFCG é regulamentado por este documento. Como dito anteriormente, o objetivo principal dessa disciplina é avaliar o seu domínio sobre os conhecimentos adquiridos durante o curso. Para isso, O TCC foi pensado como instrumento em que você demonstra essas habilidades. Assim, foram previstas 3 modalidades de TCC no contexto do nosso curso. Antes de discutir cada uma delas detalhadamente, vamos analisar o que diz o artigo 4º da regulamentação:

Art. 4º O TCC poderá se realizar em três modalidades, sendo estas:

I — pesquisa científica na área de Ciência da Computação, tendo como resultados um documento no formato de artigo científico e os artefatos adicionais necessários à reprodução desta pesquisa;

II — a implementação de um projeto em computação que demonstre o uso de múltiplas habilidades adquiridas no curso e tendo como resultado uma monografia acompanhada dos artefatos produzidos no desenvolvimento dos sistemas usados no TCC;

III — a evolução de um projeto em computação de código aberto de computação que demonstre o uso de múltiplas habilidades adquiridas no curso e tendo como resultado uma monografia acompanhada dos artefatos produzidos no desenvolvimento dos sistemas usados no TCC.

Como podemos perceber, além da modalidade, de certa forma, tradicional, em que o aluno conduz uma pesquisa científica e que a concretiza em forma de artigo, a regulamentação caracteriza também o desenvolvimento ou evolução de um sistema computacional como modalidades de TCC. Essa decisão amplia consideravelmente as possibilidades de possíveis propostas e execuções de TCCs no nosso curso. A seguir vamos discutir detalhadamente e apresentar exemplos concretos de trabalhos em cada uma dessas modalidades.

Pesquisa Científica

Trabalhos nessa modalidade tipicamente incluem a definição de uma questão de pesquisa, de uma metodologia adequada para a sua investigação e a execução de um experimento para coleta, tratamento e análise de dados, tendo como objetivo responder a questão previamente elaborada. De certa forma, diferentes tipos de experimentos e metodologias para condução de trabalhos científicos foram amplamente discutidos na disciplina de Metodologia Científica. Não será nosso objetivo rever em detalhes essas definições. Contudo, iremos relembrar alguns desses conceitos através da discussão de vários trabalhos dessa natureza. Além dessa discussão, é papel do seu orientador e dos professores de Projeto de TCC e de TCC te guiar nesse processo.

A pesquisa em Ciência da Computação é realizada em suas mais diversas sub-áreas (e. g. redes e sistemas distribuídos, inteligência artificial, bancos de dados, engenharia de software etc) e categorias. Há uma discussão bem detalhada neste documento, que apresenta alguns formatos recorrentes de pesquisa.

Abaixo estão alguns exemplos de trabalhos científicos realizados nessas áreas e que discutiremos em sala de aula. Importante destacar que muitos desses trabalhos são frutos de projetos PIBIC e similares. Além disso, no documento referenciado acima a discussão gira em torno de trabalhos de mestrado e doutorado, mas que estão inseridos aqui apenas para fins de exemplos de trabalhos científicos. Embora em alguns casos seja possível, não se espera que você conduza um trabalho dessa amplitude e profundidade durante o TCC.

Exemplos de trabalho de PIBIC realizados em Computação em 2018/2019

Avaliação de Abordagens para Detecção de Defeitos em Programas Baseados em Contratos

José Manoel dos Santos Ferreira , Tiago Lima Massoni

No contexto de programação baseada em contratos, é essencial a concordância entre o código-fonte e a sua especificação, porém o processo de desenvolvimento e suscetível a falhas, que nem sempre são fáceis de serem percebidas e, essa falta de conformidade é classificada como defeito: uma não-conformidade. Diante disso, foram desenvolvidas abordagens que realizam verificação de conformidade, dentre as existentes foram escolhidas três — a saber ContractOk, Clousot e Pex — e foi realizado um experimento para identificar qual das ferramentas se mostra mais eficaz no processo de detecção de não-conformidades. Esse experimento foi conduzido por meio da execução das abordagens em 10 sistemas C#/Code Contracts de código aberto. Após a realização do experimento, observou-se que dentre as abordagens selecionadas a que apresentou melhor resultado, foi a ferramenta Pex seguida pela ferramenta ContractOk.

Suporte a uma Linguagem Visual para Análise Automática de Requisitos de Software

Dayvson Weslley Cantalice do Nascimento , Franklin de Souza Ramalho

O fracasso em produzir artefatos precisos e completos durante as atividades da Engenharia de Requisitos figura como uma das principais causas de projetos de software mal sucedidos. Análises complexas acerca de possíveis inconsistências ou omissões em especificações tornam-se disponíveis para aqueles que se aventuram a descrever requisitos utilizando uma linguagem formal, que permite automatizar — ao menos parcialmente — a verificação. Entretanto, é esperado uma certa resistência por parte de engenheiros de software ema adotar tal solução em seus projetos. Tal resistência poderia ser contornada se existisse um caminho intermediário entre a análise precisa de uma linguagem formal e uma linguagem que oferecesse considerável expressividade e uma maior facilidade de leitura e escrita. Com objetivo de explorar essa necessidade, o presente projeto de pesquisa foi realizado a partir de um estudo, projeto e implementação de um suporte ferramental para a linguagem visual GIRL (linguagem utilizada para especificação de restrições sobre sistemas), bem como a avaliação desta ferramenta em um estudo científico. Este suporte ferramental tem como funcionalidade principal mostrar visualmente eventuais inconsistências presentes na especificação em GIRL, permitindo assim que o usuário seja capaz de entender aquilo que se apresenta como inconsistência na sua especificação e, consequentemente, corrigir as inconsistências.

Implementação ou evolução de um sistema computacional

Essas duas outras categorias, nesta seção reunidas, dizem respeito a algo que permeia a formação de um aluno de ciência da computação desde o início do seu curso — o desenvolvimento de sistemas. De maneira geral, essa atividade abrange o curso como um todo, mesmo quando estamos falando de disciplinas teóricas e de outras áreas. Importante aqui destacar que o desenvolvimento de um sistema computacional que utilize os conhecimentos adquiridos durante a sua formação é suficiente para ser considerado um trabalho de conclusão de curso. Diferentemente da modalidade anterior, não é preciso avaliar esse sistema através de experimentos científicos para que ele seja considerado como um TCC. Contudo, naturalmente, é muito importante que o que foi desenvolvido seja apresentado de maneira técnica e que tenha relevância no contexto em que foi pensado. Veja alguns exemplos abaixo.

Recomendação Automática de Disciplinas para a Próxima Matrícula

Lívia Cavalcanti Bandeira Julião , Leandro Balby Marinho

A escolha de disciplinas para cursar no próximo semestre é crucial para o bom desempenho do aluno. Muitas vezes tal decisão é respaldada em fontes informais que não necessariamente se aplicam a realidade do estudante. Por outro lado, a personalização de indicadores para a melhor escolha pode ser otimizada caso a fonte seja confiável e diversificada. Como alternativa, o presente trabalho se utilizou do histórico do aluno e algoritmos de sistemas de recomendação, uma vez que estes se enquadram no escopo do problema. Em resultado, criou-se um aplicativo de recomendação de disciplinas a partir do desempenho provável do aluno nas disciplinas a serem cursadas.

Usando Técnicas de Mineração de Dados para Prever Resultados de Partidas de Futebol

Lucas Barros Rocha , Carlos Eduardo Santos

Com a quantidade de dados disponibilizados na Internet nos últimos anos relacionados ao futebol, surgiu o interesse de conhecer mais sobre o esporte e tentar prever resultados de partidas a partir do conhecimento adquirido com resultados históricos. Este trabalho propõe um método para predição de resultados de partidas de futebol utilizando mineração de dados. Para tal, foram feitas extrações de dados a partir de portais online e sites de casas de apostas que oferecem dados publicamente, para formação de uma base de dados integrada. Em seguida, foi aplicado um processo de limpeza, organização e derivação de dados, para que algoritmos de aprendizagem de máquina pudessem buscar padrões implícitos nos dados, com o intuito de obter o melhor valor de predição. Foram alcançados acertos superiores aos das casas de apostas as quais, por si só, podem ser consideradas boas preditoras. Na predição de vitória do time da casa, por exemplo, foi obtido um valor de predição 10,71% superior ao das casas de apostas. Palavras-chave: futebol, apostas, algoritmos, predição, casas de apostas.

Deciframe (https://ciframe.herokuapp.com/#/)

João Arthur Brunet, Jefferson Neves, Mariana Souto e Daniel Fireman

Aumente seu repertório musical com o deciframe! Descubra as músicas que você já sabe tocar e ainda não faz ideia. No deciframe você aponta quais acordes domina e recebe uma lista de canções compostas por esses acordes.

Quem me representa? http://qmrepresenta.com.br

Andryw Marques, Nazareno Andrade e João Arthur Brunet

Saiba quais deputados se parecem com você de acordo com as votações da câmara. Dê sua opinião nos temas listados e os deputados serão ordenados pela semelhança com a sua opinião dada. Você pode também selecionar seu estado ou filtrar pelo nome.

Mineração de Dados para o Acompanhamento Cotidiano do Poder Legislativo Paulo Vinícius da Silva Soares , Nazareno Ferreira de Andrade

Após o golpe de 2016 ficou evidente a importância do congresso nacional brasileiro, de forma que houve um aumento no interesse de monitoramento deste. Apesar da motivação, ainda existe muita burocracia na forma em que o dado é disponibilizado, que varia desde a campos incompletos a tabelas extremamente complexas e com inúmeras colunas dificultando análises mais profundas e exigindo do usuário mais tempo dedicado à normalização, padronização e limpeza dos dados do que à análise propriamente dita. Dessa maneira, o eleitor se afasta ainda mais dessas informações haja visto a dificuldade de compreensão desses dados. Com esta problemática, este projeto teve como objetivo evoluir uma ferramenta que calcula a compatibilidade do deputado federal com o eleitor baseada em votações que ocorreram na Câmara dos Deputados. Para tanto, foi criado um pacote R, que serviu como wrapper para a API da Câmara Federal, e a interface web da ferramenta foi repaginada utilizando ReactJS e AntDesign buscando a construção de um Web Progressive App. Os resultados foram a produção de um sistema web hospedado no GitHub Pages e um pacote R disponível no CRAN com uma quantidade considerável de acessos de forma que podemos inferir a importância desse facilitador de informação.

--

--