Upload
eugen-martynov
View
1.309
Download
4
Tags:
Embed Size (px)
DESCRIPTION
My slides from IT Brunch about mobile software development
Citation preview
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