SlideShare uma empresa Scribd logo
1 de 29
Mobile developer is
Software developer
eBuddy
• 2003, Chat and XMS
• AIM, Facebook, GTalk, ICQ, MSN and
  Yahoo
• iOS, Android, BB, Symbian, J2ME, WP,
  Web
• 30 million monthly unique users
• 26 different nationalities
• We are hiring

Company
Projects Setup
•   Maven or Eclipse
•   Checkout
•   Import
•   (Easy tune)
•   Profit!




Import
Build Automation
•   Ant, antenna, bb-ant-tools
•   Maven
•   Proguard
•   Release auto checks
Build Automation Concepts
• Checkout
• Run
• Profit
Ant Hints
Don’t change script behavior based on property value:
<if>
    <equals arg1="${is-building-nna}" arg2="true"/>
    <then>
        <unjar src="${napi.lib}" dest="tmp/classes"/>
    </then>
</if>

Much better:
<target name="normal build" />

<target name="nna build" />
Maven Hints
Dependencies
• Artifactory, Ivy
• SDKs
Open Source
• Fork
• Fix
• Pull request
Source Control Hints
• Trunk, release and spike
  branches
• Commit frequently, commit
  smart
• Behavior commit comments
Continuous Integration
• TeamCity
• 9 agents – Linux, Windows,
  Mac
• Trunk, Beta and Release
• Pin to deploy in TC
One of the Best Mobile Team Member
• BE developer is part of mobile team
   + High quality standrards
   + Another process vision
   + Person, who can handle BE questions,
   changes
   - He will get bored soon
Code
•   Clean, Testable code
•   Sonar for project health
•   No preprocessor
•   No pre-optimization
•   Activities are only windows
    from your app for user
    interaction
Code Review and Pair Programming
• Pair programming
• Code review
• Design sessions
Unit Tests
@Test
public void showWelcomeMessageWhenReceivedPushDestination() {
         chatPushControl.registrationSuccess("id");

         verify(control).showWelcomeMessageIfNecessary();
}

@Test
public void sendDestinationAndUpdateAccountWhenGetPushRegistration() {
         final String id = "id";

         chatPushControl.registrationSuccess(id);

         verifySendPushSettingsAction(id, PushTimeout.LONG.getValue());
         verify(masterAccount).setPushDest(id);
}
@RunWith(RobolectricTestRunner.class)
public class ChatActivityTest {
    @Before
    public void setUp() {
        activity = new ChatActivity();
        activity.onCreate(null);

        sendImageButton =
            (ImageButton) activity.findViewById(R.id.chatinput_send_image);
    }

    @Test
    public void removeAttachmentButtonForXMS() throws Exception {
        Contact contact = new Contact(IMAccountFactory.stringToAccount(“XMS"),
            "userid");
        when(chatControl.getCurrentChatContact()).thenReturn(contact);
        activity.onResume();
        assertEquals("Send image button should be invisible",
            View.GONE, sendImageButton.getVisibility());
    }
}
Unit Tests Principes
• Quick feedback
• Robolectric,
  microemulator
• Emulator/simulator
  tests
Dependency Injection
• Separate creation and
  usage
• RoboGuice, Dagger
RoboGuice Example
import javax.inject.Inject;

@ContentView(R.layout.startup)
public class StartupActivity extends SigninActivity implements OnClickListener {

         @Inject private Control control;
         @Inject private FlurryLogger flurry;

         @Override     protected void onStart() {
                     super.onStart();
                     flurry.onStartSession(this);
                     flurry.onEvent(EventType.ACT_STARTUP)
         }
}
Acceptance Tests
• Automate regression
• Sikuli, Robotium
• Monkey runner
#### StartGroupConversation###

#note: contacts should be received alphabetically
def StartGroupConversation(contacts):
         hitMenuItem("start_group_item.png");
         for x in contacts:
                   scrollDown(x);
                   type(Key.F9);

         hitMenuItem("start_group_conversation.png");
         wait("group_created.png", 30);



##### enter an item in the menu (INSERT)
def hitMenuItem(image):
         type(Key.INSERT);
         scrollDown(image); type(Key.F9);
Analytics
• Flurry, Google analytics
• Bugsense
• DataWareHouse
Feedback
• Eat your own dog food
• UX testing
• Zendesk
Spikes
• Clear outcome
• Timeboxed
• Presentable
Personal Projects
• 2 personal projects
• One sprint duration
• Presented on company
  meeting
Conclusion
Keywords
• maven, ant, gradle, bb-ant-tools, proguard, antenna
• junit, testng, fest assert, mockito, jmockit, powermock
  robolectric, microemulator, robotium, j2meunit, sikuli,
  monkeyrunner
• roboguice, androidannotations, dagger
  microlog, jarrut, lwuit, advanced bb ui, guava,
  otto, actionbarsherlock, viepageindicator, disklrucache
• jenkins, teamcity, bamboo, sonar, moose
• intellij idea, eclipse, eclipse code formatter plugin
Trivia
• How many nationalities are in eBuddy?
• What is the name of framework that we are using for
  testing Android on desktop?
• What is the duration of typical personal project in the
  company?

                                         @jack_martynov
                               eugen.martynov@gmail.com

Mais conteúdo relacionado

Mais procurados (7)

 xctest
 xctest xctest
 xctest
 
MCE^3 - Felix Krause - Continuous Delivery for Mobile Apps Using Fastlane
MCE^3 - Felix Krause - Continuous Delivery for Mobile Apps Using FastlaneMCE^3 - Felix Krause - Continuous Delivery for Mobile Apps Using Fastlane
MCE^3 - Felix Krause - Continuous Delivery for Mobile Apps Using Fastlane
 
Intro to Retrofit 2 and RxJava2
Intro to Retrofit 2 and RxJava2Intro to Retrofit 2 and RxJava2
Intro to Retrofit 2 and RxJava2
 
Android Develpment vol. 2, MFF UK, 2015
Android Develpment vol. 2, MFF UK, 2015Android Develpment vol. 2, MFF UK, 2015
Android Develpment vol. 2, MFF UK, 2015
 
AngularJS - Overcoming performance issues. Limits.
AngularJS - Overcoming performance issues. Limits.AngularJS - Overcoming performance issues. Limits.
AngularJS - Overcoming performance issues. Limits.
 
Java GUI Toolkits - Swing vs. SWT vs. Jambi
Java GUI Toolkits - Swing vs. SWT vs. JambiJava GUI Toolkits - Swing vs. SWT vs. Jambi
Java GUI Toolkits - Swing vs. SWT vs. Jambi
 
React Nativeの光と闇
React Nativeの光と闇React Nativeの光と闇
React Nativeの光と闇
 

Destaque

Freelancer new
Freelancer newFreelancer new
Freelancer new
MariaGubko
 
Creating windows store java script apps
Creating windows store java script appsCreating windows store java script apps
Creating windows store java script apps
Eugene Zharkov
 
Organisasi belajar mendunia
Organisasi belajar menduniaOrganisasi belajar mendunia
Organisasi belajar mendunia
Zulrahmat Togala
 
IT Brunch - SpecFlow and Gherkin by Example
IT Brunch - SpecFlow and Gherkin by ExampleIT Brunch - SpecFlow and Gherkin by Example
IT Brunch - SpecFlow and Gherkin by Example
Dmytro Mindra
 

Destaque (20)

Freelancer new
Freelancer newFreelancer new
Freelancer new
 
Creating windows store java script apps
Creating windows store java script appsCreating windows store java script apps
Creating windows store java script apps
 
IT Brunch - Backendless
IT Brunch - BackendlessIT Brunch - Backendless
IT Brunch - Backendless
 
Разрабатываем качественное Windows 8 приложение
Разрабатываем качественное Windows 8 приложениеРазрабатываем качественное Windows 8 приложение
Разрабатываем качественное Windows 8 приложение
 
Android Brown Bag Lunch - DroidconNL overview
Android Brown Bag Lunch - DroidconNL overviewAndroid Brown Bag Lunch - DroidconNL overview
Android Brown Bag Lunch - DroidconNL overview
 
Animals test
Animals testAnimals test
Animals test
 
Organisasi belajar mendunia
Organisasi belajar menduniaOrganisasi belajar mendunia
Organisasi belajar mendunia
 
Facebook Stetho
Facebook StethoFacebook Stetho
Facebook Stetho
 
My summer experience with the future
My summer experience with the futureMy summer experience with the future
My summer experience with the future
 
Robolectric Adventure
Robolectric AdventureRobolectric Adventure
Robolectric Adventure
 
ضياء
ضياءضياء
ضياء
 
Template project
Template projectTemplate project
Template project
 
Manual de procedimientos surtidora S&R
Manual de procedimientos surtidora S&RManual de procedimientos surtidora S&R
Manual de procedimientos surtidora S&R
 
IT Brunch - SpecFlow and Gherkin by Example
IT Brunch - SpecFlow and Gherkin by ExampleIT Brunch - SpecFlow and Gherkin by Example
IT Brunch - SpecFlow and Gherkin by Example
 
XP Days UA Pecha kucha
XP Days UA Pecha kuchaXP Days UA Pecha kucha
XP Days UA Pecha kucha
 
Slideshow.thai yoga bodywork memphis
Slideshow.thai yoga bodywork memphisSlideshow.thai yoga bodywork memphis
Slideshow.thai yoga bodywork memphis
 
Kajian teoritis pendekatan saintifik
Kajian teoritis pendekatan saintifikKajian teoritis pendekatan saintifik
Kajian teoritis pendekatan saintifik
 
Flow
FlowFlow
Flow
 
Robolectric v2
Robolectric v2Robolectric v2
Robolectric v2
 
DI with Dagger2
DI with Dagger2DI with Dagger2
DI with Dagger2
 

Semelhante a Mobile developer is Software developer

Testing and Building Android
Testing and Building AndroidTesting and Building Android
Testing and Building Android
Droidcon Berlin
 
Top100summit 谷歌-scott-improve your automated web application testing
Top100summit  谷歌-scott-improve your automated web application testingTop100summit  谷歌-scott-improve your automated web application testing
Top100summit 谷歌-scott-improve your automated web application testing
drewz lin
 
Using Selenium to Improve a Teams Development Cycle
Using Selenium to Improve a Teams Development CycleUsing Selenium to Improve a Teams Development Cycle
Using Selenium to Improve a Teams Development Cycle
seleniumconf
 

Semelhante a Mobile developer is Software developer (20)

Protractor Tutorial Quality in Agile 2015
Protractor Tutorial Quality in Agile 2015Protractor Tutorial Quality in Agile 2015
Protractor Tutorial Quality in Agile 2015
 
Testing Ext JS and Sencha Touch
Testing Ext JS and Sencha TouchTesting Ext JS and Sencha Touch
Testing Ext JS and Sencha Touch
 
Jenkins CI for MacDevOps
Jenkins CI for MacDevOpsJenkins CI for MacDevOps
Jenkins CI for MacDevOps
 
React Native: The Development Flow
React Native: The Development FlowReact Native: The Development Flow
React Native: The Development Flow
 
Rockstar Android Testing (Mobile TechCon Munich 2014)
Rockstar Android Testing (Mobile TechCon Munich 2014)Rockstar Android Testing (Mobile TechCon Munich 2014)
Rockstar Android Testing (Mobile TechCon Munich 2014)
 
Android Building, Testing and reversing
Android Building, Testing and reversingAndroid Building, Testing and reversing
Android Building, Testing and reversing
 
2012 star west-t10
2012 star west-t102012 star west-t10
2012 star west-t10
 
Testing and Building Android
Testing and Building AndroidTesting and Building Android
Testing and Building Android
 
Kirin - Making Single Page Web Apps with a Native UI
Kirin - Making Single Page Web Apps with a Native UIKirin - Making Single Page Web Apps with a Native UI
Kirin - Making Single Page Web Apps with a Native UI
 
Rapid Testing, Rapid Development
Rapid Testing, Rapid DevelopmentRapid Testing, Rapid Development
Rapid Testing, Rapid Development
 
Testing ASP.NET - Progressive.NET
Testing ASP.NET - Progressive.NETTesting ASP.NET - Progressive.NET
Testing ASP.NET - Progressive.NET
 
Top100summit 谷歌-scott-improve your automated web application testing
Top100summit  谷歌-scott-improve your automated web application testingTop100summit  谷歌-scott-improve your automated web application testing
Top100summit 谷歌-scott-improve your automated web application testing
 
Implementing Quality on a Java Project
Implementing Quality on a Java ProjectImplementing Quality on a Java Project
Implementing Quality on a Java Project
 
Selendroid - Selenium for Android
Selendroid - Selenium for AndroidSelendroid - Selenium for Android
Selendroid - Selenium for Android
 
Cross Platform Appium Tests: How To
Cross Platform Appium Tests: How ToCross Platform Appium Tests: How To
Cross Platform Appium Tests: How To
 
Mobile Developers Talks: Delve Mobile
Mobile Developers Talks: Delve MobileMobile Developers Talks: Delve Mobile
Mobile Developers Talks: Delve Mobile
 
Android 101 - Introduction to Android Development
Android 101 - Introduction to Android DevelopmentAndroid 101 - Introduction to Android Development
Android 101 - Introduction to Android Development
 
Using Selenium to Improve a Teams Development Cycle
Using Selenium to Improve a Teams Development CycleUsing Selenium to Improve a Teams Development Cycle
Using Selenium to Improve a Teams Development Cycle
 
Web UI test automation instruments
Web UI test automation instrumentsWeb UI test automation instruments
Web UI test automation instruments
 
Dependency Injection in .NET applications
Dependency Injection in .NET applicationsDependency Injection in .NET applications
Dependency Injection in .NET applications
 

Último

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Último (20)

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 

Mobile developer is Software developer

  • 2. eBuddy • 2003, Chat and XMS • AIM, Facebook, GTalk, ICQ, MSN and Yahoo • iOS, Android, BB, Symbian, J2ME, WP, Web • 30 million monthly unique users • 26 different nationalities • We are hiring Company
  • 3. Projects Setup • Maven or Eclipse • Checkout • Import • (Easy tune) • Profit! Import
  • 4. Build Automation • Ant, antenna, bb-ant-tools • Maven • Proguard • Release auto checks
  • 5. Build Automation Concepts • Checkout • Run • Profit
  • 6. Ant Hints Don’t change script behavior based on property value: <if> <equals arg1="${is-building-nna}" arg2="true"/> <then> <unjar src="${napi.lib}" dest="tmp/classes"/> </then> </if> Much better: <target name="normal build" /> <target name="nna build" />
  • 9. Open Source • Fork • Fix • Pull request
  • 10. Source Control Hints • Trunk, release and spike branches • Commit frequently, commit smart • Behavior commit comments
  • 11. Continuous Integration • TeamCity • 9 agents – Linux, Windows, Mac • Trunk, Beta and Release • Pin to deploy in TC
  • 12. One of the Best Mobile Team Member • BE developer is part of mobile team + High quality standrards + Another process vision + Person, who can handle BE questions, changes - He will get bored soon
  • 13. Code • Clean, Testable code • Sonar for project health • No preprocessor • No pre-optimization • Activities are only windows from your app for user interaction
  • 14. Code Review and Pair Programming • Pair programming • Code review • Design sessions
  • 16. @Test public void showWelcomeMessageWhenReceivedPushDestination() { chatPushControl.registrationSuccess("id"); verify(control).showWelcomeMessageIfNecessary(); } @Test public void sendDestinationAndUpdateAccountWhenGetPushRegistration() { final String id = "id"; chatPushControl.registrationSuccess(id); verifySendPushSettingsAction(id, PushTimeout.LONG.getValue()); verify(masterAccount).setPushDest(id); }
  • 17. @RunWith(RobolectricTestRunner.class) public class ChatActivityTest { @Before public void setUp() { activity = new ChatActivity(); activity.onCreate(null); sendImageButton = (ImageButton) activity.findViewById(R.id.chatinput_send_image); } @Test public void removeAttachmentButtonForXMS() throws Exception { Contact contact = new Contact(IMAccountFactory.stringToAccount(“XMS"), "userid"); when(chatControl.getCurrentChatContact()).thenReturn(contact); activity.onResume(); assertEquals("Send image button should be invisible", View.GONE, sendImageButton.getVisibility()); } }
  • 18. Unit Tests Principes • Quick feedback • Robolectric, microemulator • Emulator/simulator tests
  • 19. Dependency Injection • Separate creation and usage • RoboGuice, Dagger
  • 20. RoboGuice Example import javax.inject.Inject; @ContentView(R.layout.startup) public class StartupActivity extends SigninActivity implements OnClickListener { @Inject private Control control; @Inject private FlurryLogger flurry; @Override protected void onStart() { super.onStart(); flurry.onStartSession(this); flurry.onEvent(EventType.ACT_STARTUP) } }
  • 21. Acceptance Tests • Automate regression • Sikuli, Robotium • Monkey runner
  • 22. #### StartGroupConversation### #note: contacts should be received alphabetically def StartGroupConversation(contacts): hitMenuItem("start_group_item.png"); for x in contacts: scrollDown(x); type(Key.F9); hitMenuItem("start_group_conversation.png"); wait("group_created.png", 30); ##### enter an item in the menu (INSERT) def hitMenuItem(image): type(Key.INSERT); scrollDown(image); type(Key.F9);
  • 23. Analytics • Flurry, Google analytics • Bugsense • DataWareHouse
  • 24. Feedback • Eat your own dog food • UX testing • Zendesk
  • 25. Spikes • Clear outcome • Timeboxed • Presentable
  • 26. Personal Projects • 2 personal projects • One sprint duration • Presented on company meeting
  • 28. Keywords • maven, ant, gradle, bb-ant-tools, proguard, antenna • junit, testng, fest assert, mockito, jmockit, powermock robolectric, microemulator, robotium, j2meunit, sikuli, monkeyrunner • roboguice, androidannotations, dagger microlog, jarrut, lwuit, advanced bb ui, guava, otto, actionbarsherlock, viepageindicator, disklrucache • jenkins, teamcity, bamboo, sonar, moose • intellij idea, eclipse, eclipse code formatter plugin
  • 29. Trivia • How many nationalities are in eBuddy? • What is the name of framework that we are using for testing Android on desktop? • What is the duration of typical personal project in the company? @jack_martynov eugen.martynov@gmail.com