Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Mobile developer is Software developer


Published on

My slides from IT Brunch about mobile software development

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Mobile developer is Software developer

  1. 1. Mobile developer isSoftware developer
  2. 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 hiringCompany
  3. 3. Projects Setup• Maven or Eclipse• Checkout• Import• (Easy tune)• Profit!Import
  4. 4. Build Automation• Ant, antenna, bb-ant-tools• Maven• Proguard• Release auto checks
  5. 5. Build Automation Concepts• Checkout• Run• Profit
  6. 6. Ant HintsDon’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" />
  7. 7. Maven Hints
  8. 8. Dependencies• Artifactory, Ivy• SDKs
  9. 9. Open Source• Fork• Fix• Pull request
  10. 10. Source Control Hints• Trunk, release and spike branches• Commit frequently, commit smart• Behavior commit comments
  11. 11. Continuous Integration• TeamCity• 9 agents – Linux, Windows, Mac• Trunk, Beta and Release• Pin to deploy in TC
  12. 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. 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. 14. Code Review and Pair Programming• Pair programming• Code review• Design sessions
  15. 15. Unit Tests
  16. 16. @Testpublic void showWelcomeMessageWhenReceivedPushDestination() { chatPushControl.registrationSuccess("id"); verify(control).showWelcomeMessageIfNecessary();}@Testpublic void sendDestinationAndUpdateAccountWhenGetPushRegistration() { final String id = "id"; chatPushControl.registrationSuccess(id); verifySendPushSettingsAction(id, PushTimeout.LONG.getValue()); verify(masterAccount).setPushDest(id);}
  17. 17. @RunWith(RobolectricTestRunner.class)public class ChatActivityTest { @Before public void setUp() { activity = new ChatActivity(); activity.onCreate(null); sendImageButton = (ImageButton) activity.findViewById(; } @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. 18. Unit Tests Principes• Quick feedback• Robolectric, microemulator• Emulator/simulator tests
  19. 19. Dependency Injection• Separate creation and usage• RoboGuice, Dagger
  20. 20. RoboGuice Exampleimport 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. 21. Acceptance Tests• Automate regression• Sikuli, Robotium• Monkey runner
  22. 22. #### StartGroupConversation####note: contacts should be received alphabeticallydef 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. 23. Analytics• Flurry, Google analytics• Bugsense• DataWareHouse
  24. 24. Feedback• Eat your own dog food• UX testing• Zendesk
  25. 25. Spikes• Clear outcome• Timeboxed• Presentable
  26. 26. Personal Projects• 2 personal projects• One sprint duration• Presented on company meeting
  27. 27. Conclusion
  28. 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. 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