Unidade 3
Unidade 3
Unidade 3
DISPOSITIVOS MÓVEIS
CAPÍTULO 3 - COMO PODEMOS
CONSTRUIR APLICATIVOS DE
QUALIDADE?
Fernando Skackauskas Dias
INICIAR
Introdução
Com a tendência cada vez mais forte de desenvolver aplicativos para dispositivos
móveis, para os mais diversos fins, o mercado passa a ser mais exigente com
qualidade, o que exige critérios mais elevados de boa interação, funcionalidades
inteligentes, alto desempenho, conectividade com as mais diversas plataformas e
com outros aplicativos. Para atender a essas exigências, os sistemas operacionais
são desenvolvidos com classes e componentes para serem utilizadas como recursos
nos aplicativos.
Estes recursos concentram utilidades, como ferramentas para depuração e testes,
que auxiliam os desenvolvedores a construírem aplicativos com maior agilidade e
robustez. Outra função dos SOs dispositivos móveis tem como objetivo analisar o
desempenho e a automatização na construção de aplicativos.
Neste capítulo, vamos entender o Databinding do SO Android, permitindo ao
desenvolvedor escrever layouts declarativos. Vamos aprender, também, a usar os
padrões MVP (Model-View-Presenter) e MVVM (Model-View-ViewModel) e o
componente Dagger2, e demonstrar como utilizar as ferramentas de teste e
depuração como o JUnit, Espresso e Robotium. Será mostrado como realizar a
análise de desempenho por meio de ferramentas de análise. Por fim, serão
mostradas as ferramentas de automatização de construção como o Gradle e Jenkins.
Acompanhe com atenção e bons estudos!
3.1.1 Databinding
O Android oferece suporte para escrever layouts declarativos, usando o Databinding,
também, chamado de vinculação de dados. Databinding permite sincronizar a
interface de usuário com o modelo de aplicativo e a lógica. Para Lee (et al., 2005),
isso minimiza o código necessário do aplicativo para se conectar aos elementos da
interface do usuário.
O uso de Databinding requer alterações nos arquivos de layout. Eles iniciam com
uma tarefa raiz, seguido de um elemento data e um elemento de visão. Os
elementos de dados descrevem os dados que estão disponíveis para ligação. O
elemento de visão contém sua hierarquia semelhante aos arquivos de layout, que
não são usados com Databinding.
As referências aos elementos de dados ou expressões dentro do layout são gravadas
nas propriedades do atributo usando o @{}ou @={}. Na figura a seguir, é
demonstrada a estrutura de vinculação de dados no Databinding.
Figura 1 - Modelo de Databinding do sistema operacional Android, indicando os módulos e suas correlações.
Fonte: Elaborado pelo autor, 2018.
A Databinding do Android gera uma classe “Binding”, com base nesse layout. Esta
classe contém todas as ligações das propriedades de layout, isto é, a variável
definida para as visualizações correspondentes. Ele também fornece as classes
“setters” geradas para seus elementos de dados, a partir do layout. O nome da classe
gerada é baseado no nome do arquivo de layout. Este nome é convertido e é
adicionado a ele. Por exemplo, se o arquivo de layout for chamado
activity_main.xml(), o método generate() será chamada ActivityMainBinding, sendo
possível incrementar o layout e conectar o modelo por meio dessa classe.
Portanto, a vinculação de dados é construída com a ideia de usar dados de um
objeto Java para definir atributos em seus layouts, e essa é a medida em que é muito
utilizado. Isto permite que se defina a lógica de visualização independentemente do
Android Framework.
VOCÊ SABIA?
Os aplicativos móveis, que incluem calendários, navegadores e mapas interativos, fazem parte da
vida da maioria das pessoas hoje em dia. A maioria dos aplicativos móveis é de usuário único; e eles
não permitem a colaboração síncrona entre os usuários. A colaboração móvel permite que vários
usuários em diversos locais combinem sinergicamente suas contribuições de maneira conveniente.
Figura 2 - Modelo MVP do sistema operacional Android, indicando os módulos e suas correlações. Fonte:
Elaborado pelo autor, 2018.
Para que uma aplicação seja facilmente extensível e sustentável, é necessário definir
camadas separadas. O que faremos se, em vez de recuperar os mesmos dados de
um banco de dados, precisarmos fazer isso de um serviço da web?
Seria preciso refazer toda a parte de apresentação do aplicativo, denominada visão
pelo MVP. O MVP torna as visualizações independentes da fonte de dados. O
aplicativo é dividido em, pelo menos, três camadas diferentes, o que permite testá-
las independentemente. Com o MVP, pode-se tirar a maior parte da lógica das
atividades para que possa testá-la sem usar testes de instrumentação.
Existem muitas variações do MVP e todas podem ajustar a ideia do padrão às
necessidades de desenvolvimento de cada aplicativo. O modelo varia dependendo
basicamente da quantidade de funcionalidades do aplicativo. A visão é responsável
por habilitar ou desabilitar uma barra de progresso, ou deveria ser feita pelo módulo
apresentador? E qual módulo decide quais ações devem ser mostradas na barra de
ação?
Por outro lado, temos o MVVM (Model-View-ViewModel). À primeira vista, o MVVM
parece semelhante ao padrão Model-View-Presenter, porque ambos fazem o trabalho
de abstrair o estado e o comportamento da visão.
O Modelo de Apresentação abstrai uma visualização independente de uma
plataforma específica de interface com o usuário, enquanto o padrão MVVM foi
criado para simplificar a programação orientada a eventos das interfaces com o
usuário. Na figura a seguir, é demonstrado o modelo MVVM.
VOCÊ SABIA?
No artigo dos pesquisadores Pinto e Araújo (2016), podemos acompanhar um estudo de caso para
testes automatizados com frameworks de código aberto em aplicativos móveis em sistema
operacional Android, no nível de unidade e interface de sistema. O estudo demonstra uma análise
crítica de cada ferramenta.
Figura 5 - Estrutura e componentes do Android Debug Bridge do sistema operacional Android. Fonte:
Elaborado pelo autor, 2018.
#PraCegoVer: Apresenta uma tabela onde a primeira linha é laranja e está escrito no
meio da linha: AndroidDevMetries, embaixo dessa linha tem-se duas colunas uma
encostada na outra. Na primeira coluna está escrito Vantagens: -Fácil integração, -
Existência de métricas para várias atividades. Na segunda coluna está escrito
desvantagens: - Métricas somente para poucos métodos, - Não há mecanismo de
armazenamento das métricas.
VOCÊ O CONHECE?
O criador do Java, James Gosling, quando adolescente, teve a ideia de criar um pequeno intérprete para
resolver um problema em um projeto de análise de dados em que estava trabalhando na época. Ao longo
dos anos, como aluno de pós-graduação e na Sun, como criador de Java e da Java Virtual Machine, ele
usou variações dessa solução. Leia mais sobre o criador do Java no artigo escrito por Allman (2004),
disponível em <https://queue.acm.org/detail.cfm?id=1017013 (https://queue.acm.org/detail.cfm?
id=1017013)>.
Na prática de Integração Contínua (CI), os desenvolvedores devem integrar o código
em repositório, para compartilhamento constante.
É o processo de executar os testes em uma máquina que não seja a do
desenvolvedor, automaticamente, quando é enviado um novo código para o
repositório de origem. Na figura a seguir é mostrada a Integração Contínua no
sistema operacional Android.
CASO
O mercado consumidor está cada vez mais exigente com relação aos aplicativos para dispositivos
móveis e suas funcionalidades e, para não perder oportunidades, as empresas devem estar atentas
para o que o público espera, a fim de atender a essas demandas. Um grande escritório de advocacia
percebeu um nicho de utilização de aplicativos: a capacidade de realizar as sessões de conciliação de
processos virtualmente. Para isto, a empresa solicitou o desenvolvimento de um aplicativo que
permite que as partes envolvidas no processo, possam fazer uma videoconferência, utilizando o
aplicativo no dispositivo móvel. Isto agiliza as decisões, as torna mais eficientes e reduz custos de
deslocamento para as partes envolvidas e os advogados.
Síntese
Aprendemos aqui, como desenvolver aplicativos com qualidade para dispositivos
móveis no sistema operacional Android. É muito importante para os
desenvolvedores utilizarem padrões de projeto específicos para aplicativos em
dispositivos móveis, como o MVC e MVVM, pois estes padrões garantem a eficiência
da arquitetura do software. É também muito relevante saber utilizar os testes,
depuração e a análise de desempenho, juntamente com a criação automática de
códigos, pois estas atividades mantêm o nível de qualidade dos aplicativos.
Neste capítulo, você teve a oportunidade de:
utilizar os padrões de projeto por meio do Databinding, arquitetura MVP e
MVVM e Dagger 2.
aplicar os testes e depuração por meio de testes unitários utilizando
ferramentas JUnit, Robotium e Espresso.
identificar os gargalos de desempenho utilizando ferramentas de análise e
otimização de desempenho.
utilizar ferramentas de automatização para desenvolver aplicativos mais
eficientes por meio das ferramentas Gradle e Jenkins.
Bibliografia
ALLMAN, E. A conversation with James Gosling. acmQueue, Vol.2(5), pp.24-33,
July/August, 2004. Disponível em: <https://queue.acm.org/detail.cfm?id=1017013
(https://queue.acm.org/detail.cfm?id=1017013)>. Acesso em: 04/07/2018.
BARBOSA, N. A. Padrões de projeto de interface para aplicativos Android para o
Google TV. Universidade Estadual de Maringá. Desenvolvimento de Sistemas para
Web. 2013. Disponível em: < https://silo.tips/download/universidade-estadual-de-
maringa-centro-de-tecnologia-departamento-de-informatic-51
(https://silo.tips/download/universidade-estadual-de-maringa-centro-de-
tecnologia-departamento-de-informatic-51)>. Acesso em: 04/07/2018.
DEITEL, P. J.; DEITEL, H.; WALD, A. Android 6 para Programadores: uma abordagem
baseada em aplicativos. 3. ed. Porto Alegre: Bookman, 2016.
LEE, V.; et al. Aplicações Móveis: arquitetura, projeto e desenvolvimento. São Paulo:
Pearson. 2005. Disponível na Biblioteca Virtual : <https:// brasil.blackboard.com/
(https:// brasil.blackboard.com/webapps/blackboard/content/listContent.jsp?
course_id=_198689_1&content_id=_4122211_1&mode=reset)web (https://
brasil.blackboard.com/webapps/blackboard/content/listContent.jsp?
course_id=_198689_1&content_id=_4122211_1&mode=reset)apps/blackboard/content/l
istContent.jsp?course_id=_198689_1&content_id=_4122211_1&mode=reset (https://
brasil.blackboard.com/webapps/blackboard/content/listContent.jsp?
course_id=_198689_1&content_id=_4122211_1&mode=reset)>. Acesso em:
26/6/2018.
PICHILIANI, M. C.; HIRATA, C. M. Adaptation of Single-user Multi-touch Components
to Support Synchronous Mobile. Collaboration Mobile Networks and Applications,
October 2014, Volume 19, Issue 5, pp 660–679. Disponível em: <https://
(https://link.springer.com/article/10.1007/s11036-014-0512-0)link
(https://link.springer.com/article/10.1007/s11036-014-0512-
0).springer.com/article/10.1007/s11036-014-0512-0
(https://link.springer.com/article/10.1007/s11036-014-0512-0)>. Acesso em:
04/07/2018.
PINTO, S. V; ARAÚJO, M. A. P. Análise comparativa de ferramentas para testes em
aplicativos Android. Caderno de Estudos em Sistemas de Informação, v. 3, n. 2,
2016.
SAWADA, Y.; et al. Performance of Android Cluster System Allowing Dynamic Node
Reconfiguration. Wireless Personal Communications. April 2017, Volume 93, Issue
4, pp 1067–1087. Disponível em: <https://
(https://link.springer.com/article/10.1007/s11277-017-3978-9)link
(https://link.springer.com/article/10.1007/s11277-017-3978-
9).springer.com/article/10.1007/s11277-017-3978-9
(https://link.springer.com/article/10.1007/s11277-017-3978-9)>. Acesso em:
04/07/2018.
TANENBAUM, A. S.; BOS, H. Sistemas Operacionais Modernos. 4. ed. São Paulo:
Person Education do Brasil, 2016.
ZHAO, H.; et al. A novel pre-cache schema for high performance Android system.
Future Generation Computer Systems, March 2016, Vol. 56, pp. 766-772.
Disponível em:
<https://www.sciencedirect.com/science/article/pii/S0167739X15001806
(https://www.sciencedirect.com/science/article/pii/S0167739X15001806)>. Acesso
em: 04/07/2018.