• Aucun résultat trouvé

suivant du Code Civil

Dans le document PARIS 11 octobre 2019 (Page 124-138)

Alguns direcionamentos de trabalhos futuros que podem ser realizados a partir deste trabalho são os seguintes:

 Ampliação do número de aplicações analisadas. Para isto seria necessário automatizar a análise dos tratadores de exceção que neste estudo foi realizado manualmente. Uma analisa automatizada ou semi-automatizada permitirá incluir as aplicações que foram selecionadas, mas que não foram analisadas neste estudo – ver Apêndice C.

 Apoio Ferramental. Desenvolver ferramentas que auxiliem o desenvolvedor a identificar automaticamente más práticas no código de apps Android.

 Realização de um Survey de Validação. A realização de um survey de validação para validar os resultados do segundo survey tornaria o estudo mais confiável, pois seria uma oportunidade de verificar se existiu algum viés nas respostas dos especialistas participantes. Esse survey de validação não foi realizado ainda por não ter sido encontrado uma forma de enviar o survey para um grupo representativo de desenvolvedores Android.

 Elaboração de Guias. Como a Plataforma Android não fornece um guia sobre boas práticas no tratamento de exceções em aplicações Android, seria interessante a elaboração de um guia que permitisse aos desenvolvedores Android consultar qual o melhor tipo de tratamento para uma determinada situação.

 Investigação da propensão a defeitos de elementos específicos do framework Android. Neste trabalho levantamos características

103 apenas dos tratadores de exceção para todas as classes onde os mesmos eram encontrados. Um ponto que vale a pena ser investigado é a frequência que estes elementos do framework aparecem em report de falhas relacionadas ao tratamento de exceções e a partir daí identificar elementos ou características do framework que sejam mais propensa a defeitos no tratamento de exceções.

 Association rules. Usar regras de associação para descobrir relações entre os componentes do framework e os tipos de tratamentos utilizados.

104

Referências

ANDROID-ACTIVITY. Activity no site do Android Developer. 2015. Disponível em: <http://developer.android.com/guide/components/activities.html>.

ANDROID - APP FUNDAMENTALS. 2015. Disponível em:

<http://developer.android.com/guide/components/fundamentals.html>.

ANDROID - BROADCAST RECEIVER. 2015. Disponível em:

<http://developer.android.com/reference/android/content/BroadcastReceiver.html>.

ANDROID - CÓDIGO FONTE. 2015. Disponível em: <http://source.android.com/source/index.html>.

ANDROID - CONTENT PROVIDER. 2015. Disponível em:

<http://developer.android.com/guide/topics/providers/content-providers.html>.

ANDROID - CONTENT PROVIDER BASICS. Android – Content Provider Basics. Disponível em: <http://developer.android.com/guide/topics/providers/content-provider-basics.html>.

ANDROID-FRAGMENT. Disponível em:

<http://developer.android.com/guide/components/fragments.html>.

ANDROID-INTENT. 2015. Disponível em: <http://developer.android.com/guide/components/intents- filters.html>.

ANDROID-PROCESSES AND THREADS. Disponível em:

<http://developer.android.com/guide/components/processes-and-threads.html>.

ANDROID-RESOURCE. Android – Resource. Disponível em: <http://developer.android.com/guide/topics/resources/index.html>.

ANDROID-SERVICE. 2015. Disponível em:

<http://developer.android.com/guide/components/services.html>.

ANDROID-SOBRE. Sobre o Android. 2015. Disponível em: <http://developer.android.com/about/index.html>.

BARBOSA, E. A.; GARCIA, A.; BARBOSA, S. D. J. Categorizing Faults in Exception Handling: A Study of Open Source Projects. In: Software Engineering (SBES), 2014 Brazilian Symposium on. IEEE, 2014. p. 11-20.

BLOCH, J. Effective Java. Pearson Education India, 2008.

BAVOTA, G.; LINARES-VASQUEZ, M.; BERNAL-CARDENAS, C. E.; DI PENTA, M.;

OLIVETO, R.; POSHYVANYK, D. The impact of api change-and fault-proneness on the user ratings of android apps. Software Engineering, IEEE Transactions on, v.41, n. 4, p. 384-407, 2015.

CABRAL, B.; MARQUES, P. Exception handling: A field study in Java and. Net. In: ECOOP 2007– Object-Oriented Programming. Springer Berlin Heidelberg, 2007. p. 151-175.

105

CACHO, N.; BARBOSA, E. A.; ARAUJO, J.; PRANTO, F.; GARCIA, A. F.; CESAR, T.; SOARES, E.; CASSIO, A.; FILIPE, T.; GARCIA, I.; How Does Exception Handling Behavior Evolve? An Exploratory Study in Java and C# Applications. In ICSME, 2014. p. 31-40.

CHARMAZ, K. Constructing grounded theory: A practical guide through qualitative research. SagePublications Ltd, London, 2006.

COELHO, R.; RASHID, A.; VON STAA, A.; NOBLE, J.; KULESZA, U.; LUCENA, C. A catalogue of bug patterns for exception handling in aspect-oriented programs. In Proceedings of the 15th Conference on Pattern Languages of Programs, ACM, 2008. p. 23.

COELHO, R.; VON STAA, A.; KULESZA, U.; RASHID, A.; LUCENA, C. Unveiling and taming liabilities of aspects in the presence of exceptions: A static analysis based approach. Information Sciences, v. 181, n. 13, p. 2700-2720, 2011.

COELHO, R.; ALMEIDA, L.; GOUSIOS, G.; VAN DEURSEN, A. Unveiling exception handling bug hazards in Android based on GitHub and Google code issues. In Proc. of the 12th Working Conference on Mining Software Repositories, 2015. p. 134-145.

COLE, B.; HAKIM, D.; HOVEMEYER, D.; LAZARUS, R.; PUGH, W.; STEPHENS, K. Improving your software using static analysis to find bugs. In Companion to Proceedings of OOPSLA'06, pp.673- 674. 2006.

CORBIN, J. M.; STRAUSS, A. Grounded theory research: Procedures, canons, and evaluative criteria. Qualitative sociology, v. 13, n. 1, p. 3-21, 1990.

EBERT, F.; CASTOR, F.; SEREBRENIK, A. An exploratory study on exception handling bugs in Java programs. Journal of Systems and Software, v.106, p. 82-101, 2015.

ECKEL, B. Thinking in Java. 4th Edition. Prentice-Hall PTR, Stoughton, MA, USA. p.313-353. 2006.

GOMES, I.; MORGADO, P.; GOMES, T.; MOREIRA, R. An overview on the static code analysis approach in software development. Faculdade de Engenharia da Universidade do Porto, Portugal, 2009.

GOSLING, J. The Java language specification. Addison-Wesley Professional, 2000.

GROOVY. 2015. Disponível em: <http://groovy.codehaus.org/JN3035-Exceptions>.

GORANSSON, A. Efficient Android Threading: Asynchronous Processing Techniques for Android Applications. O'Reilly Media, Inc.", 2014.

HECHT, G.; Rouvoy, R.; Moha, N.; Duchien, L. (2015, May). Detecting antipatterns in Android apps. In Proceedings of the Second ACM International Conference on Mobile Software Engineering and Systems, IEEE Press, 2015. p. 148-149.

JAVA. 2015. Oracle – History of Java. Disponível em:

<http://www.oracle.com/technetwork/java/javase/overview/javahistory-index-198355.html>.

JAVA EXCEPTION. 2015. Oracle - What is an exception? Disponível em: <http://docs.oracle.com/javase/tutorial/essential/exceptions/definition.html>.

JO, J. W.; CHANG, B. M.; YI, K.; CHOE, K. M. An uncaught exception analysis for Java. Journal of systems and software, v. 72, n. 1, p. 59-69, 2004.

106

JOHNSON, R. E., & FOOTE, B. Designing reusable classes. Journal of object-oriented programming, v. 1, n. 2, p. 22-35, 1998.

JOORABCHI, M. E.; MESBAH, A.; KRUCHTEN, P. Real challenges in mobile app development. In Empirical Software Engineering and Measurement. 2013 ACM/IEEE International Symposium on, IEEE, 2013. p. 15-24.

KASUNIC, M. Designing an effective survey. (No. CMU/SEI-2005-HB-004). Carnegie-Mellon Univ Pittsburgh Pa Software Engineering Inst, 2005.

KECHAGIA, M.; SPINELLIS, D. Undocumented and unchecked: exceptions that spell trouble. In Proceedings of the 11th Working Conference on Mining Software Repositories, ACM, 2014. p. 312- 315.

KOCHHAR, P. S. F. THUNG, NAGAPPAN, N.; ZIMMERMANN , T.; LO, D. Understanding the test automation culture of app developers. In Software Testing, Verification and Validation (ICST), 2015 IEEE 8th International Conference on, IEEE, 2015. p. 1-10.

LINARES-VÁSQUEZ, M.; VENDOME, C.; LUO, Q.; POSHYVANYK, D. How developers detect and fix performance bottlenecks in Android apps. In Software Maintenance and Evolution (ICSME), 2015 IEEE International Conference on, IEEE, 2015. p. 352-361.

MANDRIOLI, D.; MEYER, B. Advances in object-oriented software engineering. Prentice-Hall, Inc, 1992.

MCDONNELL, T., RAY, B.; KIM, M. An empirical study of API stability and adoption in the Android ecosystem. In Software Maintenance (ICSM), 2013 29th IEEE International Conference on, IEEE, 2013. p. 70-79.

MELO, H.; COELHO, R.; KULESZA, U.; SENA, D. In-depth characterization of exception flows in software product lines: an empirical study. Journal of Software Engineering Research and

Development, v.1, n.1, p. 1-30, 2013.

MILLER, R.; TRIPATHI, A. Issues with exception handling in object-oriented systems. In European Conference on Object-Oriented Programming, Springer Berlin Heidelberg, 1997. p. 85-103.

OHA-ANDROID. 2015. Disponível em:

<http://www.openhandsetalliance.com/android_overview.html>.

OHA-FAQ. Faq do do site da Open Handset Alliance. 2015. Disponível em: <http://www.openhandsetalliance.com/oha_faq.html>.

OHA-MEMBROS. Membros do OHA. 2015. Disponível em: <http://www.openhandsetalliance.com/oha_members.html>.

OLIVEIRA, J. Um Estudo Comparativo entre a Evolução do Comportamento Excepcional em Aplicações Java e Android, Dissertacao de Mestrado. Programa de Pos-graduacao em Ciencia da Computacao, DIMAp, UFRN, 2015.

PATHAK, A.; HU, Y. C.; ZHANG, M. Bootstrapping energy debugging on smartphones: a first look at energy bugs in mobile devices. InProceedings of the 10th ACM Workshop on Hot Topics in Networks, ACM, 2011. p. 5

107

ROBILLARD, M. P.; MURPHY, G. C. Designing robust Java programs with exceptions. In ACM SIGSOFT Software Engineering Notes, ACM, v. 25, n. 6, p. 2-10, 2000.

RUBY. Exception Handling. Disponível em: <http://ruby-doc.org/core- 2.2.1/doc/syntax/exceptions_rdoc.html>.

RUIZ, I. J. M.; NAGAPPAN, M.; ADAMS, B.; HASSAN, A. E. Understanding reuse in the android market. In Program Comprehension (ICPC), 2012 IEEE 20th International Conference on, IEEE, 2012. p. 113-122.

SHAH, H.; GORG, C.; HARROLD, M. J. (2010). Understanding exception handling: Viewpoints of novices and experts. IEEE Transactions on Software Engineering, v. 36, n. 2, 150-161, 2010.

TIOBE INDEX. Tiobe Index of March 2015. Disponível em:

<http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html>.

WIRFS-BROCK, R. J. Toward exception-handling best practices and patterns. IEEE software, v. 23, n. 5, p. 11-13, 2006.

ZHANG, P.; ELBAUM, S. Amplifying tests to validate exception handling code. In: Proc. of the 34th International Conference on Software Engineering, IEEE Press, 2012. p. 595-605.

108

Apêndice A - Survey Exploratório: Questões e

Respostas

Este apêndice contém os questionários utilizados no survey exploratório, uma versão em Inglês apresentado na Tabela 15 e uma versão em português apresentado na Tabela 16. Além de listar as respostas conseguidas para o survey.

Tabela 15. Versão em inglês do questionário utilizado no survey exploratório.

Survey on Exception Handling in Android App Development

We are researchers in the Software Testing and Specification Lab at the Federal University of Rio Grande do Norte in Brazil and we are interested in understanding the best practices applied and difficulties faced when developing exception handling code for Android apps.

We would appreciate your feedback via this 10-minute survey until April 27, 2015. One of the respondents will receive an Amazon.com gift card of $50,00 (fifity dollars, random draw). If you have questions about the survey, please send an email to: [email protected] Q1: For how long have you been developing in Java?

( ) < 6 months ( ) >=6 and < 24 months ( ) >= 2 and < 4 years ( ) >= 4 and < 6 years ( ) >= 6 and < 10 years ( ) >= 10 years

Q2: For how long have you been developing in the Android Platform?

( ) < 6 months ( ) >= 6 and < 12 months ( ) >= 12 and < 24 months ( ) >= 24 and < 48 months ( ) >= 48 and < 72 months ( ) >= 72 months

Q3: Is the development of Android apps part of your job?

( ) Yes ( ) No

Q4: What kind of Android projects do you work on?

( ) Open source projects ( ) Closed source projects ( ) Both

109

Q4.1: If you have worked on at least one open source Android project, could you provide us with the repository address?

Q5: When was the last time you needed to deal with exceptions while developing an Android app? What did you have to do?

(Tip: Talk about a specific situation you had to solve.)

Q6: In your opinion, is exception handling important for the development of robust applications? Why?

Q7: Are you aware of any best practices for developing the exception handling code for Java and/or Android applications?

( ) Yes ( ) No

Q7.1: If yes, what best practices are you aware of?

(Only answer this question in case of a positive answer in Q7.)

Q8: How would you rate the difficulty of exception handling in Android apps compared to general Java applications?

(By general Java applications, we mean non-Android applications, such as Java desktop applications or Java web applications.)

Android exception handling is much easier 1 ( ) 2 ( ) 3 ( ) 4 ( ) 5 ( ) Android exception handling is much more difficult

Java code snippet related to Q9 and Q10

public class Example{

public static void main(String[] args) { foo();

//calls to other methods ...

}

public static void foo() { bar();

} }

Q9: Given the code snippet above of a simple Java class, what will happen if bar() throws a runtime exception?

[ ] An error message will be presented on the console [ ] The program crashes

[ ] The exception will be logged by the Java environment and the class continues its execution [ ] I don't know

110

Q10: If you could change the above code, what would you do with runtime exceptions thrown by bar()?

Android code snippet related to Q11, Q12 and Q13

@Override

public void onPause() { super.onPause(); commitData();

}

Q11: Given the code snippet above of the onPause() method of the Activity class in Android, what will happen if commitData() throws a runtime exception?

[ ] An error message will be presented to the user [ ] The application crashes

[ ] The exception will be logged by the platform and the application continues its execution [ ] I don't know

[ ] Other:

Q12: If you could change the above code, what would you do with runtime exceptions thrown by commitData()?

Q13: If the exception thrown by commitData() was a checked exception, would you do something different? If so, what?

Q14: In a situation where you catch an exception, but you cannot do anything to bring the Android application back to a stable state, what action(s) do you usually take?

[ ] Log the exception

[ ] Show a message to the user

[ ] Include an empty try-catch block to silence the exception [ ] Rethrow the same exception (using the throw statement) [ ] Throw a new exception (using throw new)

[ ] Other:

Q15: Have you ever used the Thread.UncaughtExceptionHandler interface to customize the treatment of uncaught exceptions?

( ) Yes ( ) No

Q15.1: If yes, briefly describe a scenario where you used the UncaughtExceptionHandler or include a link (URL) to the corresponding code.

(Only answer this question in case of a positive answer in Q15.)

Android code snippet related to Q16 and Q17

The AsyncTask enables proper and easy use of the UI thread, it allows to perform background operations and publish results on the UI thread without having to manipulate threads and/or handlers [Android Developer Site].

111

private class Example extends AsyncTask <Params, Progress, Result> {

protected Result doInBackground(Params... params) { doSomeTask();

} ... }

Q16: If the doSomeTask() method throws a runtime exception, will the UI thread be notified?

( ) Yes ( ) No

( ) I don’t know

Q17: What will happen in the application after the exception is thrown?

[ ] An error message will be presented to the user [ ] The application crashes

[ ] The exception will be logged by the platform and the application continues its execution [ ] The exception is automatically sent to the UI thread

[ ] The thread of AsyncTask is terminated and the UI thread continues its execution [ ] I don't know

[ ] Other:

Q18: How would you rate each element below according to their complexity in implementing exception handling?

Element

Complexity

Very Low Low Medium High Very High Don’t Know Broadcast Receiver ( ) ( ) ( ) ( ) ( ) ( ) Content Provider ( ) ( ) ( ) ( ) ( ) ( ) Activity ( ) ( ) ( ) ( ) ( ) ( ) Service ( ) ( ) ( ) ( ) ( ) ( ) AsyncTask ( ) ( ) ( ) ( ) ( ) ( ) Fragment ( ) ( ) ( ) ( ) ( ) ( ) Handler ( ) ( ) ( ) ( ) ( ) ( )

Q19: Thank you for your participation in this survey. You are eligible to win a $50 gift card from Amazon.com. If you'd like to participate in the draw, please leave your email address below. Q20: Would you be willing to be contacted for a follow-up interview via Skype / Hangout?

(We'll contact you to make an appointment at your convenience.) ( ) Yes

( ) No

112

Tabela 16. Versão em português do questionário utilizado no survey exploratório.

Questionário sobre Tratamento de Exceções no Desenvolvimento de Aplicações Android Nós somos pesquisadores no Laboratório de Especificação e Teste de Software na Universidade Federal do Rio Grande do Norte (UFRN) e nós estamos interessados em entender as boas práticas aplicadas e dificuldades encontradas durante o desenvolvimento do código de tratamento de exceções para aplicações Android.

Nós apreciaríamos o seu feedback através desse questionário, que leva em torno de 10-15 minutos para ser respondido, até o dia 27 de abril de 2015. Um dos participantes irá ganhar um cartão de presente (gift card) da Amazon.com no valor de $50,00 (cinquenta dólares).

Se tiver alguma pergunta sobre o questionário, por favor envie um e-mail para: [email protected]

Q1: Há quanto tempo você desenvolve para a plataforma Java?

( ) < 6 meses ( ) >=6 e < 12 meses ( ) >= 2 e < 4 anos ( ) >= 4 e < 6 anos ( ) >= 6 e < 10 anos ( ) >= 10 anos

Q2: Há quanto tempo você desenvolve para a plataforma Android?

( ) < 6 meses ( ) >= 6 e < 12 meses ( ) >= 12 e < 24 meses ( ) >= 24 e < 48 meses ( ) >= 48 e < 72 meses ( ) >= 72 meses

Q3: O desenvolvimento de aplicações Android faz parte do seu trabalho?

( ) Sim ( ) Não

Q4: Qual o tipo de projeto Android que você trabalha?

( ) Projetos com código fonte aberto ( ) Projetos privados

( ) Ambos ( ) Nenhum

Q4.1: Se você já tiver trabalhado em pelo menos um projeto de código aberto, você poderia nos fornecer o(s) endereço(s) do(s) respositório(s)?

Q5: Quando foi a útlima vez que você precisou lidar com exceções enquanto desenvolvia uma aplicação Android? O que você teve que fazer?

113

Q6: Em sua opinião, o tratamento de exceções é importante para o desenvolvimento de aplicações robustas? Por quê?

Q7: Você conhece qualquer boa prática aplicada no desenvolvimento do código de tratamento de exceções em aplicações Java e/ou Android?

( ) Sim ( ) Não

Q7.1: Se sim, qual(is) boa(s) prática(s) você conhece?

(Apenas responda essa questão se você respondeu "Sim" na Q7.)

Q8: Como você classificaria a dificuldade de tratamento de exceções em aplicações Android comparando com aplicações Java em geral?

(Nesse caso, entenda como aplicações Java em geral as aplicações Java que não são aplicações Android. (Ex.: aplicações Java desktop, aplicações Java web...)

Tratamento de exceção em Android é muito mais fácil 1 ( ) 2 ( ) 3 ( ) 4 ( ) 5 ( ) Tratamento de exceção em Android é muito mais difícil

Trecho de código relacionado à Q9 e Q10.

public class Example{

public static void main(String[] args) { foo();

//calls to other methods ...

}

public static void foo() { bar();

} }

Q9: Seja o trecho de código acima de uma simples classe Java, se o método bar() lançar uma exceção do tipo runtime o que acontecerá?

[ ] Uma mensagem de erro é apresentada no console [ ] O programa falhará

[ ] A exceção será logada pelo ambiente Java e a classe continua sua execução [ ] Eu não sei

[ ] Outra:

Q10: Se você pudesse alterar o código acima, o que você faria com a exceção sinalizada pelo método bar()?

Trecho de código relacionado à Q11, Q12 e Q13

@Override

114

super.onPause(); commitData(); }

Q11: Seja o trecho de código acima de um método onPause() de uma classe do tipo Activity. Se commitData() lança uma exceção do tipo runitme o que acontecerá?

[ ] Uma mensagem de erro é apresentada ao usuário [ ] A aplicação falhará

[ ] A exceção será logada pela plataforma e a aplicação continua sua execução [ ] Não sei

[ ] Outra:

Q12: Se você pudesse alterar o código acima, o que você faria com a exceção sinalizada pelo método commitData()?

Q13: Se a exceção sinalizada pelo método commitData() fosse do tipo checada você faria algo diferente? Se sim, o que?

Q14: Em uma situação onde você captura uma exceção mas não pode fazer nada para que a aplicação volte a um estado estável. O que você geralmente faz?

[ ] Loga a exceção

[ ] Mostra uma mensagem para o usuário

[ ] Inclui um bloco try-catch vazio para silenciar a exceção [ ] Relança a mesma exceção (usando apenas o comando throw) [ ] Lança uma nova exceção (usando o comando throw new) [ ] Outra:

Q15: Você já utilizou alguma vez a interface Thread.UncaughtExceptionHandler para personalizar o tratamento de exceções não capturadas?

( ) Sim ( ) Não

Q15.1:Se sim, descreva brevemente um cenário onde você usa a UncaughtExceptionHandler ou insira um endereço (URL) que contenha o código correspondente.

(Somente responda essa questão se você respondeu "Sim" na Q15.)

Trecho de código relacionado a Q16 e Q17

A AsyncTask habilita um apropriado e fácil uso da UI thread, ela permite realizar operações em segundo plano e publicar resultados na UI thread sem a necessidade de manipular elementos de sincronização de threads [Site do Android Developer].

Considere o trecho de código abaixo:

private class Example extends AsyncTask <Params, Progress, Result> {

protected Result doInBackground(Params... params) { doSomeTask();

} ... }

115

Q16: Se o método doSomeTask() lançar uma exceção do tipo runtime, a UI thread será notificada adequadamente?

( ) Sim ( ) Não ( ) Eu não sei

Q17: O que acontecerá na aplicação após o lançamento da exceção?

[ ] Uma mensagem de erro é apresentada ao usuário [ ] A aplicação falhará

[ ] A exceção será logada pela plataforma e a aplicação continuará a sua execução [ ] A exceção é enviada automaticamente para a UI thread

[ ] A thread da AsyncTask é terminada e UI thread continua sua execução [ ] Eu não sei

Q18: Como você classificaria cada elemento abaixo de acordo com sua complexidade na implementação do tratamento de exceções?

Elemento

Complexidade

Muito baixa Baixa Média Alta Muito Alta Não Sabe Broadcast Receiver ( ) ( ) ( ) ( ) ( ) ( ) Content Provider ( ) ( ) ( ) ( ) ( ) ( ) Activity ( ) ( ) ( ) ( ) ( ) ( ) Service ( ) ( ) ( ) ( ) ( ) ( ) AsyncTask ( ) ( ) ( ) ( ) ( ) ( ) Fragment ( ) ( ) ( ) ( ) ( ) ( ) Handler ( ) ( ) ( ) ( ) ( ) ( )

Q19: Obrigado por sua participação em responder o questionário. Você é um(a) candidato(a) a concorrer a um cartão de presente da Amazon.com no valor de $50,00 dólares. Se você gostaria de participar do sorteio, deixe o seu e-mail abaixo.

Q20: Você estaria disposto(a) a ser contatado(a) para uma entrevista via Skype / Hangout?

(Nós entraremos em contato para marcar uma entrevista no horário de sua conveniência.) ( ) Sim

( ) Não

116

Respostas do Survey Exploratório

#

Q1: Há quanto tempo você desenvolve para a plataforma Java?

Q2: Há quanto tempo você desenvolve para a plataforma Android?

Q3: O desenvolvimento de aplicações Android faz parte do seu

trabalho? Q4: Qual o tipo de projeto Android que você trabalha?

1 >= 6 e < 10 anos >= 72 meses Sim Projetos privados 2 >= 2 e < 4 anos >= 6 e < 12 meses Não Projetos privados

Dans le document PARIS 11 octobre 2019 (Page 124-138)