ti_publica:desenvolvimento_de_sistemas:boas_praticas
Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
| Ambos lados da revisão anteriorRevisão anteriorPróxima revisão | Revisão anterior | ||
| ti_publica:desenvolvimento_de_sistemas:boas_praticas [2019/07/31 14:19] – cartola | ti_publica:desenvolvimento_de_sistemas:boas_praticas [2020/09/21 19:12] (atual) – [Dicas gerais] cartola | ||
|---|---|---|---|
| Linha 2: | Linha 2: | ||
| Tentei reunir aqui boas práticas que gosto de usar para programar. São dicas pessoais que alguns podem preferir não usar, mas as obtive de várias fontes e muitas são de consenso | Tentei reunir aqui boas práticas que gosto de usar para programar. São dicas pessoais que alguns podem preferir não usar, mas as obtive de várias fontes e muitas são de consenso | ||
| - | geral. Algumas dicas são genéricas, outras mais adequadas a uma ou outra linguagem. Quando comecei a escrever estava programando principalmente em python, mas também frequentemente em | + | geral. Algumas são avaliadas para considerar se o código é bom. Algumas dicas são genéricas, outras mais adequadas a uma ou outra linguagem. Quando comecei a escrever estava programando principalmente em python, mas também frequentemente em |
| shell (principalmente bash) e as vezes em php. No passado já programei em C, pascal, perl, fortran e talvez alguma outra linguagem que não estou lembrando agora. | shell (principalmente bash) e as vezes em php. No passado já programei em C, pascal, perl, fortran e talvez alguma outra linguagem que não estou lembrando agora. | ||
| - | =====Para escrever bom código===== | + | Veja também: |
| + | * [[: | ||
| + | * [[ti_publica: | ||
| - | ====Geral==== | + | =====Dicas gerais===== |
| - | * Use um lint(ou linter) pra checar vários aspectos do código. Ex: [[https:// | + | * Use um [[https:// |
| - | * Criar testes automatizados | + | * Crie testes automatizados |
| - | * Não usar linhas maiores que 80 caracteres | + | * Não use linhas maiores que 80 caracteres |
| - | * Crie e use bibliotecas de funções | + | * Crie e use funções, classes, |
| + | * Não faça blocos | ||
| + | * Primeira linha de um código interpretado (linha shebang): | ||
| + | * Em ambientes Unix like (Linux, BSDs, AIX, Solaris, Mac OS etc) | ||
| + | * prefira: # | ||
| + | * do que: # | ||
| + | * fica mais flexível, mais chance de funcionar em ambientes distintos | ||
| + | * **não serve** caso precise de um interpretador específico que não o padrão do sistema | ||
| + | * Se for publicar seu código publique em inglês | ||
| + | |||
| + | ===IDE=== | ||
| + | |||
| + | Eu uso o vim, mas essas funcionalidades provavelmente poderão ser encontradas em outras IDEs. | ||
| + | |||
| + | * Checagem de sintaxe e auto complemento no VIM | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * Configurações no .vimrc: | ||
| + | * set textwidth=80 | ||
| + | * set wrapmargin=8 | ||
| + | * set columns=80 | ||
| + | |||
| + | ===Reuso=== | ||
| + | * Ao criar classes/ | ||
| + | * Ao criar número de versão no código use tipo string | ||
| + | |||
| + | ===Documentação=== | ||
| + | |||
| + | Um projeto de software certamente necessita de arquivos somente de documentação com temas como escopo, regras de negócio, cronograma, papéis e responsabilidades da equipe, requisitos, licenças etc. Em projetos menores muitas vezes isso tudo pode estar num único arquivo LEIAME.txt ou, seguindo a tendência do [[https:// | ||
| + | |||
| + | Isso tudo, porém, não exclui uma boa documentação no próprio código, que é do que falo aqui. | ||
| + | |||
| + | * Use um cabeçalho em cada arquivo de código: | ||
| + | * Descrição do propósito, parâmetros, | ||
| + | * Autor | ||
| + | * Histórico | ||
| + | * A fazer | ||
| + | * Comente os blocos: | ||
| + | * Pylint pede doc para o arquivo, funções e classes, por exemplo | ||
| + | * vim-youcompleteme fornece as docs de funções ao digitar seus nomes | ||
| + | |||
| + | **Exemplo de cabeçalho padrão (python): | ||
| + | |||
| + | # | ||
| + | # -*- coding: UTF-8 -*- | ||
| + | # | ||
| + | # < | ||
| + | # | ||
| + | # | ||
| + | # Historico (mais recente em cima) | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | # A Fazer | ||
| + | # - Tarefa 1 | ||
| + | # - Tarefa 2 | ||
| + | # - subtarefa 2.1 | ||
| ===Variáveis=== | ===Variáveis=== | ||
| Linha 42: | Linha 100: | ||
| ===Testes automatizados=== | ===Testes automatizados=== | ||
| * Algumas linguagens já tem frameworks prontos para adiantar esse trabalho, como o [[https:// | * Algumas linguagens já tem frameworks prontos para adiantar esse trabalho, como o [[https:// | ||
| - | * Criar funções ou classes que recebam e retornem parâmetros testáveis | + | * Criar funções ou classes que recebam e retornem parâmetros testáveis, independentes das demais funções no mesmo código |
| * Criar outro programa que teste, com os testes programados ou preparar trecho do programa para atuar nos testes | * Criar outro programa que teste, com os testes programados ou preparar trecho do programa para atuar nos testes | ||
| - | * Uso de <code python> | + | * Não executar nada caso o programa seja carregado por outro. Isso em geral significa criar uma função ou área " |
| + | * Em Python pode se usar <code python> | ||
| + | * Em Bash (shell) pode se usar <code bash> | ||
| + | if [ " | ||
| - | ===IDE=== | ||
| - | * Use checagem de sintaxe no VIM e auto compleção | + | ===Senhas hardcoded=== |
| - | * vim-syntastic | + | Em algumas situações seu programa precisa utilizar senhas. Se sua execução for agendada |
| - | * vim-youcompleteme | + | * crie um arquivo de configuração |
| - | * set textwidth=80 | + | * coloque nele apenas permissão de leitura e apenas para o usuário necessário |
| - | * set wrapmargin=8 | + | * no programa original, opcionalmente, |
| - | * set columns=80 | + | * não coloque o arquivo de configuração no sistema de controle de versão ou coloque-o com um pré-nome, tipo config-sample |
| - | ===Reuso=== | + | Na prática criei uma função numa biblioteca geral para carregar variáveis de configuração, por conta disso meu arquivo de configuração é homônimo ao programa original adicionado |
| - | * Ao criar classes/ | + | |
| - | * Ao criar número | + | |
| - | + | =====Internacionalização | |
| - | ===ETC=== | + | |
| - | + | ||
| - | **Exemplo | + | |
| - | + | ||
| - | # | + | |
| - | # -*- coding: UTF-8 -*- | + | |
| - | # | + | |
| - | # < | + | |
| - | # | + | |
| - | # | + | |
| - | # Historico (mais recente em cima) | + | |
| - | # | + | |
| - | # | + | |
| - | # | + | |
| - | # A Fazer | + | |
| - | # - Tarefa 1 | + | |
| - | # - Tarefa 2 | + | |
| - | # - subtarefa 2.1 | + | |
| =====Referências===== | =====Referências===== | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| * Referência boa de livros de algumas linguagens populares: https:// | * Referência boa de livros de algumas linguagens populares: https:// | ||
| * Vídeo [[https:// | * Vídeo [[https:// | ||
| - | * [[https:// | ||
| * Cursos gratuitos da USP no Coursera: | * Cursos gratuitos da USP no Coursera: | ||
| * [[https:// | * [[https:// | ||
| * [[https:// | * [[https:// | ||
| + | |||
| + | |||
ti_publica/desenvolvimento_de_sistemas/boas_praticas.1564582775.txt.gz · Última modificação: por cartola
