Skip to main content
Global

10.3: Desenvolvimento de software

  • Page ID
    170995
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Desenvolvimento de software

    Muitas das metodologias discutidas acima são usadas para gerenciar o desenvolvimento de software, pois a programação é complexa e, às vezes, erros são difíceis de detectar. Aprendemos no capítulo 2 que o software é criado por meio de programação, e a programação é o processo de criar um conjunto de instruções lógicas para um dispositivo digital seguir usando uma linguagem de programação. Às vezes, o processo de programação é chamado de “codificação” porque a sintaxe de uma linguagem de programação não está em uma forma que todos possam entender — ela está em “código”.

    O processo de desenvolvimento de um bom software geralmente não é tão simples quanto sentar e escrever algum código. É verdade que às vezes um programador pode escrever rapidamente um pequeno programa para resolver uma necessidade. Mas, na maioria das vezes, a criação de software é um processo intensivo em recursos que envolve vários grupos diferentes de pessoas em uma organização. Nas seções a seguir, analisaremos várias metodologias diferentes para desenvolvimento de software.

    Barra lateral: O triângulo de qualidade do gerenciamento de projetos

    Ao desenvolver software ou qualquer produto ou serviço, há tensão entre os desenvolvedores e os diferentes grupos de partes interessadas, como gerentes, usuários e investidores. A Fig. 10.5 ilustra a tensão dos três requisitos: tempo, custo e qualidade que os gerentes de projeto precisam fazer compensações. Desde a rapidez com que o software pode ser desenvolvido (tempo), até quanto dinheiro será gasto (custo) e até que ponto ele será construído (qualidade). O triângulo de qualidade é um conceito simples. Ele afirma que você só pode abordar duas das seguintes questões: tempo, custo e qualidade para qualquer produto ou serviço que está sendo desenvolvido.

    Triângulo com as palavras escopo, tempo e custo em cada canto e qualidade no centro
    Fig. 10.6 Triângulo de Qualidade de Gerenciamento de Projetos. Imagem de Mapto é licenciada em domínio público

    Então, o que significa que você só pode abordar dois dos três? Isso significa que a qualidade do produto acabado depende das três variáveis: escopo, cronograma e orçamento alocado. Mudanças em qualquer uma dessas três variáveis afetam as outras duas, portanto, a qualidade.

    Por exemplo, se um recurso for adicionado, mas nenhum tempo adicional for adicionado ao cronograma para desenvolvimento e teste, a qualidade do código poderá ser prejudicada, mesmo que mais dinheiro seja adicionado. Há momentos em que nem mesmo é viável fazer a troca. Por exemplo, adicionar mais pessoas a um projeto em que os membros estão tão sobrecarregados que não têm tempo para gerenciar ou treinar novas pessoas. No geral, esse modelo nos ajuda a entender as desvantagens que devemos fazer ao desenvolver novos produtos e serviços.

    linguagens de programação

    Uma das decisões importantes que uma equipe de projeto precisa tomar é decidir quais linguagens de programação devem ser usadas e as ferramentas associadas no processo de desenvolvimento. Conforme mencionado no capítulo 3, os desenvolvedores de software criam software usando uma das várias linguagens de programação. Uma linguagem de programação é uma linguagem formal que fornece uma maneira para um programador criar código estruturado para comunicar a lógica em um formato que o hardware do computador possa executar. Nas últimas décadas, muitas linguagens de programação diferentes evoluíram para atender a muitas necessidades diferentes.

    Não há uma maneira única de categorizar os idiomas. Ainda assim, eles geralmente são agrupados por tipo (ou seja, consulta, script) ou cronologicamente por ano em que foi introduzido (ou seja, o Fortran foi introduzido em 1954), por sua “geração”, pela forma como foi traduzido para o código da máquina ou como foi executado. Discutiremos algumas categorias neste capítulo.

    Gerações de linguagens de programação

    As primeiras linguagens eram específicas para o tipo de hardware que precisava ser programado; cada tipo de hardware de computador tinha uma linguagem de programação de baixo nível diferente (na verdade, até hoje, existem diferenças no nível inferior, embora as linguagens de programação de nível superior agora as obscureçam). Nesses primeiros idiomas, instruções precisas precisavam ser inseridas linha por linha — um processo tedioso.

    Algumas características comuns estão resumidas abaixo para ilustrar algumas diferenças entre essas gerações:

    Primeira geração (1GL)

    Segunda geração (2GL)

    Terceira geração (3GL)

    Quarta geração (4GL)

    Quinta geração (5GL)

    Hora introduzida (est).

    Década de 1940 ou anterior

    Década de 1950

    Década de 1950 a 1970

    Década de 1970 a 1990

    Década de 1980 a 1900

    Instruções

    Eles são feitos de números binários de 0s e 1s

    Use um conjunto de sintaxe que seja legível por humanos e programadores

    A sintaxe é mais estruturada e é composta por uma linguagem mais parecida com a humana

    A sintaxe é amigável para não programadores

    Ainda em andamento.

    Categoria

    Dependente da máquina

    Código da máquina

    Dependente da máquina

    Linguagens de montagem de baixo nível

    Independente da máquina

    Alto nível

    Independente da máquina

    Abstração de alto nível,

    3GLs avançados

    Programação lógica

    Vantagem

    Muito rápido, sem necessidade de 'tradução' para 0s e 1s

    O código pode ser lido e escrito por programadores com mais facilidade do que aprender código de máquina

    Mais independente da máquina

    Mais amigável para programadores

    Propósito geral

    Fácil de aprender

    Pode não precisar de programadores para escrever programas

    Desvantagem

    Depende da máquina, não portátil

    Deve ser convertido em código de máquina, ainda dependente da máquina

    Pode ser necessário realizar várias etapas para traduzir para o código de máquina

    Mais especializado

    Ainda no início da fase de adoção

    Uso atual

    Se necessário, interagir diretamente com o hardware, como drivers (por exemplo, driver USB)

    Se necessário, interagir diretamente com o hardware, como drivers (por exemplo, driver USB)

    Os 3GLs modernos são mais comumente usados.

    Os primeiros 3GLs são usados para manter programas de negócios ou programas científicos existentes

    Banco de dados, desenvolvimento web

    Limitado

    Ferramentas visuais, pesquisa de inteligência artificial

    Exemplos

    Linguagem automática

    Idioma de montagem

    Primeiros 3GLs: COBOL, Fortran

    3PLs modernos: C, C++, Java, Javascript

    Perl, PHP, Python, SQL, Ruby

    Mercúrio, OPS5

    O Statista.com informou que, no início de 2020, o Javascript era a linguagem mais usada entre desenvolvedores em todo o mundo. Para ver a lista completa, visite Statista.com para obter mais detalhes.

    Barra lateral: exemplos de idiomas

    Linguagem de primeira geração: código de máquina. No código de máquina, a programação é feita definindo diretamente os e zeros reais (os bits) usando código binário. Aqui está um exemplo de programa que

    adiciona 1234 e 4321 usando linguagem de máquina:

    10111001

    00000000

    11010010

    10100001

    00000100

    00000000

    10001001

    00000000

    00001110

    10001011

    00000000

    00011110

    00000000

    00011110

    00000000

    00000010

    10111001

    00000000

    11100001

    00000011

    00010000

    11000011

    10001001

    10100011

    00001110

    00000100

    00000010

    00000000

    Linguagem de segunda geração. A linguagem de montagem fornece frases em inglês às instruções de código de máquina, facilitando a programação. Um programa em linguagem assembly deve ser executado por meio de um assembler, que o converte em código de máquina. Aqui está um exemplo de programa que adiciona 1234 e 4321 usando a linguagem assembly:

    MOV CX,1234 MOV DS: [0], CX MOV CX,4321 MOV MAX, DS: [0]

    CAIXA DE MOVIMENTAÇÃO, ANÚNCIOS: [2] ADICIONAR FAX, CAIXA

    MOVER ANÚNCIOS: [4], MAX

    Os idiomas de terceira geração não são específicos para o tipo de hardware que executam e são muito mais parecidos com os idiomas falados. A maioria das linguagens de terceira geração deve ser compilada, um processo que as converte em código de máquina. As linguagens conhecidas de terceira geração incluem BASIC, C, Pascal e Java. Aqui está um exemplo usando BASIC:

    A=1234 B=4321 C=A+B FINAL

    As linguagens de quarta geração são uma classe de ferramentas de programação que permitem o desenvolvimento rápido de aplicativos usando interfaces e ambientes intuitivos. Muitas vezes, uma linguagem de quarta geração tem um propósito específico, como a interação com o banco de dados ou a elaboração de relatórios. Essas ferramentas podem ser usadas por pessoas com muito pouco treinamento formal em programação e permitem o rápido desenvolvimento de aplicativos e/ou funcionalidades. Exemplos de linguagens de quarta geração incluem Clipper, FOCUS, FoxPro, SQL e SPSS.

    Por que alguém gostaria de programar em uma linguagem de nível inferior quando precisa de muito mais trabalho? A resposta é semelhante à razão pela qual alguns preferem dirigir automóveis com câmbio manual em vez de transmissão automática: controle e eficiência. Linguagens de nível inferior, como a linguagem assembly, são muito mais eficientes e são executadas com muito mais rapidez. Você também tem um controle mais preciso sobre o hardware. Às vezes, uma combinação de linguagens de nível superior e inferior é misturada para obter o melhor dos dois mundos: o programador criará a estrutura geral e a interface usando uma linguagem de nível superior, mas usará linguagens de nível inferior em qualquer lugar do programa que exija mais precisão.

    Compilado versus interpretado

    Além de classificar uma linguagem de programação com base em sua geração, ela também pode ser classificada como linguagem compilada ou interpretada. Como aprendemos, uma linguagem de computador é escrita em uma forma legível por humanos. Em uma linguagem compilada, o código do programa é traduzido em um formato legível por máquina chamado executável que pode ser executado no hardware. Algumas linguagens compiladas conhecidas incluem C, C++ e COBOL.

    Uma linguagem interpretada requer que um programa de tempo de execução seja instalado para ser executado. Esse programa de tempo de execução então interpreta o código do programa linha por linha e o executa. As linguagens interpretadas geralmente são mais fáceis de trabalhar, mas são mais lentas e exigem mais recursos do sistema. Exemplos de linguagens interpretadas populares incluem BASIC, PHP, PERL e Python. As linguagens da web, como HTML e Javascript, também seriam consideradas interpretadas porque exigem um navegador para serem executadas.

    A linguagem de programação Java é uma exceção interessante a essa classificação, pois na verdade é um híbrido das duas. Um programa escrito em Java é parcialmente compilado para criar um programa que possa ser entendido pela Java Virtual Machine (JVM). Cada tipo de sistema operacional tem sua própria JVM, que deve ser instalada, permitindo que programas Java sejam executados em muitos tipos diferentes de sistemas operacionais.

    Procedural versus orientado a objetos

    Uma linguagem de programação procedural é projetada para permitir que um programador defina um ponto de partida específico para o programa e, em seguida, execute sequencialmente. Todas as primeiras linguagens de programação funcionavam dessa maneira. À medida que as interfaces de usuário se tornaram mais interativas e gráficas, fazia sentido que as linguagens de programação evoluíssem para permitir que o usuário definisse o fluxo do programa. A linguagem de programação orientada a objetos é configurada para definir “objetos” que podem realizar determinadas ações com base na entrada do usuário. Em outras palavras, um programa processual se concentra na sequência de atividades a serem executadas; um programa orientado a objetos se concentra nos diferentes itens que estão sendo manipulados.

    Por exemplo, em um sistema de recursos humanos, um objeto “EMPLOYEE” seria necessário. Se o programa precisasse recuperar ou definir dados sobre um funcionário, ele primeiro criaria um objeto de funcionário no programa e, em seguida, definiria ou recuperaria os valores necessários. Cada objeto tem propriedades, que são campos descritivos associados ao objeto. No exemplo abaixo, um objeto de funcionário tem as propriedades “Nome”, “Número do funcionário”, “Data de nascimento” e “Data da contratação”. Um objeto também tem “métodos”, que podem realizar ações relacionadas ao objeto. No exemplo, há dois métodos. O primeiro é “computePay ()”, que retornará o valor atual devido ao funcionário. A segunda é “listEmployees ()”, que recuperará uma lista de funcionários que se reportam a esse funcionário.

    Objeto do funcionário

    Objeto: EMPREGADO

    Primeiro_nome

    Último nome

    Employee_ID

    Data de nascimento

    Data_de_contratação

    ComputePay ()

    Listar funcionários ()

    Ferramentas de programação

    Outra decisão que precisa ser tomada durante o desenvolvimento de um IS é o conjunto de ferramentas necessárias para escrever programas. Para escrever programas, os programadores precisam de ferramentas para inserir código, verificar a sintaxe do código e algum método para traduzir seu código em código de máquina. Para serem mais eficientes na programação, os programadores usam ferramentas integradas, como um ambiente de desenvolvimento integrado (IDE) ou ferramentas de engenharia de software auxiliadas por computador (CASE).

    Ambiente de Desenvolvimento Integrado (IDE)

    Para a maioria das linguagens de programação, um IDE pode ser usado. Um IDE fornece várias ferramentas para o programador, tudo em um só lugar com uma interface de usuário consistente. O IDE geralmente inclui:

    • um editor para escrever o programa que codificará por cores ou destacará palavras-chave da linguagem de programação;
    • um sistema de ajuda que fornece documentação detalhada sobre a linguagem de programação;
    • um compilador/intérprete, que permitirá ao programador executar o programa;
    • uma ferramenta de depuração, que fornecerá ao programador detalhes sobre a execução do programa para resolver problemas no código; e
    • um mecanismo de check-in/check-out permite que uma equipe de programadores trabalhem juntos em um projeto e não escrevam sobre as alterações de código uns dos outros.

    O Statista.com relata que 80% dos desenvolvedores de software em todo o mundo, de 2018 a 2019, usam uma ferramenta de colaboração de código-fonte, como o GitHub, 77% usam um IDE autônomo, como o Eclipse, 69% usam o Microsoft Visual Studio. Para obter uma lista completa, visite statista.com.

    Ferramentas de engenharia de software assistida por computador (CASE)

    Embora um IDE forneça várias ferramentas para ajudar o programador a escrever o programa, o código ainda precisa ser escrito. As ferramentas de engenharia de software auxiliada por computador (CASE) permitem que um designer desenvolva software com pouca ou nenhuma programação. Em vez disso, a ferramenta CASE escreve o código para o designer. As ferramentas CASE vêm em muitas variedades, mas seu objetivo é gerar código de qualidade com base na contribuição do designer.

    Crie versus compre ou assine

    Quando uma organização decide que um novo programa de software precisa ser desenvolvido, ela deve determinar se faz mais sentido criá-lo sozinha ou comprá-lo de uma empresa externa. Essa é a decisão de “construir versus comprar”. Essa decisão de “compra” agora inclui a opção de assinar em vez de comprá-la imediatamente.

    Há muitas vantagens em comprar software de uma empresa externa. Primeiro, geralmente é mais barato comprar um pacote de software do que criá-lo. Segundo, quando um pacote de software é comprado, ele fica disponível muito mais rapidamente do que se o pacote fosse construído internamente. Terceiro, empresas ou consumidores pagam um preço único e podem manter o software pelo tempo que a licença permitir e pode ser pelo tempo que você o possua ou mesmo após o fornecedor parar de oferecê-lo. A criação de aplicativos de software pode levar meses ou anos; um pacote comprado pode estar em funcionamento em um mês. Um pacote comprado já foi testado e muitos dos bugs já foram resolvidos, e contratos de suporte adicionais podem ser adquiridos. É papel de um integrador de sistemas fazer com que vários sistemas adquiridos e os sistemas existentes na organização trabalhem juntos.

    Também há desvantagens em comprar software. Primeiro, o mesmo software que você está usando pode ser usado por seus concorrentes. Se uma empresa está tentando se diferenciar com base em um processo de negócios desse software comprado, será difícil fazer isso se seus concorrentes usarem o mesmo software. Outra desvantagem da compra de software é o processo de personalização. Se você comprar um pacote de software de um fornecedor e depois personalizá-lo, precisará gerenciar essas personalizações sempre que o fornecedor fornecer uma atualização. Com o aumento da segurança e da privacidade, as empresas podem não ter a experiência interna para responder rapidamente. Instalar várias atualizações e lidar com os bugs encontrados também pode ser um fardo para a equipe de TI e os usuários. Isso pode se tornar uma dor de cabeça administrativa.

    Uma solução híbrida é assinar. Assinar significa que, em vez de vender produtos individualmente, os fornecedores agora oferecem um modelo de assinatura que os usuários podem alugar e pagar periodicamente, como mensalmente ou anualmente. O modelo de aluguel tem sido usado em muitos outros setores, como filmes, livros, e recentemente se mudou para indústrias de alta tecnologia. Agora, empresas e consumidores podem assinar quase tudo, conforme discutimos nos capítulos anteriores, desde armazenamento adicional em suas plataformas de e-mail, como Google Drive ou Microsoft Onedrive, até softwares como Quickbooks, Microsoft Office 365, até serviços de hospedagem e suporte na web, como o Amazon AWS. Os fornecedores se beneficiam da conversão de vendas únicas em vendas recorrentes e aumentam a fidelidade do cliente. Os clientes se beneficiam da dor de cabeça de instalar atualizações, ter o suporte e as atualizações do software gerenciados automaticamente, sabendo que o software continua sendo atualizado com novos recursos. Um modelo de assinatura agora é uma opção predominante tanto para consumidores quanto para empresas.

    Mesmo que uma organização decida comprar ou assinar, ainda faz sentido passar por muitas das mesmas análises para comparar os custos e benefícios de criá-la sozinha. Essa é uma decisão importante que pode ter um impacto estratégico de longo prazo na organização.

    Serviços da Web

    O capítulo 3 afirmou que a mudança para a computação em nuvem permitiu que o software fosse visto como um serviço. Atualmente, as empresas têm uma opção para licenciar funções fornecidas por outras empresas, em vez de escreverem o código sozinhas. Eles são chamados de serviços da web e podem simplificar muito a adição de funcionalidade a um site.

    Por exemplo, suponha que uma empresa deseje fornecer um mapa mostrando a localização de alguém que ligou para sua linha de suporte. Ao utilizar os serviços web da API do Google Maps, eles podem criar um mapa do Google diretamente em seu aplicativo. Ou uma empresa de calçados poderia facilitar para seus varejistas a venda de calçados on-line fornecendo um serviço web do tamanho de calçados que os varejistas poderiam incorporar diretamente em seu site.

    Os serviços da Web podem confundir os limites entre “construir versus comprar”. As empresas podem optar por criar um aplicativo de software sozinhas, mas depois comprar a funcionalidade dos fornecedores para complementar seu sistema.

    Computação de usuário final ou TI paralela

    Em muitas organizações, o desenvolvimento de aplicativos não se limita aos programadores e analistas do departamento de tecnologia da informação. Especialmente em organizações maiores, outros departamentos desenvolvem seus próprios aplicativos específicos para departamentos. As pessoas que os constroem não são necessariamente treinadas em programação ou desenvolvimento de aplicativos, mas tendem a ser adeptas de computadores. Uma pessoa, por exemplo, com experiência em um pacote de software específico, como uma planilha ou pacote de banco de dados, pode ser chamada a criar aplicativos menores para uso por seu próprio departamento. Esse fenômeno é conhecido como desenvolvimento do usuário final, computação do usuário final ou TI paralela.

    A computação do usuário final pode ter muitas vantagens para uma organização. Primeiro, ele aproxima o desenvolvimento de aplicativos daqueles que os usarão. Como os departamentos de TI às vezes estão muito atrasados, ele também fornece um meio de criar software mais rapidamente. Muitas organizações incentivam a computação do usuário final para reduzir a pressão sobre o departamento de TI.

    A computação do usuário final também tem suas desvantagens. Se os departamentos de uma organização forem

    desenvolvendo seus próprios aplicativos, a organização pode acabar com vários aplicativos que executam funções semelhantes, o que é ineficiente, pois duplicou esforços. Às vezes, essas diferentes versões do mesmo aplicativo fornecem resultados diferentes, trazendo confusão quando os departamentos interagem. Esses aplicativos geralmente são desenvolvidos por alguém com pouco ou nenhum treinamento formal em programação. Nesses casos, o software desenvolvido pode ter problemas que precisam ser resolvidos pelo departamento de TI. A computação do usuário final pode ser benéfica para uma organização, mas deve ser gerenciada. O departamento de TI deve definir diretrizes e fornecer ferramentas para os departamentos que desejam criar suas próprias soluções.

    A comunicação entre departamentos contribuirá muito para o uso bem-sucedido da computação do usuário final.

    Barra lateral: Criação de um aplicativo móvel

    O desenvolvimento de software normalmente inclui a criação de aplicativos para serem executados em desktops, servidores ou mainframes. No entanto, a comercialização da web criou categorias adicionais de desenvolvimento de software, como web design, desenvolvimento de conteúdo e servidor web. O esforço de desenvolvimento relacionado à Web para a Internet agora é chamado de desenvolvimento web. As atividades anteriores de desenvolvimento web incluem a criação de sites para apoiar empresas ou criar sistemas de comércio eletrônico e tornaram tecnologias como HTML muito populares entre web designers e linguagens de programação como Perl, Python e Java populares para programadores. Agora, sites pré-embalados estão disponíveis para os consumidores comprarem sem aprender HTML ou contratar um web designer. Por exemplo, empreendedores que desejam iniciar um negócio de padaria agora podem comprar um site pré-construído com um carrinho de compras, tudo pronto para iniciar um negócio sem incorrer em despesas caras para construí-lo sozinhos.

    Com o surgimento dos telefones celulares, surgiu um novo tipo de desenvolvimento de software chamado desenvolvimento de aplicativos móveis. O Statista.com prevê que as receitas de aplicativos móveis aumentarão significativamente de $98 bilhões em 2014 para mais de $935 bilhões em 2023. Isso significa que a necessidade de desenvolvedores de aplicativos móveis também aumentou.

    De muitas maneiras, criar um aplicativo para um dispositivo móvel é o mesmo que criar um aplicativo para um computador tradicional. Entender os requisitos do aplicativo, projetar a interface, trabalhar com os usuários — todas essas etapas ainda precisam ser executadas. O processo de decisão para escolher as linguagens e ferramentas de programação corretas permanece o mesmo.

    No entanto, existem diferenças específicas que os programadores devem considerar ao criar aplicativos para dispositivos móveis. Eles são:

    • A interface do usuário deve variar para se adaptar a diferentes tamanhos de tela
    • O uso de dedos como ponteiros ou para digitar texto em vez de teclado e mouse na área de trabalho
    • Os requisitos específicos do fornecedor do sistema operacional devem ser atendidos para que o aplicativo seja incluído em cada loja (por exemplo, a App Store da Apple ou a Play Store do Android)
    • A integração com o desktop ou a nuvem para sincronizar dados
    • Forte integração com outros hardwares integrados, como câmeras, sensores biométricos ou de movimento.
    • Menos memória disponível, espaço de armazenamento e capacidade de processamento

    Agora, os aplicativos móveis estão disponíveis para quase tudo e continuam crescendo.

    Referências:

    O Javascript foi a linguagem mais usada entre desenvolvedores em todo o mundo (2020). Recuperado em 10 de dezembro de 2020, de Satistica.com

    Documentação da plataforma Google Maps. Recuperado em 10 de dezembro de 2020, de https://developers.google.com/maps/documentation

    Ferramentas de programação/desenvolvimento usadas por desenvolvedores de software em todo o mundo de 2018 e 2019 (2020). Recuperado em 10 de dezembro de 2020, de S tatista.com

    Receitas mundiais de aplicativos móveis em 2014 a 2023 (2010). Recuperado em 10 de dezembro de 2020, de Statista.com