Guia de Desenvolvimento de Software para Gestores

Diante de uma transformação digital vivida por muitas empresas e países, o Desenvolvimento de Software tem virado pauta na vida de muitos gestores. Por esse motivo, é importante entender mais sobre este assunto, que é muito falado e tem grande impacto no mundo atualmente.

Segundo uma pesquisa apresentada pela empresa de consultoria, McKinsey, 17% dos projetos de TI estão indo mal a ponto de colocarem em risco a existência das próprias empresas.

E a razão disso vem, muitas vezes, da falta de informação, tanto dos gestores como também, em alguns casos, dos próprios desenvolvedores, que não entendem alguns fatores importantes na construção de um software com qualidade.

Diante disso, neste artigo você poderá conferir:

O que é Desenvolvimento de Software?

Tipos de Linguagens de Programação

O que é Open Source?

O que é e quais as diferenças entre Front-end e Back-end?

Como é o Design no Desenvolvimento de Software

Quais são as Metodologias de Desenvolvimento?

DevOps

O que é Desenvolvimento de Software?

Antes de iniciar a explicação relacionada ao Desenvolvimento de Softwares em si, primeiro, é importante definir o que são softwares. O software é um produto virtual, que consiste em um agrupamento de códigos escritos em linguagens de programação. Alguns exemplos de software são o Microsoft Word e o próprio buscador do Google.

Contudo, quando o usuário utiliza o software, ele não vê os códigos, apenas os resultados que eles geram. Esses resultados são lidos pelas máquinas e materializados nas telas dos equipamentos ou resultando ações em alguns aparelhos.

Então, o Desenvolvimento de Softwares é a atividade de criar, testar e manter softwares. Diante disso, é importante entender a complexidade dessa atividade, principalmente se for considerado que, para desenvolver uma solução, é necessário não apenas conhecimento técnico de programação, mas também saber conduzir uma solução do ponto de vista de negócios, usabilidade, experiência, funções, entre outras questões.

Essa condução deve ser feita através de um planejamento e alinhamento bem definidos e, dessa forma, a solução consiga atender as necessidades apresentadas pelos clientes.

Tipos de Linguagens de Programação

Como dito acima, os softwares são desenvolvidos utilizando linguagens de programação. Portanto, existem diferentes tipos de linguagens e cada uma será mais adequada em determinados casos. Segundo especialistas da área, as linguagens podem ser classificadas de três formas diferentes:

Linguagem de Máquina

As linguagens de programação classificadas como Linguagem de Máquina são aquelas feitas para a compreensão dos computadores. Dentro da programação, este tipo de linguagem é considerado como de baixo nível, pois elas não são de fácil entendimento para as pessoas. Por esse motivo, as pessoas usam linguagens de alto nível.

Os programas escritos em linguagens de alto nível também são compilados e/ou interpretados na linguagem de máquina para que os computadores possam executá-las.

Linguagem de Montagem

As Linguagens de Montagem são consideradas como uma representação da linguagem de máquina, isso significa que cada instrução da linguagem de montagem se traduz em uma instrução da linguagem de máquina.

Contudo, por mais que esse tipo de linguagem seja legível, ela ainda é considerada de baixo nível. Uma desvantagem da Linguagem de Montagem é que ela não é portátil em virtude de que cada plataforma tem sua Linguagem de Montagem específica.

Linguagem de Alto Nível

Esse é o tipo de linguagem mais popular entre os programadores. Linguagens como C, C++ e JavaScript são todas de alto nível. As vantagens desse tipo de linguagem é que elas são legíveis e portáteis.

Contudo, elas são menos poderosas em comparação com as linguagens de montagem, porque uma única declaração em um idioma de alto nível é traduzida em várias declarações de linguagem de máquina. As linguagens de Alto Nível podem ainda ser classificadas como:

Linguagens Funcionais: Programação funcional é um paradigma de programação baseado em funções matemáticas que prezam por imutabilidade de dados e de estados. Alguns exemplos desse tipo de linguagem, são: Scala, F#, Clojure e Lisp. Linguagens Procedurais: Nas Linguagens Procedurais, um programa é escrito em uma sequência de etapas que devem ser seguidas para produzir um resultado. Alguns exemplos desse tipo de linguagem, são: Cobol, Fortran e C. Linguagens Orientada a Objetos: Nas linguagens OOP, um programa é dividido em objetos que contêm dados, bem como métodos que operam nos dados. Alguns exemplos desse tipo de linguagem são: Java, C# e C++. Linguagens de Programação Lógica: Essas linguagens são usadas para criar programas que permitem ao computador raciocinar logicamente. Tem como exemplo a Prolog.

O que é Open Source?

O termo Open Source ou Código Aberto surgiu pela primeira vez em uma reunião em 1998 na Califórnia, quando um grupo de pessoas do movimento do “software livre” fez a sugestão. Originalmente essa sugestão foi feita por Christine Peterson.

A Open Source Iniciative (OSI) foi formada no mesmo ano da reunião, como uma organização educacional, de advocacia e de administração, momento esse que se tornou o mais importante na história do desenvolvimento colaborativo.

Michael Tiemann e Eric Raymond (que mais tarde se tornaram presidentes da OSI) e Todd Anderson, são alguns outros exemplos de pessoas referências na área que estiveram nesta reunião.

O objetivo da criação desse termo foi para que o mercado de indústria de software tivesse uma alternativa, com um modelo colaborativo, onde o código fonte possa ser livremente acessado, usado, modificado e compartilhado por qualquer pessoa. Além disso, existem algumas linguagens que são consideradas Open Source, algumas delas são: Java, PHP, Python e Perl.

Para que as linguagens sejam consideradas Open Source, é necessário que elas tenham algumas características, que são:

Livre distribuição

Código fonte

Trabalhos Derivados

Integridade do autor do código

Não discriminação contra pessoas ou grupos

Não discriminação contra áreas de atuação

Distribuição da Licença

Licença não específica a um produto

Licença não restrinja outros programas

Licença neutra em relação à tecnologia

O que é e quais as diferenças entre Front-end e Back-end?

Os termos Front-end e Back-end estão relacionados com a separação de preocupações entre a camada de apresentação (Front-end) e a camada de acesso a dados (Back-end) de um software.

Para ficar mais claro, o Front-end está relacionado com o lado do usuário, ou seja, se trata de tudo que o usuário pode ver e interagir com a “frente” do software. Então, todos os elementos que são criados na interface do usuário com a qual ele pode interagir, é feito no Front-end.

Algumas linguagens utilizadas em aplicações Front-end são: HTML, CSS e JavaScript, além de bibliotecas e frameworks, como Angular, React, Vue.js, etc. Portanto, o Front-end está relacionado com o lado do cliente (client-side) em um software.

Já o Back-end está relacionada com a camada de acesso a dados, onde eles são tratados e onde são feitas as requisições para o banco de dados para que ele possa inserir, ler e arquivar esses dados, sendo a camada que o usuário não pode ver durante o uso do software.

É comum que os usuários façam interações em listas que são feitas no Front-end, por exemplo, isso faz com que esse pedido de informação seja feita ao Back-end, que irá processar e tratar esses dados e dar retorno ao Front-end.

Os desenvolvedores Back-end têm foco em questões relacionada à segurança, estrutura e gerenciamento de conteúdo. Portanto, apesar do usuário não fazer nenhuma interação direta com o Back-end, ele pode ser constantemente beneficiado pelos benefícios que ele oferece, principalmente em soluções mais complexas.

Como é o Design no Desenvolvimento de Software

Diferentemente do foco apenas no visual que tem o Design Gráfico, o Design Web está relacionado a toda parte de design dos softwares, também pensando na experiência do usuário. Contudo, não parece tão simples, já que se trata de uma área multidisciplinar, pois envolve acessibilidade, usabilidade, arquitetura da informação, programação e, claro, a satisfação do usuário.

Diante disso, existem algumas formas primárias diferentes de Design, são elas: UX, UI, IxD, IA. Abaixo trouxe um pouco mais sobre cada um delas para ficar claro como é o funcionamento no Desenvolvimento de Software.

UX – User Experience

Esse é um processo focado na experiência do usuário, ou seja, aqui os times criam produtos que sejam de boa utilização e relevantes para os usuários. Dessa forma, o profissional que trabalha nessa área fica responsável pela lógica da experiência do produto, utilizando wireframes e protótipos.

Sketch, Axure e Mockplus são alguns exemplos de ferramentas que são utilizadas no UX Design. Portanto, é importante que nessa forma de design o comportamento humano e o serviço oferecido sejam estudados para buscar melhorias na satisfação e na lealdade dos consumidores.

UI – User Interface

É o processo de fazer interfaces nos softwares ou dispositivos digitais com foco no estilo ou aparência, ou seja, o profissional dessa área deve buscar selecionar os elementos corretos da interface, como por exemplo textos, botões, campos de textos, entre outros fatores.

Alguns exemplos de ferramentas que são utilizadas no UI Design são: Photoshop, Sketch e Illustrator. Então, o objetivo aqui é fazer que as interações com os usuários sejam o mais simples e eficiente possível.

IxD – Interaction Design

Como uma definição mais simples, ela pode ser considerada como a interação entre os usuários e os produtos. O objetivo é criar produtos que podem fazer com que seus usuários alcancem seus objetivos da forma mais simples e eficiente possível.

Essa forma de design é considerada um componente importante dentro do design de experiência do usuário (UX). Nesse sentido, os profissionais da área se esforçam para construir relacionamentos relevantes entre as pessoas e as soluções digitais que elas usam.

IA – Information Architecture

A Arquitetura da Informação é o design estrutural de ambientes e como o conteúdo da solução é organizado. Além disso, é onde se inicia o entendimento de quais informações precisam ser comunicadas.

O IA permite que volume de informações seja organizado de maneira lógica a fim de que uma equipe possa dar andamento na solução. Portanto, o objetivo aqui é auxiliar as pessoas a encontrarem informações e completar tarefas.

Quais são as Metodologias de Desenvolvimento?

A empresa de tecnologia Synopsys classificou as principais metodologias de desenvolvimento de software em quatro categorias: Waterfall, Rapid Application Development, Agile e DevOps. Abaixo está uma visão geral das metodologias, apresentando os pontos fortes e fracos de cada uma.

Waterfall

A metodologia Waterfall ou Cascata, em português, é considerado por muitos a mais tradicional. Essa é uma metodologia linear rígida, onde existem 5 fases sequenciais com focos em objetivos diferentes, são elas:

Requisitos Projetos Implementação Verificação Manutenção

As etapas apenas são passadas para a próxima fase quando cada uma delas estão 100% concluídas, o que explica o nome da metodologia, já que a água da cascata não sobe, apenas desce, ou seja, as fases seguem para apenas um sentido. Então, é comum que, geralmente, não haja um processo para voltar a modificar o projeto ou a direção.

A vantagem da Waterfall é que ele é muito meticuloso. Além disso, é uma boa opção para desenvolvimento de grandes projetos que precisam ter uma visão unificadora, além de projetos que têm objetivos claros e requisitos estáveis. São benéficos também para profissionais menos experientes e equipes que mudam a composição frequentemente.

Contudo, existem algumas desvantagens, e as principais estão relacionadas com as necessárias mudanças constantes no processo de desenvolvimento, mudanças essas que não vêm apenas do cliente, mas também do mercado, tecnologia ou interesses da organização. Além disso, essa metodologia é considerada lenta em razão da estrutura e controle rígido.

Rapid Application

Essa metodologia chamada Rapid Application Development (RAD), é baseada principalmente em protótipos, isso significa que o foco é produzir uma versão funcional da solução o mais rápido possível, e logo após, repetir continuamente depois disso.

As equipes da RAD são geralmente pequenas e envolvem apenas desenvolvedores experientes e qualificados em muitas disciplinas, o que faz da RAD um processo que foca na produção de sistemas com alta qualidade e baixo custo.

Nesse caso, diferentemente da Waterfall, um projeto pode facilmente se desviar do seu plano original, sendo que à medida que cada repetição é concluída o produto fica cada vez mais refinado.

Uma equipe rápida e altamente flexível e um relacionamento próximo com o cliente são algumas vantagens da RAD. Além disso, essa metodologia nunca está muito ligada a um protótipo e está sempre disposta a melhorar para atender as necessidades do cliente. A RAD é especialmente útil para projetos pequenos e médios que são sensíveis ao tempo.

Porém, existem alguns desafios, principalmente relacionados com as equipes, tendo em vista que exige desenvolvedores altamente qualificados e com profundo conhecimento sobre a área. Há menos aderência aos prazos e mais foco na adição de recursos, que podem estender as datas de entrega, dessa forma, é improvável que organizações que não atendem esses requisitos se beneficiem da RAD.

Agile

A metodologia Agile ou Ágil, em português, é parecida com a RAD, mas tem algumas adaptações para atender projetos maiores. É comum que essa metodologia seja usada pelas equipes para minimização de riscos em virtude da adição de novos pequenos incrementos na solução de forma interativa.

Os recursos são geridos de forma metódica na equipe. Contudo, é possível que o cliente esteja envolvido no progresso da solução, acompanhando o desenvolvimento e sendo capaz de decidir antes que o próximo recurso seja desenvolvido.

Essa metodologia usa sprints ou um período de tempo em que um determinado recurso deve ser construído, testado e apresentado. Além disso, essa metodologia tem uma declaração de princípios que fundamentam o desenvolvimento ágil de software, chamada Manifesto Ágil. Na imagem abaixo é possível entender um pouco mais sobre esse manifesto.

A principal vantagem desse tipo de metodologia é que a solução pode ser lançada em meio às iterações, ou seja, um MVP que vai melhorando com o tempo, corrigindo defeitos, melhorando processos e alinhando expectativas. Com isso, é possível que o lançamento do software seja feito mais cedo.

Contudo, há também desafios que podem dificultar a implantação bem feita, alguns deles são a comunicação em tempo real e a necessidade de muito trabalho em razão de que os desenvolvedores deverão finalizar cada recurso em cada iteração para que seja aprovada pelos clientes.

DevOps

DevOps origina-se da união das palavras “desenvolvimento” (development) e “operações” (operations), com o objetivo de unir o desenvolvimento de software (Dev) à operação de software (Ops).

Essa metodologia é um conjunto de filosofias e práticas que otimiza a distribuição de aplicativos e serviços. Portanto, o DevOps está relacionado com práticas para integração das equipes de desenvolvimento, e o objetivo aqui é reduzir o ciclo de desenvolvimento dos sistemas para entregar com mais velocidade sem perder a qualidade.

Existem diversos benefícios na utilização dessa metodologia, alguns deles são:

Reduzir taxa de falha de novos lançamentos

Diminuir o tempo de espera entre as correções

Minimizar as interrupções e maximizar a confiabilidade

Contudo, Rob C. Guckenberger, diretor executivo para o desenvolvimento de aplicativos do Commonwealth Office of Technology, de Kentucky, diz que o modelo DevOps pode permitir comportamentos desonestos em razão da autoridade e autonomia que são afastadas dos gestores de desenvolvimento e operações.

Um exemplo pode vir de pessoas que podem corrigir falhas imediatas e ignorar problemas que não se manifestam claramente, ignorando os impactos do que poderia ser uma falha ainda maior da que foi corrigida. “Com autoridade vem alguma habilidade para fazer coisas que você não deve fazer”, afirma Guckenberger.

Conclusão

A tecnologia está cada vez mais presente no dia a dia dos executivos e gestores. Se aprofundar neste tipo de conhecimento é importante não só para quem tem interesse em aprender sobre a área, mas também como auxílio para a gestão e troca de ideias com a equipe técnica.

Por esse motivo, ao longo do artigo foi apresentado os principais conceitos de desenvolvimento de software, que podem e devem ser aplicados ao universo de gestão. A aplicação dos conceitos nas soluções digitais vão depender do cenário e troca de ideias com a equipe de desenvolvimento.

Por fim, o entendimento desses pontos serão de extrema importância para gestores envolvidos na construção de um software, principalmente diante dos problemas que vão ocorrer no tempo de desenvolvimento, especialmente na decisão de negócios, que é extremamente complexa e desafiante.

Links para Leitura

Leave a comment