Tuesday, 23 October 2012

Types of Mobile Application


Mobile Application 'Types' is quite confusing topic. Some people misunderstood this with Mobile Application 'categories'. Mobile Application 'categories' are Utility Apps, Entertainment Apps, Private Apps, Games, Banking Apps. But the Mobile Application 'Types' are totally different topics. Here is the description:



1. Browser Access : The applications which we are accessing through native browser. Ex : m.yahoo.com, www.google.com, m.redbus.in, etc

2. Hybrid Apps - Web : We are installing the application in our device and for the functioning of that particular application internet is required. Ex : Social Networking Apps(Facebook, Twitter), Instant Messengers(Skype), E-Commerce(Flipkart), Internet Speed Testing(Speedtest), etc.

3. Hybrid Apps - Mixed : We are installing the application in our device and if required we are connecting it to internet also. Ex : Few games in which we can play alone and we go online too for playing with different players(multi player). And any medical apps where u want to keep a track record of your health and later want to share with your friends or doctor via internet.

4. Native Apps : The applications which we are installing in our device. Ex : Reminders, Few Games, etc.

It can be further understand by the communication medium of the apps:


Native Apps- Which can be installed in  the devices and the app does not need any data transfer to the server. With out network these apps work in the device. The data about the app will be stored in the device itself. Example Gaming applications. Here the device memory and configuration is very important as the app completely dependent on this.

Client Server apps- They can be called Semi native apps. Here the app can be installed in the device. But the with out a network it cannot be launched. Because It gets the data from the server. With out the data the app will not proceed further. Example Commercial apps like Banking app. Here you basically can see the form UI but the all the data comes from the server. So the device memory is partially dependent just to install the app as the data comes from the server for every service call.

Mobile Web applications.- They can be called as Mobile browser apps as these are not installed in the device. these can be accessed using the mobile browser by hitting the url of the web. Here the device memory size is not all important as neither of the from or the app data is stored in the device. It is completely dependent on the quality of  the browser. Every thing comes from the server and rendered in the browser when you hit the url.



Comparison between Native Apps, Hybrid Apps and Mobile Apps:

1. Skills/tools needed for cross-platform apps:
Native         : Objective-C, Java, C, C++, C#, VB.net
Hybrid         : HTML, CSS, Javascript, Mobile development framework (like PhoneGap)
Mobile web : HTML, CSS, Javascript


2. Distribution:
Native         : App Store/Market
Hybrid         : App Store/Market
Mobile web : Internet


3. Development Speed:
Native         : Slow
Hybrid         : Moderate
Mobile web : Fast


4. 
Number of applications needed to reach major smartphone platforms 
:
Native         : 4
Hybrid         : 1
Mobile web : 1

5. Ongoing application maintenance:

Native         : Difficult
Hybrid         : Moderate
Mobile web : Low


6. Device access:

Native         : Full access(Camera, microphone, GPS, gyroscope, accelerometer, file upload, etc…)
Hybrid         : Full access(Camera, microphone, GPS, gyroscope, accelerometer, file upload, etc…)
Mobile web : Partial access(GPS, gyroscope, accelerometer, file upload)


7. Offline access: 

Native         : Yes
Hybrid         : Yes
Mobile web : Yes

8. Advantages:

Native         : Lets you create apps with rich user interfaces and/or heavy graphics
Hybrid         : Combines the development speed of mobile web apps with the device access and app store distribution of native apps
Mobile web : Offers fast development, simple maintenance, and full application portability.  One mobile web app works on any platform.

9. Disadvantages:

Native         : Development Time, Development Cost, Ongoing Maintenance, No portability (apps cannot be used on other platforms)
Hybrid         : Can’t handle heavy graphics, Requires familiarity with a mobile framework
Mobile web : Can’t handle heavy graphics, Can’t access camera or microphone

10. Best used for:
Native         : Games, Consumer-focused apps that require a highly graphic interface
Hybrid         : Consumer-focused apps with a moderately graphical interface, Business-focused apps that need full device access.
Mobile web : General non-game apps, Business-focused apps









Friday, 21 September 2012

Developer vs Tester (fake competition)


Developer vs Tester … a never lasting debate..i know..

Today in lunch table, I faced a weird situation when one of my team members forced me to contribute my thoughts regarding Developers vs Testers; actually they wanted to show that the Developer is betters than the Testers. Their point, whatever I got, was the Developers are more creative, innovative and knowledgeable than the Testers (Developers point) and Testers are more responsible, dedicated and detail oriented (as Testers said). Well they provided a lot of stuffs, examples and evidences to prove them-self right. Ahhh…… again that fake competition.



I tried a lot to let them understand that we cannot judge the Head and Tale in same Coin. Both have their own roles and responsibilities. But the people had childish ego to prove them-selves superior.

I, truly, never understand why such intelligent, capable and talented people fall in such a waste topic to discuss. I mean there is lot of issues, topics are there to discuss of. Why they want to prove themselves perfect? I mean we guys are in same team, on same project and doing the same task so where’s the point of discussing superiority?

At last, I just added few things before leaving the table; the IT industry is like a Football game where Developer, Business analyst etc are the Strikers, Quarterback...and Tester is like Goal Keeper. The whole team plays hard to win the match and I understand even the Development team is concern about the Quality but if Goal Keeper misses a goal, the whole team is going to lose. Even same for the developer as the Developer has his own responsibilities as they must strike a goal otherwise Team will also lose. So where’s the Competition buddy? It’s a Team work dude.



So instead of comparing the foolish things(because both the developer and tester are on the same boat), let unite to build a better world.

Thanks God, whatever I used is already developed and tested J


Friday, 7 September 2012

Install Android Apps to SD Card (by Default)

By installing apps directly to SD card, we can overcome the problem of internal memory of devices (applicable for those apps which are not dedicated for internal space). But the question is 'how to set storage default to sd card' ? So here is the solution:


Pre-requisites:
1. Android SDK (Click here for SDK setup)
2. Setup of ‘adb’ (Click here for adb)



As we know, Android apps install to the internal storage by default, but we can also set the SD card as the default install location. This trick allows moving almost any app to the SD card(WITHOUT Root Access required).

This requires Android 2.2 or later. To change the default install location, you’ll need to use the ADB (Android Debug Bridge) and Android SDK.


Step 1: Enable USB Debugging-
First, we need to enable USB debugging on Android device. For this:

Open the Settings screen > tap Applications > select Development




Then, tap ‘USB Debugging’ checkbox to enable it. This will enable debug mode, allowing changing the settings on Android device from computer. We may want to disable debug mode after completing this process.





Step 2: Install the Android SDK-
All we need to download and install Android SDK on computer.
After installing the SDK, launch the SDK Manager from Start menu



The ADB utility isn’t installed by default. It’s included in the Android SDK ‘Platform-tools’ folder – select this package and click the Install button to download and install it.



After the process completes, connect Android device to computer with its included USB cable (or just connect the emulator). Windows should locate the device and install the appropriate drivers automatically. If it doesn’t, you may have to download and install the appropriate drivers from your Android device’s manufacturer. Do not mount the device after connecting it – just plug it in.


Step 3: Using ADB-
Open a Windows Explorer window and navigate to the ‘android-sdk\platform-tools folder

Note: platform-tools folder install with the package of SDK.

Path could be as : E:\android-sdk-windows\platform-tools


Launch a Command Prompt window in this folder by pressing and holding the Shift button, right-clicking in the folder, and selecting Open command window here.




Run the adb devices command, it will show the connected Android devices:




Run the following command to set the default install location to your SD card:

adb shell pm setInstallLocation 2


Note: If you want to revert this change later and install apps to the internal storage by default, run this command:

adb shell pm setInstallLocation 0

0 represents device’s internal storage, and is the default. 2 represent the external storage, whether it’s an SD card or USB storage.



Moving Apps to SD Card:
Apps that refused to leave your system storage can be moved to the external storage. For instance, below you’ll see screenshots of the Slacker Radio app. Before the change was made, the ‘Move to USB Storage’ button was grayed out (disabled). After the change was made, the button is enabled and the app can be moved.


To move an app to the SD card, open the Settings screen, tap Applications, and select Manage Applications. Select the app you want to move and tap the Move button on its details screen.

Monday, 3 September 2012

Validation and Verification


Verification: 

  • Definition: It is a static testing that mean testing a product without executing it (through Walk through, Inspection and Review etc). It helps in finding out the defects with the location of defect. It is a process oriented.
  • Key Objective: Are we building the product right?
  • Evaluation Item: Plan, Requirement, Design, Code, Test Cases etc)
  • Activity: Review, Instection, Walkthrough


Validation: 

  • Definition: It is a dynamic testing that mean testing a product by executing it (through Integration testing, System Testing etc). It helps in finding out the defect only and not its location. It is a product oriented.
  • Key Objective: Are we building the right product?
  • Evaluation Item: Actual Product, Software
  • Activity: Testing


Well we can understand this as Verification is done through out the life cycle of the project/product where as validation comes in the testing phase of the application.

Severity and Priority


There are lot of confusion faced by beginners between Priority and Severity. Well, both the terms Priority and Severity are used in Bug Tracking in order to mention the importance of that bug to development team.

Severity: deals with the functionality of application
1. Severity status is used to explain how badly the deviation is affecting the build.
2. Severity type is defined by the Tester based on the written Test Cases and functionality.

Priority: deals with the customer requirement
1. Priority status is set by the Tester in order to let Developer know the time frame to fix a defect. If High priority is mentioned then the developer has to fix it at the earliest.
2. Priority status is set basd on the customer requirement.

Example: 

1) High Severity And Low Priority: If any application crashes after multiple use of any functionality (e.g. save Button use 200 times quickly then that application will crash)

Means High Severity because application chrashed but Low Priority because no need to debug right now you can debug it after some days (as its not a valid scenario because user is not going to click save button 200 times quickly)

2) High Priority And Low Severity: If any Website say "Yahoo" now if the logo of site "Yahoo" spells as "Yho" than Priority is high but severity is low.

Here the functionality of website is ok but it effect the name of the website so important to fix it quick ---Priority

Thursday, 30 August 2012

Root Cause Analysis


Root Cause Analysis nothing but analyzing possible risks raised during testing. This is done by Test Lead.

When we detect failures, we might try to track them back to their root cause, the real reason that they happened. There are several ways of carrying out root cause analysis, often involving a group brainstorming ideas and discussing them, so you may see different techniques in different organizations.

For example, suppose an organization has a problem with printing repeatedly failing. Some IT maintenance people get together to examine the problem and they start by brainstorming all the possible causes of the failures. Then they group them into categories they have chosen, and see if there are common underlying or root causes. Some of the obvious causes they discover might be:


  • Printer runs out of supplies (ink or paper).
  • Printer driver software fails.
  • Printer room is too hot for the printer and it seizes up.


These are the immediate causes. So in this way root cause analysis is a problem solving approach.

Tuesday, 7 August 2012

Conditional statements (MonkeyTalk)


IF statement (Javascript form):
For using conditions like the IF we need to modify the javascript form of the code and add new code to the existing javascript. While this makes the script more powerful, one cannot return to the old regular MonkeyTalk script form. In order to export the script click on the javascript tab at the bottom of the editor window in MonkeyTalk IDE and then click on Export button at the top.

We will illustrate the use of If statement by using two scripts, driver and driven. The driver script will pass the username and password to the driven script twice (two iterations). In one of the iteration the password is invalid and therefore the page will throw error. The driven script verifies if that error exists and then executes certain part of the code else it executes some other part of the code.

Driver Script
Script ae.js Run username1 p1
Script ae.js Run username1 pass2

Driven Script
load("libs/<monkeytalk_project_name>.js");
<monkeytalk_project_name>.<driven_script_name>.prototype.run = function(user, pass) {
                    this.app.input("username").enterText(user);
                    this.app.input("password").enterText(pass);
                    this.app.button("LOGIN").tap();
                    var a = this.app.label("login_err").get("a");
                    /*
                     * The get() function returns a string which
                     * is displayed on the label having id as "login_err"
                     * This element is always displayed on the screen.
                     * When the login page throws no error the string is void
                     * i.e. it is equal to ""
                     * This returned string is stored in variable 'a'
                     */
                                if(a == "Sorry! Password must be 4 or more characters.")
                                                /*
                                                 *  The if statement, tests if the string captured in a
                                                 *  is equal to the same error message.
                                                 * 
                                                 *  If value returned is TRUE then
                                                 *  new set of username and passwords are entered followed
                                                 *  by user clicking the "forms" tab and then the "login" tab
                                                 * 
                                                 *  If value returned is FALSE then the user is logged in
                                                 *  and all we need to do is logut the user. Followed by
                                                 *  user clicking the "hierarchy" tab and then the "login" tab
                                                 */ 
                                {
                                                this.app.input("username").tap();
                            this.app.input("username").enterText("new username");
                            this.app.input("password").enterText("new password");
                            this.app.button("LOGIN").tap();
                            this.app.button("LOGOUT").tap({thinktime:"3000"});
                                                this.app.tabBar().select("forms", {thinktime:"3000"});
                                                this.app.tabBar().select("login", {thinktime:"3000"});
                        }
                        else
                        {
                                this.app.button("LOGOUT").tap({thinktime:"3000"});
                                                this.app.tabBar().select("hierarchy", {thinktime:"3000"});
                                                this.app.tabBar().select("login", {thinktime:"3000"});
                        }
};

Variable declaration:-
Variables can be initialized at the time of declaration:

Vars * Define usr=john pw=smith
Input username EnterText ${usr}
Input password EnterText ${pw}

The above script will enter john as username and smith as password.

However, if the above script is being driven by a driver script (as mentioned in example 2), which passes arguments then the values provided as arguments in the driver script trump the ones defined in the above script. Example:

Script driven.mt Run albert einstein

Also, mentioned in example 2 is that if a driver script only passes one argument then it is replaces the values stored in the first declared variable and the second one remains as it is.

Script driven.mt Run albert