Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Beetalk

No description
by

Angela Hu

on 7 October 2014

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Beetalk

Secret Weapon
Snapchat
Club -
Automatic Testing
Doodle
Line Brush/Doodle Buddy
Bar
Buzz

Introduction of Beetalk
Free
Reasons to get it !
Fun
look around
Anyway, it's an instant messaging app.
Background
Registered as a company in 2013
Based on Thai Capital
Project started from 4 Feb 2013(For iOS recorded in PT)
Launched in Thailand in Nov 2013 (Wechat 600 million users in Oct)
Became No. 1 app in Apple's app store in Thailand
Expanded to Thailand, Singapore, Malaysia, Vietnam,

Supports English, Chinese, Japanese, Thai, Malay etc.

Indonesia,Taiwan, Iran
Core Values
not limited to text, but also sticker, doodle, voice notes etc
cannot send vote in group chat
Sticker
KakaoTalk/Line
Future of Beetalk
More Features?
Stickers are designed by local artists
Revenue Model?
Sticker Gallery?
Public Account Platform(Web)?
Game online payment?
Mobile e-commerce?
Location-based service?



Group Chat
Teamwork
QA ?
Program
Programming Product
Programming System Product
Programming System
x 3
x 3
x 9
1/3 Plan

1/6 Programming

1/2 Testing
Reality ?
No
enough time for testing
No
detailed and up-to-date design document
No
standard interface instruction
No
complete log for each update

Communication!!!
How to reduce the cost of communication?
1.
Always
follow up PM (if design document is not maintained well enough)
2.
Always
maintain the detailed updates in Pivotal Tracker
(description , screenshots, videos if possible)
3.
Always
keep in mind what is happening if you have a great brain, otherwise, note it down!
4.
Always
talk to the right person responsible
5.
Always
inform team lead if it is high priority
How to be a better QA if you are new hirer?
1. Get to know each team members
2. Get to know the process of software product development
3. Get to know the stories behind
4. Inspiration
5. Patience
6. Pursue perfect
7. Never take any chances
8. Keep learning
Thanks
QA can make a difference
1. Client side handles display issue.
shake results <2km. No restriction for display. Will display all.
shake results >2km. Calculate total male minus total female - if it's positive, delete as many of these extra males as possible randomly from all those that are >2km away

2. Server returns all users shaked at the same period of time: 10s. Return 200 per batch (Batch)

3. Set time-out to be 15 seconds for wifi/4G network condition, and 20 seconds for worse conditions. Once it's timed out, no need to retry. (Network)

4. View profile/Add friends/Accept friend request(Second Step), View buzz/View Club/Chat with friends added(Third Step), Comment buzz/Join club(Fourth Step)

5. UI:
(1) Name too long
(2) Distance
(3) From source in friends request list, Tag in chatroom

1. display a recommended list of 20 ppl per batch with the following logic (priority from high to low):

Must always ensure:
1) Default, recommend opposite gender only
2) Only recommend if the user has profile picture.

Among the above 1) and 2)
(1) Those who like you
(2). Those who used 'flip' feature in the past 24 hours
(3). if 1&2 couldn't add up to 20, then 80% of the rest with Distance from close to far, 20% with random distance; if 1&2 too many, also use this logic to select among them.

2. When first entering with no preloaded pics - load 3 big avatars and display the unclear ones first with a circle showing progress In other cases, pre-load 6 big avatars . But give priority to sending chat messages (UE)

3. View profile(First Step), View buzz/View Club/Chat with friends added(Third Step), Comment buzz/Join club(Fourth Step)

4. UI:
(1) popup tip window
(2) Name too long
(3) From source and Tag in chatroom


BUT
CLIENT
SERVER
First Request(fetch 120)
MobileUserLocationResponse
String
Action
, List
User
, ByteString
Cursor

1. addlist(User, Cursor)
(1) if items>120, cache items which >5km
(2) filt myself and blacklisted buddy
(3) save userid, location info to DB
2. update last location update time for "last update"
3. display
(1) display with 30 users per batch (Cursor)
(2) request, sort, and display user info, location info(optional)
(3) display (friend) if buddy
*
(5) handle errors:
NETWORK_OFF/GPS_OFF('Turn on your location service..')
NETWORK_ERROR (timeout 15s for wifi/4G; 20s for worse)
SIGN_IN_REQUIRED('Login in your Google Play')
SERVICE_DISABLED ('Enable GooglePlay Service')
INTERNAL_ERROR ('GooglePlay Service has encounted..')
RESULT_EMPTY('No Friends Nearby..')
LOCATION_SERVICE_UNAVAILABLE('Unable to identify..')
float
longtitude,
float
latitude

Second Request (fetch 1000, filter out previous 120)
1. update user coordinator
2. discard those invisible
3. return to user list to client
Enough for testing?
What if Name/Signature too long ?
What if Distance over 999m?
What if Last Active Time over 59min?
Enough for testing?
Second Step: View profile/Add friends/Accept friend request
Third Step: View buzz/View Club/Chat with friends added
Fourth Step: Comment buzz/Join club
invisible icon
user list(user info)
avatar, name, gender, age, buzz/club icon, signature
distance, last active time, friend tag
Clubs Nearby/Filter/Shake&Flip
Last Updated Time
Disconnected Label
Loading animation
Shake
Flip
CLIENT
SERVER
Integer
UserId
ByteString
Message
Long
MsgId
Integer
type
ByteString
Options.WhisperDuration
Integer
FromId
ByteString
Message
Integer
Timestamp
Long
MsgId
Integer
type
ByteString
Options
ChatInfo
AckMessageRequest
Integer
FromId
Long
MsgId
1. parse the msg:
(1) if message valid
(2) if message invalid
return

2. display
(1) display chatItem(timestamp, content)
(2) display "the message is not support on this version" if not valid
Club/Club Chat/Club Buzz
47 tests
Took 1 hr 5 min.
6 test cases by python client

1. send club chat
2. join club
3. accept club
4. post club buzz
6. comment club buzz
7. update club info
set club to visible mode for preparation
Python Client & Protobuf
btalk_request.py
btalk_receiver.py

EventCenter:
_registerEvent
_triggerEvent
Python Client & Protobuf

def

joinClub(self, cid):
def _afterLogin(info):
msgInfo = {
'ClubId': cid
}

JoinClubRequest
().send(self.client, msgInfo)

def _ackEvent(msg):
ackInfo = {
'MsgId': msg['msg'].MsgId,
'FromUserId': self.uid
}

MessageAckRequest
().send(self.client, ackInfo)
self.client.stop()

self.
registerReceiver
(
LoginReceiver
, _afterLogin)
self.
registerReceiver
(
JoinClubSubmittedReceiver
, _ackEvent)
class
JoinClubRequest
(ClubRequest):
subcode = 9

def getRequest(self, info):
request = JoinClub()
request.RequestId = str(time.time())
request.ClubId = info['ClubId']
return request

def

joinClub(self, cid):
def _afterLogin(info):
msgInfo = {
'ClubId': cid
}

JoinClubRequest
().send(self.client, msgInfo)

def _ackEvent(msg):
ackInfo = {
'MsgId': msg['msg'].MsgId,
'FromUserId': self.uid
}

MessageAckRequest
().send(self.client, ackInfo)
self.client.stop()

self.
registerReceiver
(
LoginReceiver
, _afterLogin)
self.
registerReceiver
(
JoinClubSubmittedReceiver
, _ackEvent)
class
ClubReceiver
(SubReceiver):
code = 162

class
JoinClubSubmittedReceiver
(ClubSysEventReceiver):
eventcode = 12
Why Automatic Testing? Cause it's repeatable!
The simpler, the better !

Not all test cases can be automated.
Not all test cases need to be automated.
Modular Programming for reuse and maintenance.
Get independent accounts to reduce dependencies
Use python client for preparation and consecutive query.
uiautomator -- UI Testing
A Java library containing APIs to create customized functional UI tests, and an execution engine to automate and run the tests.


1. Install
Android SDK
, and set
ANDROID_HOME
environment to the correct path.
2. Enable
ADB
setting on device and connect your android device using usb with your PC.
3.
import
uiautomator

If ANDROID_SERIAL is defined in environment, or there is only one device connected:

from uiautomator import device as d

Speficy the serial number when retrieving the device object

from uiautomator import Device
d = Device('192.168.56.102:5555')

Pre-requirements
How to use uiautomator?
Notes: In below examples, we use d represent the android device object
1. analyze the app’s UI components
2. Create automated tests to simulate specific user interactions on your application

# press home key
d.press.home()
# press back key
d.press.back()
# click () on screen
d(text='BeeTalk').click()
# find a specific object
d(text='Clubs').right(className='android.widget.ImageButton').click()
# return true if object exists
d(text='Search for Clubs').exists


Demonstration
uiautomator has limitations
uiautomator + Python Client
Faster, Simpler, Stabler
Full transcript