Prefácio
Esta é realmente uma tarefa assustadora, e há muito o que abordar. Portanto, estou humildemente sugerindo isso como um guia abrangente para sua equipe, com dicas para ferramentas e materiais educacionais apropriados.
Lembre-se: são diretrizes e, como tal, devem ser adotadas, adaptadas ou descartadas com base nas circunstâncias.
Cuidado: despejar tudo isso em uma equipe ao mesmo tempo provavelmente falhará. Você deve tentar escolher elementos que dariam o melhor retorno possível e apresentá-los lentamente, um de cada vez.
Nota: nem tudo isso se aplica diretamente a sistemas de programação visual como o G2. Para detalhes mais específicos sobre como lidar com eles, consulte a seção Adendo no final.
Resumo Executivo para o Impaciente
- Defina uma estrutura rígida de projeto , com:
- modelos de projeto ,
- convenções de codificação ,
- sistemas familiares de construção ,
- e conjuntos de diretrizes de uso para sua infraestrutura e ferramentas.
- Instale um bom SCM e verifique se ele sabe como usá-lo.
- Aponte-os para bons IDEs por sua tecnologia e verifique se eles sabem como usá-los.
- Implemente verificadores de qualidade de código e relatórios automáticos no sistema de compilação.
- Associe o sistema de construção a sistemas de integração contínua e inspeção contínua .
- Com a ajuda do acima, identifique a qualidade do código "pontos ativos" e refatorar .
Agora, para a versão longa ... Cuidado, preparem-se!
A rigidez é (geralmente) boa
Esta é uma opinião controversa, pois a rigidez é frequentemente vista como uma força que trabalha contra você. É verdade para algumas fases de alguns projetos. Mas uma vez que você o vê como um suporte estrutural, uma estrutura que elimina as suposições, reduz bastante a quantidade de tempo e esforço desperdiçados. Faça com que funcione para você, não contra você.
Rigidez = Processo / Procedimento .
O desenvolvimento de software precisa de bons processos e procedimentos pelas mesmas razões pelas quais as fábricas ou fábricas de produtos químicos possuem manuais, procedimentos, exercícios e diretrizes de emergência: prevenção de maus resultados, aumento da previsibilidade, maximização da produtividade ...
A rigidez vem com moderação!
Rigidez da estrutura do projeto
Se cada projeto vem com sua própria estrutura, você (e os novatos) estão perdidos e precisam começar do zero toda vez que os abrir. Você não quer isso em uma loja de software profissional e também não quer isso em um laboratório.
Rigidez dos sistemas de construção
Se cada projeto parecer diferente, há uma boa chance de que eles também sejam
construídos de maneira diferente . Uma construção não deve exigir muita pesquisa ou muita adivinhação. Você quer ser capaz de fazer a coisa canônica e não precisa se preocupar com detalhes: configure; make install
, ant
,
mvn install
, etc ...
A reutilização do mesmo sistema de compilação e a sua evolução ao longo do tempo também garantem um nível consistente de qualidade.
Você precisa README
apontar rapidamente as especificidades do projeto e orientar normalmente o usuário / desenvolvedor / pesquisador, se houver.
Isso também facilita muito outras partes da sua infraestrutura de construção, a saber:
Portanto, mantenha sua compilação (como seus projetos) atualizada, mas torne-a mais rígida ao longo do tempo e mais eficiente na denúncia de violações e práticas inadequadas.
Não reinvente a roda e reutilize o que você já fez.
Leitura recomendada:
Rigidez na escolha das linguagens de programação
Você não pode esperar, especialmente em um ambiente de pesquisa, que todas as equipes (e menos ainda todos os desenvolvedores) usem a mesma pilha de linguagem e tecnologia. No entanto, você pode identificar um conjunto de ferramentas "oficialmente suportadas" e incentivar o uso delas. O resto, sem uma boa justificativa, não deve ser permitido (além da prototipagem).
Mantenha sua pilha de tecnologia simples e a manutenção e a amplitude das habilidades necessárias ao mínimo: um núcleo forte.
Rigidez das convenções e diretrizes de codificação
As convenções e diretrizes de codificação são o que permitem desenvolver uma identidade em equipe e uma linguagem compartilhada . Você não deseja errar no terra incognita toda vez que abrir um arquivo de origem.
Regras absurdas que tornam a vida mais difícil ou proíbem ações explicitamente na medida em que os commits são recusados com base em violações simples e simples são um fardo. Contudo:
um conjunto de regras básicas bem pensado retira grande parte dos gemidos e pensamentos: ninguém deve quebrar sob nenhuma circunstância;
e um conjunto de regras recomendadas fornece orientações adicionais.
Abordagem pessoal: Sou agressivo quando se trata de convenções de codificação, alguns até dizem nazistas , porque acredito em ter uma
língua franca , um estilo reconhecível para minha equipe. Quando o código de porcaria é verificado, ele se destaca como uma afta na face de uma estrela de Hollywood: desencadeia uma revisão e uma ação automaticamente. De fato, às vezes fui longe em defender o uso de ganchos pré-confirmação para rejeitar confirmações não conformes. Como mencionado, não deve ser muito louco e atrapalhar a produtividade: deve impulsioná-lo. Apresente-os lentamente, especialmente no começo. Mas é preferível gastar tanto tempo corrigindo códigos defeituosos que você não pode trabalhar em problemas reais.
Alguns idiomas ainda impõem isso por design:
- O Java foi criado para reduzir a quantidade de porcaria que você pode escrever com ele (embora sem dúvida muitos consigam fazê-lo).
A estrutura de blocos do Python por recuo é outra ideia nesse sentido.
Vá, com sua gofmt
ferramenta, que elimina completamente qualquer debate e esforço ( e ego !! ) inerentes ao estilo: corra gofmt
antes de se comprometer.
Verifique se a podridão do código não pode passar despercebida. Convenções de código , integração contínua e inspeção contínua , programação de pares e revisões de código são o seu arsenal contra esse demônio.
Além disso, como você verá abaixo, o código é a documentação , e isso é uma outra área onde convenções incentivar a legibilidade e clareza.
Rigidez da documentação
A documentação anda de mãos dadas com o código. O próprio código é documentação. Mas deve haver instruções claras sobre como construir, usar e manter as coisas.
Usar um único ponto de controle para documentação (como um WikiWiki ou DMS) é uma coisa boa. Crie espaços para projetos, espaços para brincadeiras e experiências mais aleatórias. Todos os espaços reutilizam regras e convenções comuns. Tente fazer parte do espírito de equipe.
A maioria dos conselhos aplicáveis ao código e ferramentas também se aplica à documentação.
Rigidez nos comentários do código
Comentários de código, como mencionado acima, também são documentação. Os desenvolvedores gostam de expressar seus sentimentos sobre o código (principalmente orgulho e frustração, se você me perguntar). Portanto, não é incomum que eles os expressem em termos não duvidosos nos comentários (ou mesmo no código), quando um pedaço de texto mais formal poderia ter transmitido o mesmo significado com menos palavrões ou drama. Não há problema em deixar passar alguns por motivos divertidos e históricos: também faz parte do desenvolvimento de uma cultura de equipe . Mas é muito importante que todos saibam o que é aceitável e o que não é, e esse ruído de comentário é exatamente isso:
ruído .
Rigidez nos logs de consolidação
Os registros de confirmação não são uma "etapa" irritante e inútil do ciclo de vida do seu SCM: você não o pula para chegar em casa a tempo ou prosseguir com a próxima tarefa, ou para conversar com os amigos que foram almoçar. Eles são importantes e, como (a maioria) bom vinho, quanto mais o tempo passa, mais valiosos eles se tornam. Então faça-os direito. Fico espantado quando vejo colegas de trabalho escrevendo uma linha para commits gigantes ou para hacks não óbvios.
As confirmações são feitas por um motivo, e esse motivo nem sempre é expresso claramente pelo seu código e pela única linha do log de confirmação que você inseriu. Há mais do que isso.
Cada linha de código tem uma história e uma história . Os diffs podem contar sua história, mas você deve escrever sua história.
Por que atualizei esta linha? -> Porque a interface mudou.
Por que a interface mudou? -> Como a biblioteca L1 que o definiu foi atualizada.
Por que a biblioteca foi atualizada? -> Como a biblioteca L2, necessária para o recurso F, dependia da biblioteca L1.
E qual é o recurso X? -> Veja a tarefa 3456 no rastreador de problemas.
Não é minha escolha de SCM e também pode não ser a melhor para o seu laboratório; mas Git
faz isso direito e tenta forçá-lo a escrever bons logs mais do que a maioria dos outros sistemas SCMs, usando short logs
e
long logs
. Vincule o ID da tarefa (sim, você precisa de um) e deixe um resumo genérico para shortlog
e expanda no log longo: escreva a história do conjunto de alterações .
É um log: está aqui para acompanhar e registrar as atualizações.
Regra geral: se você estava procurando algo sobre essa alteração posteriormente, é provável que seu registro responda à sua pergunta?
Projetos, documentação e código estão vivos
Mantenha-os sincronizados, caso contrário eles não formarão mais essa entidade simbiótica. Faz maravilhas quando você tem:
- clear confirma registros no seu SCM, com links para IDs de tarefas no rastreador de problemas,
- onde os tickets desse rastreador estão vinculados aos conjuntos de alterações no seu SCM (e possivelmente às compilações no seu sistema de IC),
- e um sistema de documentação vinculado a todos eles.
O código e a documentação precisam ser coesos .
Rigidez nos testes
Regras de ouro:
- Qualquer novo código deve vir com (pelo menos) testes de unidade.
- Qualquer código legado refatorado deve vir com testes de unidade.
Obviamente, eles precisam:
- para testar algo valioso (ou é um desperdício de tempo e energia),
- para ser bem escrito e comentado (como qualquer outro código que você faz check-in).
Eles também são documentação e ajudam a delinear o contrato do seu código. Especialmente se você usar TDD . Mesmo se não, você precisa deles para sua paz de espírito. Eles são sua rede de segurança quando você incorpora um novo código (manutenção ou recurso) e sua torre de vigia para se proteger contra a podridão do código e falhas ambientais.
Obviamente, você deve ir além e fazer testes de integração e
testes de regressão para cada bug reproduzível corrigido.
Rigidez no uso das ferramentas
Não há problema em um desenvolvedor / cientista ocasional querer experimentar algum novo verificador estático na fonte, gerar um gráfico ou modelo usando outro ou implementar um novo módulo usando uma DSL. Mas é melhor se houver um conjunto canônico de ferramentas que todos os membros da equipe devem conhecer e usar.
Além disso, permita que os membros usem o que querem, desde que sejam TODOS:
- produtivo ,
- NÃO requer assistência regularmente
- NÃO se ajusta regularmente à sua infraestrutura geral ,
- NÃO interrompa sua infraestrutura (modificando áreas comuns como código, sistema de compilação, documentação ...),
- NÃO afetando o trabalho de outras pessoas ,
- CAPAZ de executar atempadamente qualquer tarefa solicitada .
Se não for esse o caso, imponha que eles retornem aos padrões.
Rigidez versus Versatilidade, Adaptabilidade, Prototipagem e Emergências
Flexibilidade pode ser boa. Permitir que alguém ocasionalmente use um hack, uma abordagem rápida e suja ou uma ferramenta favorita para realizar o trabalho
é bom. NUNCA deixe que isso se torne um hábito e NUNCA deixe que esse código se torne a base de código real a ser suportada.
Questões de espírito de equipe
Desenvolva um senso de orgulho em sua base de código
- Desenvolva um senso de orgulho no código
Evite Jogos de Culpa
- NÃO use jogos de Integração Contínua / Inspeção Contínua: promove uma competição bem-educada e produtiva .
- NÃO acompanhe os defeitos: é apenas uma boa manutenção da casa.
- FAZER identificar causas : é apenas a processos de futuro-impermeabilização.
- MAS NÃO atribua culpa : é contraproducente.
É sobre o código, não sobre os desenvolvedores
Torne os desenvolvedores conscientes da qualidade de seu código, MAS faça com que eles vejam o código como uma entidade independente e não como uma extensão de si mesmos, que não pode ser criticada.
É um paradoxo: você precisa incentivar a programação sem ego para um ambiente de trabalho saudável, mas confiar no ego para fins motivacionais.
De cientista a programador
Pessoas que não valorizam e se orgulham do código não produzem um bom código. Para que essa propriedade surja, eles precisam descobrir o quão valioso e divertido pode ser. Simples profissionalismo e desejo de fazer o bem não são suficientes: é preciso paixão. Então você precisa transformar seus cientistas em
programadores (no sentido amplo).
Alguém argumentou nos comentários que, após 10 a 20 anos em um projeto e seu código, qualquer um se sentiria apegado. Talvez eu esteja errado, mas presumo que eles tenham orgulho dos resultados do código e do trabalho e seu legado, não do código em si ou do ato de escrevê-lo.
Por experiência, a maioria dos pesquisadores considera a codificação uma necessidade ou, na melhor das hipóteses, uma distração divertida. Eles só querem que funcione. Os que já são bastante versados e têm interesse em programação são muito mais fáceis de persuadir a adotar as melhores práticas e a alternar tecnologias. Você precisa levá-los até a metade do caminho.
Manutenção de código faz parte do trabalho de pesquisa
Ninguém lê documentos de pesquisa ruins. É por isso que eles são revisados por pares, revisados, refinados, reescritos e aprovados repetidamente até que estejam prontos para publicação. O mesmo se aplica a uma tese e a uma base de código!
Deixe claro que a constante refatoração e atualização de uma base de código evita a podridão do código e reduz a dívida técnica, além de facilitar a reutilização e adaptação futura do trabalho para outros projetos.
Por que tudo isso??!
Por que nos preocupamos com tudo isso? Para a qualidade do código . Ou é
um código de qualidade ...?
Essas diretrizes visam direcionar sua equipe para esse objetivo. Alguns aspectos fazem isso simplesmente mostrando-lhes o caminho e deixando-os fazer (o que é muito melhor) e outros os pegam pela mão (mas é assim que você educa as pessoas e desenvolve hábitos).
Como você sabe quando a meta está ao seu alcance?
Qualidade é Mensurável
Nem sempre é quantitativa, mas é mensurável . Como mencionado, você precisa desenvolver um senso de orgulho em sua equipe, e mostrar progresso e bons resultados é essencial. Avalie a qualidade do código regularmente e mostre o progresso entre os intervalos e como isso é importante. Faça retrospectivas para refletir sobre o que foi feito e como isso tornou as coisas melhores ou piores.
Existem ótimas ferramentas para inspeção contínua . O sonar é popular no mundo Java, mas pode se adaptar a qualquer tecnologia; E há muitos outros. Mantenha seu código sob o microscópio e procure esses insetos e micróbios irritantes e irritantes.
Mas e se o meu código já for uma porcaria?
Todas as opções acima são divertidas e fofas como uma viagem a Never Land, mas não é tão fácil de fazer quando você já tem um monte de porcaria (cheia de vapor e fedorento) e uma equipe relutante em mudar.
Aqui está o segredo: você precisa começar em algum lugar .
Anedota pessoal: em um projeto, trabalhamos com uma base de código que pesava originalmente 650.000 Java LOC, 200.000 linhas de JSPs, 40.000 JavaScript LOC e mais de 400 MBs de dependências binárias.
Após cerca de 18 meses, são 500.000 Java LOC (MAIS LIMPO) , 150.000 linhas de JSPs e 38.000 JavaScript LOC, com dependências de até 100 MB (e elas não estão mais no nosso SCM!).
Como fizemos isso? Acabamos de fazer todas as opções acima. Ou tentou muito.
É um esforço de equipe, mas injetamos lentamente nossas regulamentações e ferramentas de processo para monitorar o ritmo cardíaco de nosso produto, enquanto cortamos apressadamente a "gordura": código de porcaria, dependências inúteis ... Não paramos todo o desenvolvimento para faça isso: temos períodos ocasionais de relativa paz e tranquilidade, onde somos livres para enlouquecer na base de código e separá-la, mas na maioria das vezes fazemos tudo por padrão, usando o modo "revisar e refatorar" a cada chance que temos : durante compilações, durante o almoço, durante corridas de correção de bugs, durante as tardes de sexta-feira ...
Houve alguns grandes "trabalhos" ... Mudar nosso sistema de compilação de uma compilação Ant gigante de 8500+ XML LOC para uma compilação Maven com vários módulos foi um deles. Tivemos então:
- módulos claros (ou pelo menos já era muito melhor e ainda temos grandes planos para o futuro),
- gerenciamento automático de dependências (para manutenção e atualizações fáceis e remoção de depósitos inúteis),
- construções mais rápidas, fáceis e reproduzíveis,
- relatórios diários de qualidade.
Outro foi a injeção de "utilidade ferramenta correias", mesmo que nós estávamos tentando reduzir dependências: Google Goiaba e Apache Commons emagrecer o seu código e e reduzir a superfície de bugs em seu código muito.
Também convencemos nosso departamento de TI de que talvez o uso de nossas novas ferramentas (JIRA, Fisheye, Crisol, Confluence, Jenkins) fosse melhor do que as existentes. Ainda precisávamos lidar com alguns que desprezamos (QC, Sharepoint e SupportWorks ...), mas foi uma experiência geral aprimorada, com um pouco mais de espaço.
E todos os dias, agora há uma quantidade entre uma e dezenas de confirmações que lidam apenas com a correção e refatoração de coisas. Ocasionalmente, quebramos as coisas (você precisa de testes de unidade e é melhor escrevê-las antes de refatorar as coisas), mas, em geral, o benefício para a nossa moral E para o produto tem sido enorme. Chegamos lá uma fração de uma porcentagem de qualidade de código por vez. E é divertido vê-lo aumentar !!!
Nota: Novamente, a rigidez precisa ser abalada para abrir espaço para coisas novas e melhores. Na minha anedota, nosso departamento de TI está parcialmente certo ao tentar impor algumas coisas sobre nós e errado para outras. Ou talvez eles estivessem certos . As coisas mudam. Prove que são as melhores maneiras de aumentar sua produtividade. Testes e protótipos estão aqui para isso.
O ciclo de refatoração de código de espaguete incremental super secreto para uma qualidade incrível
+-----------------+ +-----------------+
| A N A L Y Z E +----->| I D E N T I F Y |
+-----------------+ +---------+-------+
^ |
| v
+--------+--------+ +-----------------+
| C L E A N +<-----| F I X |
+-----------------+ +-----------------+
Depois de ter algumas ferramentas de qualidade no seu cinto de ferramentas:
Analise seu código com verificadores de qualidade de código.
Linters, analisadores estáticos ou o que você tem.
Identifique seus pontos críticos e frutas baixas .
As violações têm níveis de severidade, e classes grandes com um grande número de de alta severidade são uma grande bandeira vermelha: assim, elas aparecem como "pontos de acesso" nos tipos de visualizações do radiador / mapa de calor.
Corrija os pontos de acesso primeiro.
Maximiza seu impacto em um curto espaço de tempo, pois eles têm o maior valor comercial. Idealmente, as violações críticas devem ser tratadas assim que aparecerem, pois são possíveis vulnerabilidades de segurança ou causas de travamento e apresentam um alto risco de induzir uma responsabilidade (e, no seu caso, mau desempenho para o laboratório).
Limpe as violações de baixo nível com varreduras automatizadas de base de código .
Ele melhora a relação sinal / ruído para que você possa ver violações significativas no seu radar à medida que elas aparecem. Geralmente, há um grande exército de pequenas violações no início, se elas nunca foram resolvidas e sua base de código foi deixada solta na natureza. Eles não apresentam um "risco" real, mas prejudicam a legibilidade e a manutenção do código. Corrija-os conforme você os encontra durante o trabalho em uma tarefa ou em grandes tarefas de limpeza com varreduras de código automatizadas, se possível. Tenha cuidado com grandes varreduras automáticas, se você não tiver um bom conjunto de testes e sistema de integração. Certifique-se de concordar com os colegas de trabalho o momento certo para executá-los para minimizar o aborrecimento.
Repita até ficar satisfeito.
O que, idealmente, você nunca deveria ser, se este ainda for um produto ativo: continuará evoluindo.
Dicas rápidas para uma boa manutenção da casa
Quando no modo de hotfix , com base em uma solicitação de suporte ao cliente:
- Geralmente, é uma prática recomendada NÃO resolver problemas, pois você pode apresentar novos sem querer.
- Vá ao estilo SEAL: entre, mate o bug, saia e envie seu patch. É uma greve cirúrgica e tática.
Mas para todos os outros casos , se você abrir um arquivo, tenha o dever de:
- definitivamente: revise -o (faça anotações, envie relatórios de problemas),
- talvez: limpe -o (limpeza de estilo e pequenas violações),
- idealmente: refatorá- lo (reorganize grandes seções e seus vizinhos).
Apenas não se desvie para passar uma semana de um arquivo para outro e acabar com um maciço conjunto de milhares de correções, abrangendo vários recursos e módulos - isso dificulta o rastreamento futuro. Um problema no código = um ticket no seu rastreador. Às vezes, um conjunto de alterações pode afetar vários tickets; mas se isso acontecer com muita frequência, provavelmente você está fazendo algo errado.
Adendo: Gerenciando ambientes de programação visual
Os jardins murados dos sistemas de programação sob medida
Vários sistemas de programação, como o G2 do OP, são bestas diferentes ...
Sem código "fonte"
Frequentemente, eles não dão acesso a uma representação textual do seu "código" fonte: ele pode ser armazenado em um formato binário proprietário ou talvez ele armazene coisas no formato de texto, mas as oculte de você. Os sistemas de programação gráfica sob medida não são incomuns nos laboratórios de pesquisa, pois simplificam a automação de fluxos de trabalho repetitivos de processamento de dados.
Sem ferramentas
Além de seus próprios, é isso. Você geralmente é limitado pelo ambiente de programação, pelo próprio depurador, pelo intérprete, pelas ferramentas e formatos de documentação. São
jardins murados , exceto se, eventualmente, capturarem o interesse de alguém motivado o suficiente para fazer engenharia reversa de seus formatos e criar ferramentas externas - se a licença permitir.
Falta de documentação
Muitas vezes, esses são sistemas de programação de nicho, usados em ambientes bastante fechados. As pessoas que os usam frequentemente assinam NDAs e nunca falam sobre o que fazem. As comunidades de programação para eles são raras. Portanto, os recursos são escassos. Você está preso à sua referência oficial, e é isso.
A parte irônica (e muitas vezes frustrante) é que todas as coisas que esses sistemas fazem poderiam obviamente ser alcançadas usando linguagens de programação de uso geral e geral, e provavelmente muito mais eficientemente. Mas isso requer um conhecimento mais profundo da programação, enquanto você não pode esperar que seu biólogo, químico ou físico (para citar alguns) saiba o suficiente sobre programação e muito menos tenha tempo (e desejo) para implementar (e manter) sistemas complexos, que podem ou não durar muito. Pela mesma razão que usamos DSLs, temos esses sistemas de programação sob medida.
Anedota pessoal 2:Na verdade, eu trabalhei em um desses eu mesmo. Eu não fiz o link com a solicitação do OP, mas o meu projeto era um conjunto de grandes partes interconectadas de software de processamento e armazenamento de dados (principalmente para pesquisa em bioinformática, saúde e cosméticos, mas também para negócios inteligência ou qualquer domínio que implique no rastreamento de grandes volumes de dados de pesquisa de qualquer tipo e na preparação de fluxos de trabalho de processamento de dados e ETLs). Um desses aplicativos era, simplesmente, um IDE visual que usava os procedimentos usuais: interfaces de arrastar e soltar, espaços de trabalho de projeto com versão (usando arquivos de texto e XML para armazenamento de metadados), muitos drivers conectáveis a fontes de dados heterogêneas e um visual canvas para projetar pipelines para processar dados de N datasources e, no final, gerar M transformadas, e possíveis visualizações brilhantes e relatórios on-line complexos (e interativos). Seu típico sistema de programação visual sob medida, sofrendo de um pouco da síndrome do NIH, sob o pretexto de projetar um sistema adaptado às necessidades dos usuários.
E, como você esperaria, é um sistema agradável, bastante flexível para suas necessidades, embora às vezes um pouco exagerado, para que você se pergunte "por que não usar ferramentas de linha de comando?" E, infelizmente, sempre liderando empresas de médio porte equipes trabalhando em grandes projetos para muitas pessoas diferentes, usando-o com diferentes "melhores" práticas.
Ótimo, estamos condenados! - O que fazemos sobre isso?
Bem, no final, todas as opções acima ainda são válidas. Se você não pode extrair a maior parte da programação deste sistema para usar mais ferramentas e linguagens convencionais, "apenas" precisa adaptá-lo às restrições do seu sistema.
Sobre controle de versão e armazenamento
No final, você quase sempre pode fazer a versão das coisas, mesmo com o ambiente mais restrito e murado. Na maioria das vezes, esses sistemas ainda vêm com suas próprias versões (o que, infelizmente, é bastante básico, e oferece apenas reverter para versões anteriores sem muita visibilidade, mantendo apenas os instantâneos anteriores). Não está exatamente usando conjuntos de alterações diferenciais como o seu SCM de escolha, e provavelmente não é adequado para vários usuários que enviam alterações simultaneamente.
Mas, ainda assim, se eles fornecem essa funcionalidade, talvez a sua solução seja seguir nossas amadas diretrizes padrão da indústria acima e transpor essas para este sistema de programação !!
Se o sistema de armazenamento for um banco de dados, provavelmente expõe as funcionalidades de exportação ou pode ser feito backup no nível do sistema de arquivos. Se estiver usando um formato binário personalizado, talvez você possa simplesmente tentar fazer a versão com um VCS que tenha um bom suporte para dados binários. Você não terá controle refinado, mas pelo menos terá as costas protegidas contra catástrofes e terá um certo grau de conformidade com a recuperação de desastres.
Sobre o teste
Implemente seus testes na própria plataforma e use ferramentas externas e tarefas em segundo plano para configurar backups regulares. Muito provavelmente, você inicia esses testes da mesma maneira que iniciaria os programas desenvolvidos com esse sistema de programação.
Claro, é um trabalho de hacker e definitivamente não está de acordo com o que é comum na programação "normal", mas a idéia é se adaptar ao sistema enquanto tenta manter uma aparência de processo profissional de desenvolvimento de software.
A estrada é longa e íngreme ...
Como sempre em ambientes de nicho e sistemas de programação sob medida, e conforme exposto acima, você lida com formatos estranhos, apenas um conjunto limitado (ou totalmente inexistente) de ferramentas possivelmente desajeitadas e um vazio no lugar de uma comunidade.
A recomendação: tente implementar as diretrizes acima fora do seu sistema de programação sob medida, o máximo possível. Isso garante que você possa confiar em ferramentas "comuns", que possuem suporte adequado e motivação da comunidade.
A solução alternativa: quando essa não for uma opção, tente adaptar essa estrutura global à sua "caixa". A idéia é sobrepor esse modelo de boas práticas padrão do setor sobre o seu sistema de programação e fazer o melhor possível. O conselho ainda se aplica: defina a estrutura e as melhores práticas, incentive a conformidade.
Infelizmente, isso implica que você pode precisar mergulhar e fazer uma tremenda quantidade de trabalho nas pernas. Assim...
Últimas palavras famosas e pedidos humildes:
- Documente tudo o que você faz.
- Compartilhe sua experiência.
- Open Source qualquer ferramenta que você escreve.
Ao fazer tudo isso, você irá:
- não apenas aumenta suas chances de obter apoio de pessoas em situações semelhantes,
- mas também forneça ajuda a outras pessoas e promova discussões em torno de sua pilha de tecnologia.
Quem sabe, você poderia estar no início de uma nova comunidade vibrante de Obscure Idioma X . Se não houver, inicie um!
- Faça perguntas no Stack Overflow ,
- Talvez até escreva uma proposta para um novo site StackExchange na
área 51 .
Talvez seja bonito por dentro , mas ninguém tem idéia até agora, então ajude a derrubar essa parede feia e deixe os outros dar uma espiada!