SlideShare a Scribd company logo
Android - A Practitioner's take on doing it The Agile Way Thiyagu, Krishna, Soundar, Ashwin
Can we run an Android Application Development Project the Agile Way?
As a practitioner, what are the effects of the Technical Stack on the process?
How can I follow the 'Extreme Programming' Practices?
As ThoughtWorks why can we expect Android Projects?
Enterprises are looking for a Mobile Presence
Mostly CRUD Applications though.
Then Why a native app over a Web App?
Native Applications are much more enabled than a web application 
etc.....
But why Android?
Steep increase in the user  base
Lots of new Vendors
So as ThoughtWorks, why have this capability?
We want to build something cool !
Disclaimer
Why is this not just a Java Project?
When you’re working with Android, it sure feels like you are writing regular old standard Java SE code
You are not!!
So what is the difference? Its the runtime!!!!
In the Android platform, we have the Dalvik Runtime which is specially designed for devices that are contrained in terms of memory, speed and battery power.
Dalvik is not even a Java Virtual Machine at all!
It does not understand byte code. Instead...
It understands Dex Code
Everything you need as a programmer is available in the Dalvik implementation of Java
Why do I mention all this?
Because you might want to use something like JMock to mock your dependencies when writing your unit tests
Its not a full Java SE implementation
 
Test Driven Development
The Application to be tested must/needs to run on a device instance
Any entity that aims to test the Android Application must be on the device instance as well
So the test in itself is Another Application!
Android Testing and Instrumentation
public class LoginActivity extends Activity       /* declarations of states*/          @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.login);              loginButton = (Button) findViewById(R.id.login_login_button);         usernameText = (TextView) findViewById(R.id.user_name_input);         passwordText = (TextView)findViewById(R.id.pass_word_input);                   loginButton.setOnClickListener(new OnClickListener() {              public void onClick(View v) {                 String username = usernameText.getText().toString();                 String password = passwordText.getText().toString();                 MyApplication.getLoginService().login(username, password);             }         });     } }
public class LoginActivityTest extends ActivityUnitTestCase<LoginActivity> {      public LoginActivityTest() {           super(LoginActivity.class);      }        protected void setUp() throws Exception {           super.setUp();          ...      }     /* Other tests for testing whether the button and text box exists*/      public void testOnClickOfLoginButtonItShouldSendUserNameAndPassWordToLoginServiceForVerifying() {          String userName = &quot;rapidftr&quot;;          userNameEditText.setText(userName);          String passWord = &quot;rapidftr&quot;;          passWordEditText.setText(passWord);            LoginService loginService = EasyMock.createMock(LoginService.class);          EasyMock.expect(loginService.login(userName, passWord)).andReturn(true);          EasyMock.replay(loginService);            RapidFTRApplication.setLoginService(loginService);                   loginButton.performClick();                    EasyMock.verify(loginService);      } }
Does the service Locator Pattern Seem like a bad idea?
Ensure that your Mocking Framework is supported by the Dalvik VM
The problem with easy mock .... Mocking Concrete Classes
So can we clean up this mockery?
Split the code into 2 types: 1.Android Framework Dependent  2.Android Framework Independent
Over Engineering the code is Dangerous.
ActivityInstrumentationTestCase    
Continuous Integration
Android Debugger Bridge adb install, -r, standup-timer-app.apk
The Testing Application and the Application under test are deployed on the same device instance
Android Maven Plugin  &Ant Script     Android SDK Path Platform Used Device Instance to use
<plugin>                    <groupId>com.jayway.maven.plugins.android.generation2</groupId>                    <artifactId>maven-android-plugin</artifactId>                    <version>2.5.1</version>                    <configuration>                        <sdk>                             <path>android_sdk</path>                            <platform>7</platform>                        </sdk>                        <emulator>                            <avd>my_avd</avd>                        </emulator>                        <deleteConflictingFiles>                             true                        </deleteConflictingFiles>                        <undeployBeforeDeploy>true</undeployBeforeDeploy>                    </configuration>                    <extensions>true</extensions>    </plugin>
Independent parts of the build
     // start tracing to &quot;/sdcard/calc.trace&quot;     Debug.startMethodTracing(&quot;calc&quot;);     // ...     // stop tracing     Debug.stopMethodTracing();
 
 
Time for Demo
Ad

More Related Content

What's hot (19)

SwtBot: Unit Testing Made Easy
SwtBot: Unit Testing Made EasySwtBot: Unit Testing Made Easy
SwtBot: Unit Testing Made Easy
Ankit Goel
 
AngularJS for Beginners
AngularJS for BeginnersAngularJS for Beginners
AngularJS for Beginners
Edureka!
 
Developing and testing ajax components
Developing and testing ajax componentsDeveloping and testing ajax components
Developing and testing ajax components
Ignacio Coloma
 
Efficient JavaScript Unit Testing, May 2012
Efficient JavaScript Unit Testing, May 2012Efficient JavaScript Unit Testing, May 2012
Efficient JavaScript Unit Testing, May 2012
Hazem Saleh
 
Selenium Overview
Selenium OverviewSelenium Overview
Selenium Overview
Abhijeet Vaikar
 
Angular.js interview questions
Angular.js interview questionsAngular.js interview questions
Angular.js interview questions
codeandyou forums
 
21 android2 updated
21 android2 updated21 android2 updated
21 android2 updated
GhanaGTUG
 
Langkah-langkah Instalasi software untuk develop aplikasi android
Langkah-langkah Instalasi software untuk develop aplikasi androidLangkah-langkah Instalasi software untuk develop aplikasi android
Langkah-langkah Instalasi software untuk develop aplikasi android
Agus Haryanto
 
Angular js interview question answer for fresher
Angular js interview question answer for fresherAngular js interview question answer for fresher
Angular js interview question answer for fresher
Ravi Bhadauria
 
Passo a Passo para criar uma aplicação Móvel Híbrida
Passo a Passo para criar uma aplicação Móvel HíbridaPasso a Passo para criar uma aplicação Móvel Híbrida
Passo a Passo para criar uma aplicação Móvel Híbrida
Juliano Martins
 
Night Watch with QA
Night Watch with QANight Watch with QA
Night Watch with QA
Carsten Sandtner
 
High Performance JavaScript 2011
High Performance JavaScript 2011High Performance JavaScript 2011
High Performance JavaScript 2011
Nicholas Zakas
 
Desenvolvimento Mobile Híbrido
Desenvolvimento Mobile HíbridoDesenvolvimento Mobile Híbrido
Desenvolvimento Mobile Híbrido
Juliano Martins
 
Working Software Over Comprehensive Documentation
Working Software Over Comprehensive DocumentationWorking Software Over Comprehensive Documentation
Working Software Over Comprehensive Documentation
Andrii Dzynia
 
Angularjs interview questions and answers
Angularjs interview questions and answersAngularjs interview questions and answers
Angularjs interview questions and answers
Anil Singh
 
Use React Patterns to Build Large Scalable App
Use React Patterns to Build Large Scalable App Use React Patterns to Build Large Scalable App
Use React Patterns to Build Large Scalable App
Yao Nien Chung
 
Automate testing with behat, selenium, phantom js and nightwatch.js (5)
Automate testing with behat, selenium, phantom js and nightwatch.js (5)Automate testing with behat, selenium, phantom js and nightwatch.js (5)
Automate testing with behat, selenium, phantom js and nightwatch.js (5)
Faichi Solutions
 
Enhance react app with patterns - part 1: higher order component
Enhance react app with patterns - part 1: higher order componentEnhance react app with patterns - part 1: higher order component
Enhance react app with patterns - part 1: higher order component
Yao Nien Chung
 
Strutsjspservlet
Strutsjspservlet Strutsjspservlet
Strutsjspservlet
Sagar Nakul
 
SwtBot: Unit Testing Made Easy
SwtBot: Unit Testing Made EasySwtBot: Unit Testing Made Easy
SwtBot: Unit Testing Made Easy
Ankit Goel
 
AngularJS for Beginners
AngularJS for BeginnersAngularJS for Beginners
AngularJS for Beginners
Edureka!
 
Developing and testing ajax components
Developing and testing ajax componentsDeveloping and testing ajax components
Developing and testing ajax components
Ignacio Coloma
 
Efficient JavaScript Unit Testing, May 2012
Efficient JavaScript Unit Testing, May 2012Efficient JavaScript Unit Testing, May 2012
Efficient JavaScript Unit Testing, May 2012
Hazem Saleh
 
Angular.js interview questions
Angular.js interview questionsAngular.js interview questions
Angular.js interview questions
codeandyou forums
 
21 android2 updated
21 android2 updated21 android2 updated
21 android2 updated
GhanaGTUG
 
Langkah-langkah Instalasi software untuk develop aplikasi android
Langkah-langkah Instalasi software untuk develop aplikasi androidLangkah-langkah Instalasi software untuk develop aplikasi android
Langkah-langkah Instalasi software untuk develop aplikasi android
Agus Haryanto
 
Angular js interview question answer for fresher
Angular js interview question answer for fresherAngular js interview question answer for fresher
Angular js interview question answer for fresher
Ravi Bhadauria
 
Passo a Passo para criar uma aplicação Móvel Híbrida
Passo a Passo para criar uma aplicação Móvel HíbridaPasso a Passo para criar uma aplicação Móvel Híbrida
Passo a Passo para criar uma aplicação Móvel Híbrida
Juliano Martins
 
High Performance JavaScript 2011
High Performance JavaScript 2011High Performance JavaScript 2011
High Performance JavaScript 2011
Nicholas Zakas
 
Desenvolvimento Mobile Híbrido
Desenvolvimento Mobile HíbridoDesenvolvimento Mobile Híbrido
Desenvolvimento Mobile Híbrido
Juliano Martins
 
Working Software Over Comprehensive Documentation
Working Software Over Comprehensive DocumentationWorking Software Over Comprehensive Documentation
Working Software Over Comprehensive Documentation
Andrii Dzynia
 
Angularjs interview questions and answers
Angularjs interview questions and answersAngularjs interview questions and answers
Angularjs interview questions and answers
Anil Singh
 
Use React Patterns to Build Large Scalable App
Use React Patterns to Build Large Scalable App Use React Patterns to Build Large Scalable App
Use React Patterns to Build Large Scalable App
Yao Nien Chung
 
Automate testing with behat, selenium, phantom js and nightwatch.js (5)
Automate testing with behat, selenium, phantom js and nightwatch.js (5)Automate testing with behat, selenium, phantom js and nightwatch.js (5)
Automate testing with behat, selenium, phantom js and nightwatch.js (5)
Faichi Solutions
 
Enhance react app with patterns - part 1: higher order component
Enhance react app with patterns - part 1: higher order componentEnhance react app with patterns - part 1: higher order component
Enhance react app with patterns - part 1: higher order component
Yao Nien Chung
 
Strutsjspservlet
Strutsjspservlet Strutsjspservlet
Strutsjspservlet
Sagar Nakul
 

Viewers also liked (6)

Social Networking
Social NetworkingSocial Networking
Social Networking
guest79e62de
 
Social Networking
Social NetworkingSocial Networking
Social Networking
Debarghya Chanda
 
Corey King
Corey KingCorey King
Corey King
Jack ver Mieten
 
Introduction to Social Media
Introduction to Social MediaIntroduction to Social Media
Introduction to Social Media
Kelsey Ruger
 
Social Networking Presentation
Social Networking PresentationSocial Networking Presentation
Social Networking Presentation
Anusorn Kansap
 
Social networking PPT
Social networking PPTSocial networking PPT
Social networking PPT
varun0912
 
Introduction to Social Media
Introduction to Social MediaIntroduction to Social Media
Introduction to Social Media
Kelsey Ruger
 
Social Networking Presentation
Social Networking PresentationSocial Networking Presentation
Social Networking Presentation
Anusorn Kansap
 
Social networking PPT
Social networking PPTSocial networking PPT
Social networking PPT
varun0912
 
Ad

Similar to Android the Agile way (20)

Strutsjspservlet
Strutsjspservlet Strutsjspservlet
Strutsjspservlet
Sagar Nakul
 
Struts,Jsp,Servlet
Struts,Jsp,ServletStruts,Jsp,Servlet
Struts,Jsp,Servlet
dasguptahirak
 
Migrating from Struts 1 to Struts 2
Migrating from Struts 1 to Struts 2Migrating from Struts 1 to Struts 2
Migrating from Struts 1 to Struts 2
Matt Raible
 
Code Quality Practice and Tools
Code Quality Practice and ToolsCode Quality Practice and Tools
Code Quality Practice and Tools
Bob Paulin
 
Jsfsunum
JsfsunumJsfsunum
Jsfsunum
cagataycivici
 
Migration testing framework
Migration testing frameworkMigration testing framework
Migration testing framework
IndicThreads
 
jBPM5 in action - a quickstart for developers
jBPM5 in action - a quickstart for developersjBPM5 in action - a quickstart for developers
jBPM5 in action - a quickstart for developers
Kris Verlaenen
 
Developing in android
Developing in androidDeveloping in android
Developing in android
Christopher Decker
 
Going web native
Going web nativeGoing web native
Going web native
Marcus Hellberg
 
ActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group PresentationActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group Presentation
ipolevoy
 
Introduction to JSF
Introduction toJSFIntroduction toJSF
Introduction to JSF
SoftServe
 
Automated Testing Of Web Applications Using XML
Automated  Testing Of  Web  Applications Using  XMLAutomated  Testing Of  Web  Applications Using  XML
Automated Testing Of Web Applications Using XML
diongillard
 
J Query Presentation
J Query PresentationJ Query Presentation
J Query Presentation
Vishal Kumar
 
Building apps for multiple devices
Building apps for multiple devicesBuilding apps for multiple devices
Building apps for multiple devices
Terry Ryan
 
Alfresco Forms Service Deep Dive
Alfresco Forms Service Deep DiveAlfresco Forms Service Deep Dive
Alfresco Forms Service Deep Dive
Alfresco Software
 
Windows Azure - Cloud Service Development Best Practices
Windows Azure - Cloud Service Development Best PracticesWindows Azure - Cloud Service Development Best Practices
Windows Azure - Cloud Service Development Best Practices
Sriram Krishnan
 
Introduction To Google Android (Ft Rohan Bomle)
Introduction To Google Android (Ft Rohan Bomle)Introduction To Google Android (Ft Rohan Bomle)
Introduction To Google Android (Ft Rohan Bomle)
Fafadia Tech
 
Vaadin DevDay 2017 - DI your UI
Vaadin DevDay 2017 - DI your UIVaadin DevDay 2017 - DI your UI
Vaadin DevDay 2017 - DI your UI
Peter Lehto
 
Xam expertday
Xam expertdayXam expertday
Xam expertday
Codrina Merigo
 
1 aleksandr gritsevski - attd example using
1   aleksandr gritsevski - attd example using1   aleksandr gritsevski - attd example using
1 aleksandr gritsevski - attd example using
Ievgenii Katsan
 
Strutsjspservlet
Strutsjspservlet Strutsjspservlet
Strutsjspservlet
Sagar Nakul
 
Migrating from Struts 1 to Struts 2
Migrating from Struts 1 to Struts 2Migrating from Struts 1 to Struts 2
Migrating from Struts 1 to Struts 2
Matt Raible
 
Code Quality Practice and Tools
Code Quality Practice and ToolsCode Quality Practice and Tools
Code Quality Practice and Tools
Bob Paulin
 
Migration testing framework
Migration testing frameworkMigration testing framework
Migration testing framework
IndicThreads
 
jBPM5 in action - a quickstart for developers
jBPM5 in action - a quickstart for developersjBPM5 in action - a quickstart for developers
jBPM5 in action - a quickstart for developers
Kris Verlaenen
 
ActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group PresentationActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group Presentation
ipolevoy
 
Introduction to JSF
Introduction toJSFIntroduction toJSF
Introduction to JSF
SoftServe
 
Automated Testing Of Web Applications Using XML
Automated  Testing Of  Web  Applications Using  XMLAutomated  Testing Of  Web  Applications Using  XML
Automated Testing Of Web Applications Using XML
diongillard
 
J Query Presentation
J Query PresentationJ Query Presentation
J Query Presentation
Vishal Kumar
 
Building apps for multiple devices
Building apps for multiple devicesBuilding apps for multiple devices
Building apps for multiple devices
Terry Ryan
 
Alfresco Forms Service Deep Dive
Alfresco Forms Service Deep DiveAlfresco Forms Service Deep Dive
Alfresco Forms Service Deep Dive
Alfresco Software
 
Windows Azure - Cloud Service Development Best Practices
Windows Azure - Cloud Service Development Best PracticesWindows Azure - Cloud Service Development Best Practices
Windows Azure - Cloud Service Development Best Practices
Sriram Krishnan
 
Introduction To Google Android (Ft Rohan Bomle)
Introduction To Google Android (Ft Rohan Bomle)Introduction To Google Android (Ft Rohan Bomle)
Introduction To Google Android (Ft Rohan Bomle)
Fafadia Tech
 
Vaadin DevDay 2017 - DI your UI
Vaadin DevDay 2017 - DI your UIVaadin DevDay 2017 - DI your UI
Vaadin DevDay 2017 - DI your UI
Peter Lehto
 
1 aleksandr gritsevski - attd example using
1   aleksandr gritsevski - attd example using1   aleksandr gritsevski - attd example using
1 aleksandr gritsevski - attd example using
Ievgenii Katsan
 
Ad

Recently uploaded (20)

On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...
On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...
On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...
Ivano Malavolta
 
Cybersecurity Threat Vectors and Mitigation
Cybersecurity Threat Vectors and MitigationCybersecurity Threat Vectors and Mitigation
Cybersecurity Threat Vectors and Mitigation
VICTOR MAESTRE RAMIREZ
 
Slack like a pro: strategies for 10x engineering teams
Slack like a pro: strategies for 10x engineering teamsSlack like a pro: strategies for 10x engineering teams
Slack like a pro: strategies for 10x engineering teams
Nacho Cougil
 
Agentic Automation - Delhi UiPath Community Meetup
Agentic Automation - Delhi UiPath Community MeetupAgentic Automation - Delhi UiPath Community Meetup
Agentic Automation - Delhi UiPath Community Meetup
Manoj Batra (1600 + Connections)
 
Shoehorning dependency injection into a FP language, what does it take?
Shoehorning dependency injection into a FP language, what does it take?Shoehorning dependency injection into a FP language, what does it take?
Shoehorning dependency injection into a FP language, what does it take?
Eric Torreborre
 
Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...
Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...
Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...
Safe Software
 
Unlocking Generative AI in your Web Apps
Unlocking Generative AI in your Web AppsUnlocking Generative AI in your Web Apps
Unlocking Generative AI in your Web Apps
Maximiliano Firtman
 
May Patch Tuesday
May Patch TuesdayMay Patch Tuesday
May Patch Tuesday
Ivanti
 
AI-proof your career by Olivier Vroom and David WIlliamson
AI-proof your career by Olivier Vroom and David WIlliamsonAI-proof your career by Olivier Vroom and David WIlliamson
AI-proof your career by Olivier Vroom and David WIlliamson
UXPA Boston
 
Enterprise Integration Is Dead! Long Live AI-Driven Integration with Apache C...
Enterprise Integration Is Dead! Long Live AI-Driven Integration with Apache C...Enterprise Integration Is Dead! Long Live AI-Driven Integration with Apache C...
Enterprise Integration Is Dead! Long Live AI-Driven Integration with Apache C...
Markus Eisele
 
Top 5 Benefits of Using Molybdenum Rods in Industrial Applications.pptx
Top 5 Benefits of Using Molybdenum Rods in Industrial Applications.pptxTop 5 Benefits of Using Molybdenum Rods in Industrial Applications.pptx
Top 5 Benefits of Using Molybdenum Rods in Industrial Applications.pptx
mkubeusa
 
AI 3-in-1: Agents, RAG, and Local Models - Brent Laster
AI 3-in-1: Agents, RAG, and Local Models - Brent LasterAI 3-in-1: Agents, RAG, and Local Models - Brent Laster
AI 3-in-1: Agents, RAG, and Local Models - Brent Laster
All Things Open
 
Building the Customer Identity Community, Together.pdf
Building the Customer Identity Community, Together.pdfBuilding the Customer Identity Community, Together.pdf
Building the Customer Identity Community, Together.pdf
Cheryl Hung
 
Optima Cyber - Maritime Cyber Security - MSSP Services - Manolis Sfakianakis ...
Optima Cyber - Maritime Cyber Security - MSSP Services - Manolis Sfakianakis ...Optima Cyber - Maritime Cyber Security - MSSP Services - Manolis Sfakianakis ...
Optima Cyber - Maritime Cyber Security - MSSP Services - Manolis Sfakianakis ...
Mike Mingos
 
RTP Over QUIC: An Interesting Opportunity Or Wasted Time?
RTP Over QUIC: An Interesting Opportunity Or Wasted Time?RTP Over QUIC: An Interesting Opportunity Or Wasted Time?
RTP Over QUIC: An Interesting Opportunity Or Wasted Time?
Lorenzo Miniero
 
Com fer un pla de gestió de dades amb l'eiNa DMP (en anglès)
Com fer un pla de gestió de dades amb l'eiNa DMP (en anglès)Com fer un pla de gestió de dades amb l'eiNa DMP (en anglès)
Com fer un pla de gestió de dades amb l'eiNa DMP (en anglès)
CSUC - Consorci de Serveis Universitaris de Catalunya
 
Zilliz Cloud Monthly Technical Review: May 2025
Zilliz Cloud Monthly Technical Review: May 2025Zilliz Cloud Monthly Technical Review: May 2025
Zilliz Cloud Monthly Technical Review: May 2025
Zilliz
 
The No-Code Way to Build a Marketing Team with One AI Agent (Download the n8n...
The No-Code Way to Build a Marketing Team with One AI Agent (Download the n8n...The No-Code Way to Build a Marketing Team with One AI Agent (Download the n8n...
The No-Code Way to Build a Marketing Team with One AI Agent (Download the n8n...
SOFTTECHHUB
 
Q1 2025 Dropbox Earnings and Investor Presentation
Q1 2025 Dropbox Earnings and Investor PresentationQ1 2025 Dropbox Earnings and Investor Presentation
Q1 2025 Dropbox Earnings and Investor Presentation
Dropbox
 
AI Agents at Work: UiPath, Maestro & the Future of Documents
AI Agents at Work: UiPath, Maestro & the Future of DocumentsAI Agents at Work: UiPath, Maestro & the Future of Documents
AI Agents at Work: UiPath, Maestro & the Future of Documents
UiPathCommunity
 
On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...
On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...
On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...
Ivano Malavolta
 
Cybersecurity Threat Vectors and Mitigation
Cybersecurity Threat Vectors and MitigationCybersecurity Threat Vectors and Mitigation
Cybersecurity Threat Vectors and Mitigation
VICTOR MAESTRE RAMIREZ
 
Slack like a pro: strategies for 10x engineering teams
Slack like a pro: strategies for 10x engineering teamsSlack like a pro: strategies for 10x engineering teams
Slack like a pro: strategies for 10x engineering teams
Nacho Cougil
 
Shoehorning dependency injection into a FP language, what does it take?
Shoehorning dependency injection into a FP language, what does it take?Shoehorning dependency injection into a FP language, what does it take?
Shoehorning dependency injection into a FP language, what does it take?
Eric Torreborre
 
Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...
Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...
Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...
Safe Software
 
Unlocking Generative AI in your Web Apps
Unlocking Generative AI in your Web AppsUnlocking Generative AI in your Web Apps
Unlocking Generative AI in your Web Apps
Maximiliano Firtman
 
May Patch Tuesday
May Patch TuesdayMay Patch Tuesday
May Patch Tuesday
Ivanti
 
AI-proof your career by Olivier Vroom and David WIlliamson
AI-proof your career by Olivier Vroom and David WIlliamsonAI-proof your career by Olivier Vroom and David WIlliamson
AI-proof your career by Olivier Vroom and David WIlliamson
UXPA Boston
 
Enterprise Integration Is Dead! Long Live AI-Driven Integration with Apache C...
Enterprise Integration Is Dead! Long Live AI-Driven Integration with Apache C...Enterprise Integration Is Dead! Long Live AI-Driven Integration with Apache C...
Enterprise Integration Is Dead! Long Live AI-Driven Integration with Apache C...
Markus Eisele
 
Top 5 Benefits of Using Molybdenum Rods in Industrial Applications.pptx
Top 5 Benefits of Using Molybdenum Rods in Industrial Applications.pptxTop 5 Benefits of Using Molybdenum Rods in Industrial Applications.pptx
Top 5 Benefits of Using Molybdenum Rods in Industrial Applications.pptx
mkubeusa
 
AI 3-in-1: Agents, RAG, and Local Models - Brent Laster
AI 3-in-1: Agents, RAG, and Local Models - Brent LasterAI 3-in-1: Agents, RAG, and Local Models - Brent Laster
AI 3-in-1: Agents, RAG, and Local Models - Brent Laster
All Things Open
 
Building the Customer Identity Community, Together.pdf
Building the Customer Identity Community, Together.pdfBuilding the Customer Identity Community, Together.pdf
Building the Customer Identity Community, Together.pdf
Cheryl Hung
 
Optima Cyber - Maritime Cyber Security - MSSP Services - Manolis Sfakianakis ...
Optima Cyber - Maritime Cyber Security - MSSP Services - Manolis Sfakianakis ...Optima Cyber - Maritime Cyber Security - MSSP Services - Manolis Sfakianakis ...
Optima Cyber - Maritime Cyber Security - MSSP Services - Manolis Sfakianakis ...
Mike Mingos
 
RTP Over QUIC: An Interesting Opportunity Or Wasted Time?
RTP Over QUIC: An Interesting Opportunity Or Wasted Time?RTP Over QUIC: An Interesting Opportunity Or Wasted Time?
RTP Over QUIC: An Interesting Opportunity Or Wasted Time?
Lorenzo Miniero
 
Zilliz Cloud Monthly Technical Review: May 2025
Zilliz Cloud Monthly Technical Review: May 2025Zilliz Cloud Monthly Technical Review: May 2025
Zilliz Cloud Monthly Technical Review: May 2025
Zilliz
 
The No-Code Way to Build a Marketing Team with One AI Agent (Download the n8n...
The No-Code Way to Build a Marketing Team with One AI Agent (Download the n8n...The No-Code Way to Build a Marketing Team with One AI Agent (Download the n8n...
The No-Code Way to Build a Marketing Team with One AI Agent (Download the n8n...
SOFTTECHHUB
 
Q1 2025 Dropbox Earnings and Investor Presentation
Q1 2025 Dropbox Earnings and Investor PresentationQ1 2025 Dropbox Earnings and Investor Presentation
Q1 2025 Dropbox Earnings and Investor Presentation
Dropbox
 
AI Agents at Work: UiPath, Maestro & the Future of Documents
AI Agents at Work: UiPath, Maestro & the Future of DocumentsAI Agents at Work: UiPath, Maestro & the Future of Documents
AI Agents at Work: UiPath, Maestro & the Future of Documents
UiPathCommunity
 

Android the Agile way

  • 1. Android - A Practitioner's take on doing it The Agile Way Thiyagu, Krishna, Soundar, Ashwin
  • 2. Can we run an Android Application Development Project the Agile Way?
  • 3. As a practitioner, what are the effects of the Technical Stack on the process?
  • 4. How can I follow the 'Extreme Programming' Practices?
  • 5. As ThoughtWorks why can we expect Android Projects?
  • 6. Enterprises are looking for a Mobile Presence
  • 8. Then Why a native app over a Web App?
  • 9. Native Applications are much more enabled than a web application 
  • 12. Steep increase in the user  base
  • 13. Lots of new Vendors
  • 14. So as ThoughtWorks, why have this capability?
  • 15. We want to build something cool !
  • 17. Why is this not just a Java Project?
  • 18. When you’re working with Android, it sure feels like you are writing regular old standard Java SE code
  • 20. So what is the difference? Its the runtime!!!!
  • 21. In the Android platform, we have the Dalvik Runtime which is specially designed for devices that are contrained in terms of memory, speed and battery power.
  • 22. Dalvik is not even a Java Virtual Machine at all!
  • 23. It does not understand byte code. Instead...
  • 25. Everything you need as a programmer is available in the Dalvik implementation of Java
  • 26. Why do I mention all this?
  • 27. Because you might want to use something like JMock to mock your dependencies when writing your unit tests
  • 28. Its not a full Java SE implementation
  • 29.  
  • 31. The Application to be tested must/needs to run on a device instance
  • 32. Any entity that aims to test the Android Application must be on the device instance as well
  • 33. So the test in itself is Another Application!
  • 34. Android Testing and Instrumentation
  • 35. public class LoginActivity extends Activity       /* declarations of states*/          @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.login);              loginButton = (Button) findViewById(R.id.login_login_button);         usernameText = (TextView) findViewById(R.id.user_name_input);         passwordText = (TextView)findViewById(R.id.pass_word_input);                   loginButton.setOnClickListener(new OnClickListener() {              public void onClick(View v) {                 String username = usernameText.getText().toString();                 String password = passwordText.getText().toString();                 MyApplication.getLoginService().login(username, password);             }         });     } }
  • 36. public class LoginActivityTest extends ActivityUnitTestCase<LoginActivity> {     public LoginActivityTest() {         super(LoginActivity.class);     }       protected void setUp() throws Exception {         super.setUp();         ...     }    /* Other tests for testing whether the button and text box exists*/     public void testOnClickOfLoginButtonItShouldSendUserNameAndPassWordToLoginServiceForVerifying() {          String userName = &quot;rapidftr&quot;;         userNameEditText.setText(userName);          String passWord = &quot;rapidftr&quot;;         passWordEditText.setText(passWord);           LoginService loginService = EasyMock.createMock(LoginService.class);         EasyMock.expect(loginService.login(userName, passWord)).andReturn(true);         EasyMock.replay(loginService);           RapidFTRApplication.setLoginService(loginService);                  loginButton.performClick();                  EasyMock.verify(loginService);      } }
  • 37. Does the service Locator Pattern Seem like a bad idea?
  • 38. Ensure that your Mocking Framework is supported by the Dalvik VM
  • 39. The problem with easy mock .... Mocking Concrete Classes
  • 40. So can we clean up this mockery?
  • 41. Split the code into 2 types: 1.Android Framework Dependent  2.Android Framework Independent
  • 42. Over Engineering the code is Dangerous.
  • 45. Android Debugger Bridge adb install, -r, standup-timer-app.apk
  • 46. The Testing Application and the Application under test are deployed on the same device instance
  • 47. Android Maven Plugin  &Ant Script     Android SDK Path Platform Used Device Instance to use
  • 48. <plugin>                    <groupId>com.jayway.maven.plugins.android.generation2</groupId>                    <artifactId>maven-android-plugin</artifactId>                    <version>2.5.1</version>                    <configuration>                        <sdk>                             <path>android_sdk</path>                            <platform>7</platform>                        </sdk>                        <emulator>                            <avd>my_avd</avd>                        </emulator>                        <deleteConflictingFiles>                             true                        </deleteConflictingFiles>                        <undeployBeforeDeploy>true</undeployBeforeDeploy>                    </configuration>                    <extensions>true</extensions>    </plugin>
  • 49. Independent parts of the build
  • 50.     // start tracing to &quot;/sdcard/calc.trace&quot;     Debug.startMethodTracing(&quot;calc&quot;);     // ...     // stop tracing     Debug.stopMethodTracing();
  • 51.  
  • 52.  
  翻译: