mobile developer is software developer

Post on 10-May-2015

1.310 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

My slides from IT Brunch about mobile software development

TRANSCRIPT

Mobile developer is Software developer

Company

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

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 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)

}}

Acceptance Tests

• Automate regression• Sikuli, Robotium• Monkey runner

#### 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);

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, daggermicrolog, 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

top related