Boas Práticas para Computação Científica

Documentos relacionados
Algoritmos e programação

Serviços: API REST. URL - Recurso

Arquivos. Prof. Alberto Costa Neto Programação em Python

Slides_Java_1 !"$ % & $ ' ' Output: Run java. Compile javac. Name of program. Must be the same as name of file. Java source code.

Sistemas Operativos - Mooshak. 1 Mooshak. in fct.ualg.pt/. mooshak.deei.fct.ualg.pt/.

Guião A. Descrição das actividades

Métodos Formais em Engenharia de Software. VDMToolTutorial

UFSM Introdução ao Dev-C++ Profa. Patrícia Pitthan. Introdução ao Dev-C++

01-A GRAMMAR / VERB CLASSIFICATION / VERB FORMS

Guião M. Descrição das actividades

Efficient Locally Trackable Deduplication in Replicated Systems. technology from seed

Para iniciar um agente SNMP, usamos o comando snmpd. Por padrão, aceita requisições na porta 161 (UDP).

Organização de programas em Python. Vanessa Braganholo

Para iniciar um agente SNMP, usamos o comando snmpd. Por padrão, aceita requisições na porta 161 (UDP).

Click the + sign to add new server details. Clique no sinal de "+" para adicionar novos detalhes do servidor. Enter a friendly name for your BI Server

A Linguagem Python: Uma visão geral. Prof. Alberto Costa Neto Programação em Python

User interface evaluation experiences: A brief comparison between usability and communicability testing

DCC 003 Algoritmos e Estruturas de Dados I Tutorial de instalação do GCC e do TextPad

Introdução à Programação Aula 2 Introdução à linguagem Python

Formação de Administradores de Redes Linux LPI level 1. Aula 2 SENAC TI Fernando Costa

Introdução à Engenharia ENG1000

Utilizando subversion como controle de versão

Wiki::Score A Collaborative Environment For Music Transcription And Publishing

Cowboys, Ankle Sprains, and Keepers of Quality: How Is Video Game Development Different from Software Development?

Conversão de registros bibliográficos do PHL para registros no Formato MARC 21 para Dados Bibliográficos

Introdução ao STATA vs. 9 (Banco de Dados)

Manual de instruções

Capítulo 12. SUB-ROTINAS

Ruby. Simplicidade e produtividade

@georgeguimaraes. Integração Discreta. melhorando a Integração Contínua e ganhando em colaboração

NEVA: Programa para aumento de performance de sites web usando o algoritmo de esteganografia

BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Tóffolo 2011/1

Linguagem de Programação I

Versão: 1.0. Segue abaixo, os passos para o processo de publicação de artigos que envolvem as etapas de Usuário/Autor. Figura 1 Creating new user.

MENDELEY. Prof. Sidney Sára Zanetti. Universidade Federal do Espírito Santo CCA / Depto. de Ciências Florestais e da Madeira

Software reliability analysis by considering fault dependency and debugging time lag Autores

Introdução ao EES Engineering Equation Solver

Easy Linux! FUNAMBOL FOR IPBRICK MANUAL. IPortalMais: a «brainware» company Manual

Aqui pode escolher o Sistema operativo, e o software. Para falar, faça download do Cliente 2.

Arte em ASCII. Introdução: Python

Como padronizar as suas routerboards e atualiza-las todas ao mesmo tempo?

TRABALHO PRÁTICO Nro. 02 (Atualizado em 29/10/2008)

Introdução ao FORTRAN (Parte I)

Capítulo 1. INTRODUÇÃO

Versionamento de Código. Núcleo de Desenvolvimento de Software

Descrição de Arquitectura e Design. SyncMasters

T Ã O B O M Q U A N T O N O V O

Agenda. Aprendendo Git/GitHub. Definições. Git. História 31/05/2012. Vantagem de usar controle de versão

Programação de Computadores I. Conhecendo a IDE Code::Blocks

Conceitos Básicos sobre Programação Prática

Capítulo 15. INICIALIZAÇÃO, TEMPO DE CPU E DOS

Lesson 6 Notes. Eu tenho um irmão e uma irmã Talking about your job. Language Notes

5/10/10. Implementação. Building web Apps. Server vs. client side. How to create dynamic contents?" Client side" Server side"

Instruções de Instalação do Agente RMON2

Transações Seguras em Bancos de Dados (MySQL)

Caracterização dos servidores de

Capítulo 4. Programação em ASP

Salvando modificações localmente (commit) Enviando modificações para o servidor (push) Sinalizando versão estável (tag)

VGM. VGM information. ALIANÇA VGM WEB PORTAL USER GUIDE June 2016

Introdução ao Processamento de Imagens com o IRIS Por Rodolfo Barros

GUIÃO A. Ano: 9º Domínio de Referência: O Mundo do Trabalho. 1º Momento. Intervenientes e Tempos. Descrição das actividades

Apresentação da Disciplina de Programação de Computadores I. Vanessa Braganholo

Controle de Versão com GIT

Mini Curso DESCOMPLICANDO C# Professor Hélio

SUMÁRIO VOLUME 1 LÍNGUA INGLESA

Passo- a- passo SKILLSPECTOR Software gratuito para análise cinemática Procedimentos para configuração, digitalização e calibragem

A MÁQUINA ASSÍNCRONA TRIFÁSICA BRUSHLESS EM CASCATA DUPLAMENTE ALIMENTADA. Fredemar Rüncos

FATORES QUE INTERFEREM NA QUALIDADE DO SERVIÇO NA UNIDADE DE SAÚDE DA FAMÍLIA RENATO AUGUSTO PEDREIRA LEONNI EM SANTO AMARO DA PURIFICAÇÃO-BA.

Solutions. Adição de Ingredientes. TC=0.5m TC=2m TC=1m TC=3m TC=10m. O Tempo de Ciclo do Processo é determinado pelo TC da operação mais lenta.

ÍNDICE PORTUGUÊS INDEX ENGLISH

Capítulo 8. CICLOS. Tabela 8.1 Programa8a.f90.

Representação de Algoritmos - Linguagens de Programação

LEI Sistemas de Computação 2011/12. Níveis de Abstração. TPC4 e Guião laboratorial. Luís Paulo Santos e Alberto José Proença

15 a Aula Subprogramação /Subalgoritmos Função e Procedimento

Accessing the contents of the Moodle Acessando o conteúdo do Moodle

booths remain open. Typical performance analysis objectives for the toll plaza system address the following issues:

Ativação padrão Factory Talk, via Internet

Conceitos de Linguagens de Programação (Portuguese Edition)

CallManager expresso: Crie uma imagem de fundo personalizada para o telefone IP 7970

TUTORIAL PRÁTICO SOBRE Git. Versão 1.1

Organização de Computadores Software

Aula 05 Ferramentas de desenvolvimento

É a associação de mais de um fluxo de execução em um único processo.

Cigré/Brasil. CE B5 Proteção e Automação. Seminário Interno de Preparação para o Colóquio do SC B5 2009

Modelagem de Sistemas Computacionais. Seleção de Carga de Trabalho Aula 04 Profa. Priscila Solís Barreto

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada

Delphi IDE. Jocélio Passos Delphi - IDE. Integrad Development Enviroment Ambiente de Desenvolvimento Integrado

Nota de Aula: Utilização da IDE Code::Blocks

Algoritmos e Técnicas de

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

Introdução ao IDE Netbeans (Programação Java)

Figura 1: Interface 3G Identech

TESTEI O LIBREOFFICE ONLINE E ACHEI FANTÁSTICO!

Desenvolvimento de programas em UNIX

Gerência de Configuração. Professor: Dr. Eduardo Santana de Almeida Universidade Federal da Bahia

Select a single or a group of files in Windows File Explorer, right-click and select Panther Print

Linguagem de Programação Procedural (VB) Prof. MSc Eng Marcelo Bianchi AULA 01 - INTRODUÇÃO AO VB

Módulo 10. Medição do Desempenho

PagSeguro-Python Documentation

PROTOCOLOS DE COMUNICAÇÃO

Transcrição:

Boas Práticas para Computação Científica Raniere Gaia Costa da Silva 1 30/11/2012 1 r.gaia.cs@gmail.com Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 1 / 26

Esta apresentação é baseada no artigo Best Practices for Scientific Computing de D. A. Aruliah et al. que encontra-se disponível em http://arxiv.org/abs/1210.0530v2. Os arquivos desta apresentação encontram-se disponíveis em https://github.com/r-gaia-cs/presentations. Licença Salvo indicado o contrário, esta apresentação está licenciada sob a licença Creative Commons Atribuição 3.0 Não Adaptada. Para ver uma cópia desta licença, visite http://creativecommons.org/licenses/by/3.0/. Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 2 / 26

1 Introdução 2 Códigos para seres humanos 3 Automatize tarefas repetitivas 4 Use controle de versão 5 Realize testes 6 Por onde começar? 7 Futuros trabalhos Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 3 / 26

Introdução Scientists spend an increasing amount of time building and using software. However, most scientists are never taught how to do this efficiently. As a result, many are unaware of tools and practices that would allow them to write more reliable and maintainable code with less effort. We describe a set of best practices for scientific software development that have solid foundations in research and experience, and that improve scientists productivity and the reliability of their software. (Retirado de [ABH + 12].) Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 4 / 26

Introdução Scientists spend an increasing amount of time building and using software. However, most scientists are never taught how to do this efficiently. As a result, many are unaware of tools and practices that would allow them to write more reliable and maintainable code with less effort. We describe a set of best practices for scientific software development that have solid foundations in research and experience, and that improve scientists productivity and the reliability of their software. (Retirado de [ABH + 12].) Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 4 / 26

Introdução None of these practices will guarantee efficient, error-free, software development, but used in concert they will reduce the number of errors in scientific software, make it easier to reuse, and save the authors of the software time and effort that can used for focusing on the underlying scientific questions. (Retirado de [ABH + 12].) Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 5 / 26

Introdução None of these practices will guarantee efficient, error-free, software development, but used in concert they will reduce the number of errors in scientific software, make it easier to reuse, and save the authors of the software time and effort that can used for focusing on the underlying scientific questions. (Retirado de [ABH + 12].) Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 5 / 26

Códigos para seres humanos O Código Um código deve: executar corretamente e ser fácil de ler. Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 6 / 26

Códigos para seres humanos O Código Um código deve: executar corretamente e ser fácil de ler. Para que o código seja fácil de ler deve-se considerar os seguintes aspectos quando este for ser escrito: o leitor possui memória e atenção bastante limitada e uso involuntário de reconhecimento de padrões. Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 6 / 26

Códigos para seres humanos Nomes Nomes devem ser consistente, distintos e significativos. Para isso evite nomes não-descritivos e muito similares. Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 7 / 26

Códigos para seres humanos Nomes Nomes devem ser consistente, distintos e significativos. Para isso evite nomes não-descritivos e muito similares. Exemplo (Nomes não-descritivos) a, foo, bar,... Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 7 / 26

Códigos para seres humanos Nomes Nomes devem ser consistente, distintos e significativos. Para isso evite nomes não-descritivos e muito similares. Exemplo (Nomes não-descritivos) a, foo, bar,... Exemplo (Nomes similares) resultado, resultado1, resultados,... Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 7 / 26

Códigos para seres humanos Estilos Deve-se seguir um único estilo de indentação e preferencialmente não misturar CamelCaseNaming com pothole_case_naming. Exemplos de estilos podem ser encontrados em: C++ http://google-styleguide.googlecode.com/svn/ trunk/cppguide.xml. Python http://google-styleguide.googlecode.com/svn/ trunk/pyguide.html. R http://google-styleguide.googlecode.com/svn/ trunk/google-r-style.html. Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 8 / 26

Códigos para seres humanos Parâmetros (1) A ordem dos parâmetros é bastante importante para evitar erros por parte dos usuários. Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 9 / 26

Códigos para seres humanos Parâmetros (1) A ordem dos parâmetros é bastante importante para evitar erros por parte dos usuários. Exemplo Considere a subrotina em Fortran abaixo: subroutine rect_area(x1, x2, y1, y2, a)! This function attribute to `a` the area of the rectangle! with opposite vertices in (x1, x2) and (y1, y2). double precision x1, x2, y1, y2, a a = abs((x1 - y1) * (x2 - y2)) end subroutine rect_area As seguintes chamadas seriam erradas: call rect_area(x_1, y_1, x_2, y_2, a) call rect_area(a, x_1, x_2, y_1, y_2) Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 9 / 26

Códigos para seres humanos Parâmetros (2) Via de regra o uso de estruturas/objetos é recomendada. Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 10 / 26

Códigos para seres humanos Parâmetros (2) Via de regra o uso de estruturas/objetos é recomendada. Exemplo Considere a subrotina para o GNU Octave abaixo: function y = sum_vect(a, b) % This function return the sum of the vectors a and b. n = size(a, 1); for i = 1:n y(i) = a(i) + b(i); end end A seguinte chamada seria errada: a = [0 0]; b = [1 1]; x = sum_vect(a, b); Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 10 / 26

Automatize tarefas repetitivas Evite repetir comandos e clicks (1) Deve-se evitar repetir comandos e clicks utilizados com muita frequência. Em relação aos comandos, recomenda-se utilizar o GNU Make e/ou alguma linguagem de script, e.g., GNU Bash, Python, Ruby, GNU Octave,... E em relação aos clicks, recomenda-se atribuí-los a algum novo botão ou atalho. Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 11 / 26

Automatize tarefas repetitivas Evite repetir comandos e clicks (2) Exemplo Considere o código abaixo em C: #include <stdio.h> int main(){ printf("hello.\n"); return 0; } Para a tarefa de compilá-lo e executá-lo podemos utilizar o GNU Make por meio do arquivo abaixo: hello: hello.c gcc hello.c -o hello run: hello./hello Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 12 / 26

Automatize tarefas repetitivas Evite repetir comandos e clicks (3) Exemplo (Continuação) E por fim, procedemos com $ make run gcc hello.c -o hello./hello Hello. Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 13 / 26

Automatize tarefas repetitivas Evite repetir comandos e clicks (3) Exemplo (Continuação) E por fim, procedemos com $ make run gcc hello.c -o hello./hello Hello. $ make run./hello Hello. Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 13 / 26

Automatize tarefas repetitivas Use o histórico [... ] most command-line tools have a history option that lets users display and re-execute recent commands, with minor edits to filenames or parameters. This is often cited as one reason command-line interfaces remain popular. (Retirado de [ABH + 12].) Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 14 / 26

Automatize tarefas repetitivas Permita a reprodução In order to maximize reproducibility, everything needed to re-create the output should be recorded [... ]. Retirado de [ABH + 12].) Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 15 / 26

Use controle de versão Desafios Two of the biggest challenges scientists and other programmers face when working with code and data are keeping track of changes (and being able to revert them if things go wrong), and working collaboratively on a program or dataset. (Retirado de [ABH + 12].) Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 16 / 26

Use controle de versão Desafios Two of the biggest challenges scientists and other programmers face when working with code and data are keeping track of changes (and being able to revert them if things go wrong), and working collaboratively on a program or dataset. (Retirado de [ABH + 12].) Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 16 / 26

Use controle de versão Comparativos email shared folder DVCS shared folder uso de disco compartilhado por rede local ou serviço nas nuvens, e.g., Dropbox. DCSV Distributed Concurrent Versions System, e.g., git, mercurial (hg). Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 17 / 26

Use controle de versão Comparativos email shared folder DVCS Notificação Fácil Difícil Média shared folder uso de disco compartilhado por rede local ou serviço nas nuvens, e.g., Dropbox. DCSV Distributed Concurrent Versions System, e.g., git, mercurial (hg). Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 17 / 26

Use controle de versão Comparativos email shared folder DVCS Notificação Fácil Difícil Média Identificação Difícil Fácil Fácil shared folder uso de disco compartilhado por rede local ou serviço nas nuvens, e.g., Dropbox. DCSV Distributed Concurrent Versions System, e.g., git, mercurial (hg). Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 17 / 26

Use controle de versão Comparativos email shared folder DVCS Notificação Fácil Difícil Média Identificação Difícil Fácil Fácil Desfazer Difícil Difícil Fácil shared folder uso de disco compartilhado por rede local ou serviço nas nuvens, e.g., Dropbox. DCSV Distributed Concurrent Versions System, e.g., git, mercurial (hg). Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 17 / 26

Use controle de versão Comparativos email shared folder DVCS Notificação Fácil Difícil Média Identificação Difícil Fácil Fácil Desfazer Difícil Difícil Fácil Procurar Difícil Difícil Fácil shared folder uso de disco compartilhado por rede local ou serviço nas nuvens, e.g., Dropbox. DCSV Distributed Concurrent Versions System, e.g., git, mercurial (hg). Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 17 / 26

Use controle de versão Git Exemplo git init -q Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 18 / 26

Use controle de versão Git Exemplo git init -q echo 'Versao 0.1' >> meu_projeto.txt Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 18 / 26

Use controle de versão Git Exemplo git init -q echo 'Versao 0.1' >> meu_projeto.txt git add meu_projeto.txt Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 18 / 26

Use controle de versão Git Exemplo git init -q echo 'Versao 0.1' >> meu_projeto.txt git add meu_projeto.txt git commit -q -m 'Iniciei' Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 18 / 26

Use controle de versão Git Exemplo git init -q echo 'Versao 0.1' >> meu_projeto.txt git add meu_projeto.txt git commit -q -m 'Iniciei' echo 'Versao 0.2' >> meu_projeto.txt Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 18 / 26

Use controle de versão Git Exemplo git init -q echo 'Versao 0.1' >> meu_projeto.txt git add meu_projeto.txt git commit -q -m 'Iniciei' echo 'Versao 0.2' >> meu_projeto.txt git add -u Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 18 / 26

Use controle de versão Git Exemplo git init -q echo 'Versao 0.1' >> meu_projeto.txt git add meu_projeto.txt git commit -q -m 'Iniciei' echo 'Versao 0.2' >> meu_projeto.txt git add -u git commit -q -m 'Mudei' Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 18 / 26

Use controle de versão Git Exemplo git init -q echo 'Versao 0.1' >> meu_projeto.txt git add meu_projeto.txt git commit -q -m 'Iniciei' echo 'Versao 0.2' >> meu_projeto.txt git add -u git commit -q -m 'Mudei' cat meu_projeto.txt Versao 0.1 Versao 0.2 Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 18 / 26

Use controle de versão Git Exemplo git init -q echo 'Versao 0.1' >> meu_projeto.txt git add meu_projeto.txt git commit -q -m 'Iniciei' echo 'Versao 0.2' >> meu_projeto.txt git add -u git commit -q -m 'Mudei' cat meu_projeto.txt Versao 0.1 Versao 0.2 git checkout HEAD^ -q Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 18 / 26

Use controle de versão Git Exemplo git init -q echo 'Versao 0.1' >> meu_projeto.txt git add meu_projeto.txt git commit -q -m 'Iniciei' echo 'Versao 0.2' >> meu_projeto.txt git add -u git commit -q -m 'Mudei' cat meu_projeto.txt Versao 0.1 Versao 0.2 git checkout HEAD^ -q cat meu_projeto.txt Versao 0.1 Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 18 / 26

Use controle de versão Git Exemplo git init -q echo 'Versao 0.1' >> meu_projeto.txt git add meu_projeto.txt git commit -q -m 'Iniciei' echo 'Versao 0.2' >> meu_projeto.txt git add -u git commit -q -m 'Mudei' cat meu_projeto.txt Versao 0.1 Versao 0.2 git checkout HEAD^ -q cat meu_projeto.txt Versao 0.1 git checkout master -q Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 18 / 26

Use controle de versão Git Exemplo git init -q echo 'Versao 0.1' >> meu_projeto.txt git add meu_projeto.txt git commit -q -m 'Iniciei' echo 'Versao 0.2' >> meu_projeto.txt git add -u git commit -q -m 'Mudei' cat meu_projeto.txt Versao 0.1 Versao 0.2 git checkout HEAD^ -q cat meu_projeto.txt Versao 0.1 git checkout master -q cat meu_projeto.txt Versao 0.1 Versao 0.2 Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 18 / 26

Use controle de versão O que versionar? [... ] everything that has been created manually should be put in version control, including programs, original field observations, and the source files for papers. [... ] (Retirado de [ABH + 12].) Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 19 / 26

Use controle de versão O que versionar? [... ] everything that has been created manually should be put in version control, including programs, original field observations, and the source files for papers. [... ] (Retirado de [ABH + 12].) Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 19 / 26

Realize testes Teste Realizar testes para verificar a execução correta do código é essencial. Fazê-los de maneira eficiêncie é uma arte. Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 20 / 26

Realize testes Teste Realizar testes para verificar a execução correta do código é essencial. Fazê-los de maneira eficiêncie é uma arte. Os dois tipos principais de testes são: White-Box testing e Black-box testing. Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 20 / 26

Realize testes Teste Realizar testes para verificar a execução correta do código é essencial. Fazê-los de maneira eficiêncie é uma arte. Os dois tipos principais de testes são: White-Box testing e Black-box testing. Uma de lista frameworks para teste encontra-se em http: //en.wikipedia.org/wiki/list_of_unit_testing_frameworks. Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 20 / 26

Realize testes Python Doctest (1) Exemplo def sum_vect(a, b): """ This function return the sum of the vectors a and b. >>> a = [0, 0, 0] >>> b = [1, 1, 1] >>> sum_vect(a, b) [1, 1, 1] >>> b = ['a', 'b', 'c'] >>> sum_vect(a, b) [98, 99, 100] """ n = len(a) y = [0 for i in range(n)] for i in range(n): y[i] = a[i] + b[i] return y Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 21 / 26

Realize testes Python Doctest (2) Exemplo (Continuação) python -m doctest sum_vect.py ********************************************************************** File "sum_vect.py", line 10, in sum_vect.sum_vect Failed example: sum_vect(a, b) Exception raised: Traceback (most recent call last): File "/usr/lib/python2.7/doctest.py", line 1289, in run compileflags, 1) in test.globs File "<doctest sum_vect.sum_vect[4]>", line 1, in <module> sum_vect(a, b) File "sum_vect.py", line 16, in sum_vect y[i] = a[i] + b[i] TypeError: unsupported operand type(s) for +: 'int' and 'str' ********************************************************************** 1 items had failures: 1 of 5 in sum_vect.sum_vect ***Test Failed*** 1 failures. Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 22 / 26

Por onde começar? Aos poucos ir tornando cada uma das boas práticas um hábito. Atenção Não deve-se seguir a risca as soluções aqui propostas. Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 23 / 26

Futuros trabalhos Pretende-se apresentar o Git com maiores detalhes entre Janeiro e Fevereiro de 2013. O material para a apresentação já começou a ser desenvolvido e a versão beta encontra-se em https: //github.com/downloads/r-gaia-cs/presentations/bgt.pdf. Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 24 / 26

Obrigado Obrigado! r.gaia.cs@gmail.com Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 25 / 26

Bibliografia DA Aruliah, C.T. Brown, N.P.C. Hong, M. Davis, R.T. Guy, S.H.D. Haddock, K. Huff, I. Mitchell, M. Plumbley, B. Waugh, et al. Best practices for scientific computing. arxiv preprint arxiv:1210.0530, 2012. Raniere Silva Boas Práticas para Comp. Científica 30/11/2012 26 / 26