SlideShare a Scribd company logo
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

More Related Content

What's hot (7)

PDF
MCE^3 - Felix Krause - Continuous Delivery for Mobile Apps Using Fastlane
PROIDEA
 
PDF
Intro to Retrofit 2 and RxJava2
Fabio Collini
 
PDF
Android Develpment vol. 2, MFF UK, 2015
Tomáš Kypta
 
PDF
AngularJS - Overcoming performance issues. Limits.
Dragos Mihai Rusu
 
PPT
Java GUI Toolkits - Swing vs. SWT vs. Jambi
Andreas Schreiber
 
PDF
React Nativeの光と闇
Yukiya Nakagawa
 
MCE^3 - Felix Krause - Continuous Delivery for Mobile Apps Using Fastlane
PROIDEA
 
Intro to Retrofit 2 and RxJava2
Fabio Collini
 
Android Develpment vol. 2, MFF UK, 2015
Tomáš Kypta
 
AngularJS - Overcoming performance issues. Limits.
Dragos Mihai Rusu
 
Java GUI Toolkits - Swing vs. SWT vs. Jambi
Andreas Schreiber
 
React Nativeの光と闇
Yukiya Nakagawa
 

Viewers also liked (20)

PDF
Freelancer new
MariaGubko
 
PDF
Creating windows store java script apps
Eugene Zharkov
 
PPTX
IT Brunch - Backendless
backendless
 
PDF
Разрабатываем качественное Windows 8 приложение
Mykhail Galushko
 
PPT
Android Brown Bag Lunch - DroidconNL overview
Eugen Martynov
 
PPTX
Animals test
Erike Wulandari
 
PPTX
Organisasi belajar mendunia
Zulrahmat Togala
 
PPTX
Facebook Stetho
Eugen Martynov
 
PPTX
My summer experience with the future
Yashiro Anazawa
 
PPTX
Robolectric Adventure
Eugen Martynov
 
PPTX
Template project
Eugen Martynov
 
PDF
Manual de procedimientos surtidora S&R
Juan Carlos Castillo
 
PDF
IT Brunch - SpecFlow and Gherkin by Example
Dmytro Mindra
 
PPT
XP Days UA Pecha kucha
Eugen Martynov
 
PPTX
Slideshow.thai yoga bodywork memphis
tnmassage
 
PPTX
Kajian teoritis pendekatan saintifik
Zulrahmat Togala
 
PPTX
Robolectric v2
Eugen Martynov
 
PDF
DI with Dagger2
Eugen Martynov
 
Freelancer new
MariaGubko
 
Creating windows store java script apps
Eugene Zharkov
 
IT Brunch - Backendless
backendless
 
Разрабатываем качественное Windows 8 приложение
Mykhail Galushko
 
Android Brown Bag Lunch - DroidconNL overview
Eugen Martynov
 
Animals test
Erike Wulandari
 
Organisasi belajar mendunia
Zulrahmat Togala
 
Facebook Stetho
Eugen Martynov
 
My summer experience with the future
Yashiro Anazawa
 
Robolectric Adventure
Eugen Martynov
 
Template project
Eugen Martynov
 
Manual de procedimientos surtidora S&R
Juan Carlos Castillo
 
IT Brunch - SpecFlow and Gherkin by Example
Dmytro Mindra
 
XP Days UA Pecha kucha
Eugen Martynov
 
Slideshow.thai yoga bodywork memphis
tnmassage
 
Kajian teoritis pendekatan saintifik
Zulrahmat Togala
 
Robolectric v2
Eugen Martynov
 
DI with Dagger2
Eugen Martynov
 
Ad

Similar to Mobile developer is Software developer (20)

PPT
Mobile applications and automation testing
bdipesh
 
PPT
Mobile applications and automation testing
Dipesh Bhatewara
 
PDF
2012 mobile testingsummit-moet
Eing Ong
 
PDF
Automating Mobile Applications
April Luk
 
PDF
MOET: Mobile End-to-End Testing
mobiletestsummit
 
DOC
Manoj resume
tekwissen
 
PPTX
Building High Quality Android Applications
Leif Janzik
 
PDF
2012 java one-con3648
Eing Ong
 
PDF
2012 star west-t10
Eing Ong
 
PPTX
Selenium Camp 2012
Yan Alexeenko
 
PDF
Velocity Conference: Increasing Speed To Market In Mobile Development Through...
Intuit Inc.
 
PPTX
Android developer's toolbox
Alex Verdyan
 
PPTX
Different Android Test Automation Frameworks - What Works You the Best?
Bitbar
 
PDF
Speed to Market in Mobile Development
Tina Su
 
PDF
Velocity2013 mobile ci_intuit
Tina Su
 
PDF
Velocity2013 mobile ci_intuit
Tina Su
 
PPTX
Mobile Application Testing
SWAAM Tech
 
PPTX
Mobile applications testing (challenges, tools & techniques)
Rakesh Jha
 
PPTX
Automated Testing and Continuous Deployment for Mobile Apps with Jenkins
CloudBees
 
PPT
SOASTA Webinar: Process Compression For Mobile App Dev 120612
SOASTA
 
Mobile applications and automation testing
bdipesh
 
Mobile applications and automation testing
Dipesh Bhatewara
 
2012 mobile testingsummit-moet
Eing Ong
 
Automating Mobile Applications
April Luk
 
MOET: Mobile End-to-End Testing
mobiletestsummit
 
Manoj resume
tekwissen
 
Building High Quality Android Applications
Leif Janzik
 
2012 java one-con3648
Eing Ong
 
2012 star west-t10
Eing Ong
 
Selenium Camp 2012
Yan Alexeenko
 
Velocity Conference: Increasing Speed To Market In Mobile Development Through...
Intuit Inc.
 
Android developer's toolbox
Alex Verdyan
 
Different Android Test Automation Frameworks - What Works You the Best?
Bitbar
 
Speed to Market in Mobile Development
Tina Su
 
Velocity2013 mobile ci_intuit
Tina Su
 
Velocity2013 mobile ci_intuit
Tina Su
 
Mobile Application Testing
SWAAM Tech
 
Mobile applications testing (challenges, tools & techniques)
Rakesh Jha
 
Automated Testing and Continuous Deployment for Mobile Apps with Jenkins
CloudBees
 
SOASTA Webinar: Process Compression For Mobile App Dev 120612
SOASTA
 
Ad

Recently uploaded (20)

PPTX
Agentforce World Tour Toronto '25 - Supercharge MuleSoft Development with Mod...
Alexandra N. Martinez
 
PDF
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
PDF
Future-Proof or Fall Behind? 10 Tech Trends You Can’t Afford to Ignore in 2025
DIGITALCONFEX
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PDF
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
PDF
Automating Feature Enrichment and Station Creation in Natural Gas Utility Net...
Safe Software
 
PDF
AI Agents in the Cloud: The Rise of Agentic Cloud Architecture
Lilly Gracia
 
PDF
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PDF
Staying Human in a Machine- Accelerated World
Catalin Jora
 
PPT
Ericsson LTE presentation SEMINAR 2010.ppt
npat3
 
PDF
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
PDF
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
PDF
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
PPTX
Mastering ODC + Okta Configuration - Chennai OSUG
HathiMaryA
 
PPTX
Seamless Tech Experiences Showcasing Cross-Platform App Design.pptx
presentifyai
 
DOCX
Python coding for beginners !! Start now!#
Rajni Bhardwaj Grover
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
PDF
Kit-Works Team Study_20250627_한달만에만든사내서비스키링(양다윗).pdf
Wonjun Hwang
 
Agentforce World Tour Toronto '25 - Supercharge MuleSoft Development with Mod...
Alexandra N. Martinez
 
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
Future-Proof or Fall Behind? 10 Tech Trends You Can’t Afford to Ignore in 2025
DIGITALCONFEX
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
Automating Feature Enrichment and Station Creation in Natural Gas Utility Net...
Safe Software
 
AI Agents in the Cloud: The Rise of Agentic Cloud Architecture
Lilly Gracia
 
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
Staying Human in a Machine- Accelerated World
Catalin Jora
 
Ericsson LTE presentation SEMINAR 2010.ppt
npat3
 
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
Mastering ODC + Okta Configuration - Chennai OSUG
HathiMaryA
 
Seamless Tech Experiences Showcasing Cross-Platform App Design.pptx
presentifyai
 
Python coding for beginners !! Start now!#
Rajni Bhardwaj Grover
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
Kit-Works Team Study_20250627_한달만에만든사내서비스키링(양다윗).pdf
Wonjun Hwang
 

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 [email protected]