Entenda um código JS - que não tem readme ou testes e que não foi você que escreveu
Tags: javascript, productivity, learning
Published: 2023-06-12 12:59:08

## 1 a 5 — Execução básica do projeto

1 - Verificar no _package.json_ a versão de _Node.js_ utilizada (essa informação fica lá no finalzinho do arquivo, em _engines_) e usar a mesma versão localmente antes de qualquer outra etapa (um _nvm_ ajuda a alternar entre versões, facilmente)

2 - Instalar as dependências (_npm install_).

3 - Voltar ao _package.json_ e verificar se existe em scripts uma instrução "_build_". Se sim, realizar esse processo (_npm run build_)

4 - Se o _build_ der certo, veja se existe em scripts a instrução "_start_". Se sim, execute o comando.(_npm start_)

Em alguns casos, o build é só para gerar o bundle de produção, então, também é importante avaliar se tem um script "dev" no lugar do start**

5 - Se der certo, verifique a execução no terminal ou no no navegador. A informação de qual será a “porta" que a aplicação vai ser executada sempre está presente na saída das informações do terminal, que é "_https://localhost_:" e a porta, que pode ser 8080, 4200 ou outra.

> Agora, começa a parte "difícil" haha

Continuando, meu exemplo é uma aplicação de front:

## 6 — Verifique configurações de ambiente

Se o _build_ ou o _start_ (ou ambos) não der certo, estude a estrutura de pastas do projeto para entender se existe mais algo que precisa ser executado localmente, como outro projeto. Também pode ser importante verificar arquivos como o ._npmrc_ ou outros arquivos de ambiente.

## 7 — Mapeie classes, objetos e fluxos

Se a etapa de build e execução do projeto der certo, comece entendendo o que aparentemente a aplicação faz. Depois disso, com a ajuda do "inspetor de código" do seu navegador, comece a tentar se situar com os nomes dos componentes e onde eles estão, no código. Anote tudo isso, ou faça um mapa mental.


Caso fique difícil entender onde começa o fluxo da aplicação busque pelo atributo "main" do package.json que indica qual é o arquivo de entry point, ou seja, é onde está o primeiro código a ser executado.*

## 8 — Use o Debugger

Agora, se já ficou mais entendível quais os arquivos que guardam as classes ou as funções mais importantes, use a ferramenta de debugger do navegador ( eu sempre uso Developer Tools do Google Chrome) e entenda qual o fluxo de dados da aplicação:
- o que é consumido
- onde é usado
- como é processado
- qual a saída gerada

Anote tudo no seu mapa mental ou num documento de apoio. Voce precisa entender o que cada variável e funçao faz. Tente explicar pra si mesma enquanto le suas anotações. O mapa mental vai te ajudar a medir o impacto de mudanças, exclusões ou acréscimo de algo, no projeto.

## 9 - Documente
- Como inicializar o projeto, no _Readme.md_
- Se é necessário executar algum outro projeto, em paralelo
- A versão de _Node.js_ usada
- Passe o fluxo desenhado e as anotações para a wiki do repositorio ou algum portal de documentação, do projeto
- Tem algum conhecimento prévio que ajudaria a entender o funcionamento dos processos principais? Algo pouco comum de usar, como por exemplo, uso de Symbol? Se teve algum artigo ou documentação que te ajudou a entendem, inclua também.

## 10 - Melhorias

Depois de realizar toda análise e começar a trabalhar na adição ou remoção de código, veja se tem algo que pode refatorar, como por exemplo,nomes de variáveis ou melhoraria da legibilidade do código. Também verifique se algum processo é realizado sem necessidade, como requisições repetidas ou armazenamento de informações desnecessárias.

Por fim, dentro dos seus conhecimentos,verifique se existe alguma falha de segurança.Isso inclui verificar obfuscação de código,segurança das chamadas http e pacotes vulneráveis na aplicação (npm audit).
Também é interessante criar ao menos um teste de ponta a ponta, na operação principal.

## Considerações finais

Esse processo foi escrito com base em uma experiência que eu tive, no trabalho. Claro, poderia desdobrar muito mais em cada etapa, além do mais, tem o fator muito importante de entender qual o problema que a aplicação resolve. Mas mesmo sabendo que é um escopo geral, o que falei, acho que pode ser util :)

Uma coisa ate mais importante que o texto todo: não se preocupe, isso pode levar tempo. Ás vezes, dias. E não é tempo perdido e voce nao é incompetente por precisar fazer esse processo. Essa foi a coisa mais importante que eu aprendi com o meu mentor aqui da F1rst essa semana: realizar esse processo não é falta de conhecimento, é parte do trabalho.

* Dica do Jhonny Freire, [pelo twitter](https://twitter.com/jhonnyfreire/status/1668239401736863744?t=WL-FOxJbMUHbzBkgWUF2jw&s=19)

** Dica do Luciano Lima, [pelo twitter](https://twitter.com/lucianomlima/status/1668300806871822345?t=yZwhnXupFW9kur81UA4ZWQ&s=19)