Skip to content

Commit

Permalink
Compiladores: Exercício T0
Browse files Browse the repository at this point in the history
  • Loading branch information
rafasgj committed Mar 20, 2024
0 parents commit 406e472
Show file tree
Hide file tree
Showing 13 changed files with 618 additions and 0 deletions.
23 changes: 23 additions & 0 deletions .exercicio_zero/configure
@@ -0,0 +1,23 @@
#!/bin/sh

TOPDIR="$(dirname $(dirname $(realpath $0)))"
EXZERODIR="${TOPDIR}/.exercicio_zero"

. "${EXZERODIR}/project"


for file in "${TOPDIR}/pyproject.toml" "${TOPDIR}/README.md"
do
echo "Processing ${file}"
sed -i "${file}" -e "
s/@HOMEWORK@/${HOMEWORK}/g
s/@USER@/${USERNAME}/g
s/@REPO@/${REPOSITORY}/g
s/@WORKCODE@/${WORKCODE:-T${WORKNUM}}/g
s/@WORKNUM@/${WORKNUM}/g
s/@MONTH@/${MONTH:-$(date +"%m")}/g
s/@DISC@/${DISCIPLINA}/g
s/@CURSO@/${CURSO:-"Ciência da Computação"}/g
s/@UNIV@/${UNIVERSIDADE:-"Universidade LaSalle Canoas"}/g
"
done
88 changes: 88 additions & 0 deletions .github/workflows/grade.yml
@@ -0,0 +1,88 @@
# Copyright (c) 2024 Rafael Guterres Jeffman
# See the file COPYING for license details.
---
name: grade_work
run-name:
on: [push, pull_request]
jobs:
lint_check:
name: Avaliação do pylint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 1
- uses: actions/setup-python@v5
with:
python-version: "3.x"
- run: |
pip install pylint
pylint src
pep8_check:
name: Avaliação do flake8
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 1
- uses: actions/setup-python@v5
with:
python-version: "3.x"
- run: |
pip install flake8
flake8 --ignore=E501 src
docs_check:
name: Verifica documentação mínima do cốdigo
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 1
- uses: actions/setup-python@v5
with:
python-version: "3.x"
- run: |
pip install pydocstyle
pydocstyle src
run_tests:
name: Executa os testes de avaliação
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 1
- uses: actions/setup-python@v5
with:
python-version: "3.x"
- run: |
pip install behave
pip install -e .
behave
- name: Arquiva resultados
uses: actions/upload-artifact@v3
with:
name: homework_evaluation
path: RESULT
retention-days: 1
report_result:
name: Resultados da avaliação
if: ${{ always() }}
needs: run_tests
runs-on: ubuntu-latest
steps:
- name: Download a single artifact
uses: actions/download-artifact@v3
with:
name: homework_evaluation
- run: sed -n -e '$ ! p' RESULT
report_grade:
name: Previsão de nota final
if: ${{ always() }}
needs: run_tests
runs-on: ubuntu-latest
steps:
- name: Download a single artifact
uses: actions/download-artifact@v3
with:
name: homework_evaluation
- run: sed -n -e '$ p' RESULT
14 changes: 14 additions & 0 deletions .gitignore
@@ -0,0 +1,14 @@
# project configuration
.exercicio_zero/project

# patch files
*.orig
*.rej

# generated files
/**/__pycache__/
RESULT

# test tools
.coverage
.tox
20 changes: 20 additions & 0 deletions COPYING
@@ -0,0 +1,20 @@
Copyright (c) 2024 Rafael Guterres Jeffman

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice (including the next
paragraph) shall be included in all copies or substantial portions of the
Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
135 changes: 135 additions & 0 deletions INSTRUCOES.md
@@ -0,0 +1,135 @@
Instruções para a realização do exercício
=========================================

**Prazo máximo para a entrega do exercício: 27/03/2024**

Objetivos
---------

O objetivo desse exercício é praticar o uso do Git e do Github, e entender
como será realizada a avaliação dos trabalhos de implementação da disciplina
de Compiladores.

Objetivos secundários do exercício é familiarizar o aluno com ferramentas de
automação de testes da linguagem Python, como o `tox` e o `behave`.


Instruções
----------

O primeiro passo é realizar um _fork_ do projeto no
[Github](https://github.com/exercicios-programacao/compiladores-t0), para o
seu usuário. Esse passo irá criar um repositório do seu usuário que pode ser
utilizado para o desenvolvimento do trabalho.

Após, você deverá obter uma cópia local do projeto, utilizando o `git`:

```
git clone https://github.com/<seu_usuario>/compiladores-t0
```

A partir dessa cópia local você irá implementar o código que falta para que
os testes existentes completem com sucesso.

Para executar os testes, utilize o comando `behave`. (Veja como preparar o
ambiente de desenvolvimento no arquivo [README.md](README.md)).

Uma vez que os testes executam corretamente, você pode verificar outras
métricas de qualidade de código, executando programas como `flake8`,
`pylint` ou `pydocstyle`. Estes programas fazem verificação de boas práticas
de codificação na linguagem Python.

A forma mais simples de executar todos os comandos é utilizando o programa
`tox`, que foi configurado neste projeto para executar tanto os testes de
avaliação do código, como os testes de verificação.

```
tox
```

Para executar apenas os testes de boas práticas de codificação, execute:

```
tox -e lint
```

Uma vez que você está satisfeito com os resultados (mesmo que sejam ainda
resultados parciais), você pode _commitar_, localmente, seu trabalho:

```
git add <arquivos_novos_ou_modificados>
git commit
```

Para verificar a avaliação oficial, você precisará criar um
_pull request_. Para isso deve, primeiro, enviar seu trabalho para o seu
repositório no Github:

```
git pull
```

Nesse caso, se executado na linha de comando, o git irá mostrar um link
para criar o _pull request_ contra o repositório original. Basta completar
as informações e criar o _pull request_, que a avaliação oficial será
executada e pode ser acompanhada na aba _Actions_.

Entre as informações que você precisa preencher estão:

* Nome completo do aluno no _título_ do _pull request_.
* Citar quais foram suas dificuldades no campo de texto do _pull request_.

Caso você não utilize a linha de comando o processo de criação do
_pull request_ deve ser realizado pelo Github, ou utilizando as ferramentas
do seu ambiente de desenvolvimento escolhido.


Tarefas
-------

Você deve completar o código de forma a passar nos testes automatizados.
Para isso, você precisa implementar, no módulo `zero`, os métodos:

* `procura_maior(dados: list) -> int`
: Retorna o inteiro com o maior valor, presente na lista.
* `procura_menor(dados: list) -> int`
: Retorna o inteiro com o menor valor, presente na lista.
* `procura_impares(dados: list) -> list`
: Retorna a lista de elementos ímpares, presentes na lista.
* `procura_pares(dados: list) -> list`
: Retorna a lista de elementos pares, presentes na lista.

Como exemplo, parte do trabalho já foi realizado, e foi incluida a
implementação do método `procura_maior(dados: list) -> int`.


Importante
----------

* A nota final do trabalho será atribuída pelo professor, baseado na nota
da avaliação automática, de acordo com o resultado disponível na data de
entrega do trabalho. Um comentário irá marcar o número (_hash_) do _commit_
utilizado para a avaliação.

* Sempre que você alterar o estado do _branch_ que você utilizou para criar
o _pull request_, a avaliação será executada novamente, logo, você pode
utilizar essa característica para acompanhar o seu desenvolvimento.

* Para este trabalho, apenas o arquivo `src/zero.py` pode ser alterado.

* O resultado desse exercício não fará parte da nota do grau.


Sobre a Avaliação
-----------------

Ao requisitar o _pull request_ uma série de testes serão executados e uma
indicação da nota obtida no trabalho será fornecida. Note que esta nota pode
aumentar ou diminuir dependendo de outros fatores, como falhas nos testes de
qualidade de código, que diminuiriam a nota, ou soluções criativas e/ou
elegantes, que aumentariam a nota.

> **IMPORTANTE:** não é permitida a alteração de **nenhum** arquivo fora do
diretório `src`. Caso você queira adicionar mais testes, crie novos
arquivos no diretório `features`, mas não modifique os arquivos existentes.

71 changes: 71 additions & 0 deletions README.md
@@ -0,0 +1,71 @@
compiladores-t0
====================

Exemplo de projeto com avaliação automática de resultados.

Preparação para a execução do trabalho
--------------------------------------

Para iniciar este trabalho, faça um _fork_ do repositório
[https://github.com/exercicios-programacao/compiladores-t0](https://github.com/exercicios-programacao/compiladores-t0)
para o seu usuário do Github.

Siga as orientações para a preparação do ambiente de desenvolvimento
contidas nesse documento.

Todo o código implementado deve estar dentro do diretório `src`. Siga as
instruções contidas no arquivo `INSTRUCOES.md`, que contém os objetivos e
etapas para a realização do trabalho.


Instalação das Dependências
---------------------------

Para realizar este trabalho você deverá utilizar a linguagem de programação
Python, na versão 3.11 ou superior.

Para isolar o ambiente de desenvolvimento, é sugerido o uso de ambientes
virtuais do Pyhton, e você pode criar um ambiente virtual corretamente
configurado com os comandos:

```
$ python -m venv /tmp/compiladores-t0
$ pip install -e .
```


Desenvolvimento
---------------

Durante o desenvolvimento do trabalho, você pode executar os testes,
localmente, utilizando os comandos `tox` ou `behave`. A diferença entre os
dois é que o `behave` executa apenas os testes funcionais e o `tox` executa
os testes de qualidade de código, como formatação e boas práticas.

É sugerido que se trabalhe em um cenário de cada vez, o que pode ser obtido
utilizando-se o comando `behave --stop`, para que os testes funcionais
parem na primeira falha.


Entrega
-------

Para entregar o trabalho, faça commit do código, envie para o seu _fork_ no
Github, e abra um _pull request_ contra o
[repositório original](https://github.com/exercicios-programacao/compiladores-t0).

O título do _pull request_ deve conter o nome do aluno que o está criando.
Na mensagem deve constar o nome completo do autor do _pull request_, e de
todos os alunos que realizaram o trabalho, no caso de trabalhos em grupo.
Qualquer informação necessária para a entrega do trabalho deve estar
presente no corpo dessa mensagem.

Você deve garantir que os testes (`checks`) executaram corretamente, pois é
a partir deles que será realizada a avaliação.


Discussões Online
-----------------

Dúvidas e disccussões sobre o trabalho podem ser realizadas utilizando as
[discussões do Github](https://github.com/exercicios-programacao/compiladores-t0/discussions).
33 changes: 33 additions & 0 deletions features/common_test.py
@@ -0,0 +1,33 @@
# SPDX-License-Identifer: MIT

"""Commom test functionality."""

import sys


def import_module_error(module_name):
"""Provide a better message when test module is not available."""
print(f"Você implementou o módulo '{module_name}'?", file=sys.stderr)
sys.exit(1)


def import_function_error_message(module_name, function_name):
"""Generate a better message for unimplemented tested function."""
return (
f"Você implementou a função '{function_name}' "
f"no módulo '{module_name}'?"
)


def import_function_error(module_name, function_name):
"""Provide a better message when failed to importe tested function."""
print(
import_function_error_message(module_name, function_name),
file=sys.stderr,
)
sys.exit(1)


def expected_observed_mismatch(expected, observed):
"""Return a message when the expected/observed values mismatch."""
return f"Value mismatch: expected={expected} - observed={observed}"

0 comments on commit 406e472

Please sign in to comment.