Pular para conteúdo

Categorização de Software

Softwares

Para os interesses desse estudo, software será definido como um conjunto de programas de computador, os dados que processa, a documentação que o descreve e o contexto sistêmico no qual é utilizado.1

Contexto sistêmico refere-se tão somente à maneira como o software é utilizado. Em razão do contexto de utilização, um mesmo software pode ser utilizado de maneiras distintas.

Exemplo

Apenas como ilustração de contexto sistêmico, numa mesma organização, um mesmo servidor contendo o mesmo software de gestão de banco de dados pode ser:

  • Operado diretamente por analistas de dados para extração de relatórios operacionais e registros para exportação.
  • Como infraestrutura para softwares transacionais utilizados na organização
  • Como repositório de registros transacionais para softwares analíticos
  • Manuseado diretamente por administradores de dados (DBA) para resolução de problemas de performance em outros softwares

Em cada uma dos contextos de utilização (negócios, analítico, transacional, infraestrutura) ilustrados neste exemplo breve, diferentes requisitos de disponibilidade, desempenho, robustez, ux, permissões, autorizações serão demandados. Alguns cenários igualmente variados podem ser aplicados para softwares servidores de emails, controle de versão, gerenciamento de arquivos, dentre outros.

Por simplicidade, o contexto sistêmico - ou contexto de utilização - abordado nas classificações a seguir, será o contexto do desenvolvimento de software. Tanto o desenvolvimento de novos softwares, quanto a evolução de software existente.

Software em desenvolvimento

Independente da finalidade que este software terá junto ao utilizador final, como desenvolvedor, este é o software no qual o desenvolvedor atua. Da perspectiva das tarefas e fases de construção manutenção do software em desenvolvimento, é comum que este seja percebido de maneira fragmentada: um conjunto de erros para corrigir, funcionalidades para testar, documentação para redigir, arquitetura de funcionamento, telas de interação com usuário, testes, entendimento e programação de funcionalidades, questões de desempenho e performance e assim por diante.Mais informações sobre configurações e tarefas relacionados ao software em desenvolvimento podem ser lidas aqui.

Em meio às muitas atribuições e fases para superar, é mesmo comum que tanto o desenvolvedor quanto outros profissionais que atuam nas tarefas de desenvolvimento e evolução percam de vista:

  • Que o software deve ter valor de uso para seu utilizador final ou para o seu patrocinador.
  • Que o valor de uso do software está diretamente relacionado à sua capacidade de realizar as operações esperadas (para as quais foi feito) com um mínimo de falhas e uma baixa curva de aprendizado, por parte do utilizador.
  • Que as operações de um software são resultado da interação conjunta dos seus componentes e recursos. Isso é especialmente relevante em softwares com muitas interações com usuários humanos.
  • Que minimizar redundâncias, lacunas, falhas operacionais e dificuldades de uso dos seus componentes facilita a operação conjunta dos componentes.
  • Que o único software que não recebe manutenção e evolução é o software sem utilização. Documentação e boas práticas de código são fundamentais para o dia seguinte à entrega em produção!

Regra geral, cada software em desenvolvimento utilizar-se-à de muitos outros softwares, seja para a construção do código, design conceitual, documentação de rotinas, armazenamento e manuseio dos registros que produz, inter-comunicação, notificações, aumento de disponibilidade e assim por diante. Caracterizaremos brevemente alguns dos softwares mais comuns e o papel que desempenham:

Softwares sistêmicos

Oferecem serviços infraestruturais em nível de hardware, comunicação entre dispositivos, roteamento, segurança e proteção, virtualização. Embora influenciem diretamente escolhas arquiteturais durante a fase de concepção de novos softwares, na maioria dos casos, não são diretamente manuseados nas rotinas de nosso software.

Alguns exemplos:

  • Containers Servers - "Ecossistema" de Hosts para execução distribuída
  • Sistemas Operacionais
  • Comunicação em rede
  • Firewalls e Antivírus
  • runtimes de aplicação, tais como java, .net, c/c++, rust, javascript v8, flash, chrome, firefox.

Softwares de recursos básicos

Também tem uma importância fundamental porque abstraem operações complexas das quais o "software em desenvolvimento" necessita, permitindo assim uma economia de esforços. Estes softwares oferecem, de maneira simplificada, recursos de leitura e gravação de registros e arquivos, comunicação, execução remota de tarefas e assim por diante. Em nossas rotinas, são utilizados através de drivers e conectores pré-prontos. O conjunto de drivers, conectores, exemplos de uso geralmente é denominado de SDK do software.

  • Servidores de e-mails
  • Gerenciamento de Banco de dados
  • Gerenciamento de Cache
  • Gerenciamento de Filas, Mensageria
  • Gerenciamento de Arquivos
  • Indexagem e buscas
  • HTTP, GRPC, REST Servers
  • Impressoras de Cartão Zebra ⧉

Softwares de Serviços

Também oferecem funcionalidades relevantes para o "software em desenvolvimento". Da mesma forma que os softwares de recursos básicos, também abstraem detalhes de operações complexas. Diferente dos softwares de recursos básicos, oferecem capacidades de consulta, gravação e recuperação de informações com mais alto valor agregado. Tome-se como exemplo um serviço de consulta de CEP, situação de CPF ou validação de pagamentos. Para o software em desenvolvimento, o valor de uso destes serviços é de ordem semântica: obter uma resposta computável sobre um determinado CEP, um determinado CPF ou aceitação de um pagamento. Estes softwares oferecem um cardápio menor de funcionalidades, podem não ter uma API madura, documentação adequada para desenvolvimento e troubleshooting, nem um catálogo de exemplos de utilização.

Iniciativas como Swagger e OpenApi são úteis para mitigar as dificuldades do desenvolvedor ao utilizar serviços do tipo REST ou SOAP.

Alguns exemplos ilustrativos:

Softwares para o desenvolvimento

São a mala de ferramentas do desenvolvedor! Sem trocadilhos, para fazer um software se precisa de outros softwares. Obviamente os softwares utilizados para o desenvolvimento de software variam enormemente em razão de fatores facilmente reconhecíveis. Alguns dos fatores mais significativos que influenciam na composição das ferramentas para desenvolvimento:

  • Natureza do trabalho a ser realizado: Manutenção, apoio técnico, escrita de código fonte, teste de software, acompanhamento de trabalho.
  • Exigências específicas da plataforma de desenvolvimento: Como se faz software para a plataforma X? SDK, IDE, interpretadores, runtimes, bibliotecas adicionais além do IDE.
  • Exigências específicas do software em desenvolvimento: bibliotecas adicionais, scripts adicionais de automação de tarefas, documentos de configuração de ferramentas.
  • Recomendações/exigências/restrições do ambiente de trabalho.
  • Disponibilidade de ferramentas para o trabalho.
  • Preferências do desenvolvedor

Um pequeno guia para configuração de ambiente de trabalho para a plataforma Microsoft .net é apresentado na seção Softwares para desenvolvimento em .NET Independentemente dos fatores apresentados acima, e talvez mesmo das especifidades de cada tipo de trabalho em software, recomenda-se a adoção de softwares:

Registro de anotações

Um registro para anotações, seja de texto simples, imagens, ambos. Guardar notas, copiar e colar blocos de código em "algum lugar", descrever pontos de atenção é das tarefas mais corriqueiras durante o trabalho. Recomenda-se

  • Notepad++ ⧉. É gratuito e opensource. Por design, cada arquivo é mantido até que o usuário os grave permanentemente ou os descarte. Caso o arquivo seja de código fonte, reconhece uma ampla lista de linguagens de programação. Realiza formatação e indentação, operações de classificação de linhas, encoding, localização em diretórios, exibição de caracteres ocultos, hexadecimal, teste de expressões regulares.

  • Ligthshot ⧉. Captura simplificada de imagem de telas. Útil para registro visual de anotações.

  • ShareX ⧉. Gratuito e opensource. Captura e edição avançada de recortes de tela, vídeos com e sem áudio. Útil para registro de problemas e montagem de apresentações.

  • Notion ⧉. Permite a organização de anotações em cadernos, lista de coisas a fazer e assim por diante.

Registro de atividades

Registro do tempo gasto em tarefas de projeto. Nesse quesito, o cenário mais comum é que seja utilizada o software disponibilizado pela instituição na qual você trabalha. No entanto, este registro é importante em trabalhos pessoais também. Para efeitos de mensuração de esforços e compreensão do quanto se trabalhou em determinadas etapas do Software em desenvolvimento. Sugere-se:

  • Planilha Excel. Simples, facilmente estruturável. Uma infinidade de modelos de registro de atividades estão disponíveis na internet.
  • Toggl ⧉. Gratuito para uso pessoal. Possui uma interface de fácil manuseio para lançamento de horas, identificação de cliente, identificação de projetos, agrupamento de atividades e assim por diante.

Comparação e versionamento dos arquivos

Seja num trabalho pessoal seja no trabalho profissional, a adoção de versionamento para os arquivos previne a perda acidental ou incidental de serviço realizado. Junto com as habilidades em desenvolvimento, aprendizado de conceitos básicos de versionamento é parte essencial do dia-a-dia de trabalho. É cada vez mais comum que IDE tragam recursos de versionamento já integrados. Opções standalone para versionamento de arquivos sugeridas:

  • git ⧉. Roda em modo de linha de comando e exige uma compreensão mais detalhada dos comandos. Nativo em instalações linux. Facilmente instalável no Windows. Voltado fundamentalmente à gestão de versões de arquivos do tipo texto.
  • TortoiseGit ⧉. Ferramenta visual para manuseio do git. Disponível para Windows apenas. Simplifica enormemente as tarefas de versionamento. Gratuito e opensource.
  • WinMerge ⧉ Notas e capturas de telas básicas
  • Google Drive e Microsoft OneDrive. Arquivos guardados nestes diretórios online são versionados e o histórico de modificações é facilmente acessível. Recomenda-se principalmente para planilhas, documentos Word, libreOffice, imagens.

Comunicação

É corriqueiro mas importante! Mesmo quando se utiliza um mesmo e-mail ou software de comunicação (Teams, Meet, WhatsApp), manter as conversas e e-mails adequadamente separados por projeto salvará seu dia. Aqui não se recomenda um software específico. Recomenda-se atenção e organização apenas.