Mobile Applications
Mobile applications are becoming more complex, moving beyond inexpensive recreational applications to more business critical uses.  It is essential to apply software engineering processes to assure the development of secure, high-quality mobile applications.
The Mobile Difference

In many respects, developing mobile applications is similar to software engineering for other embedded applications. Mobile applications present some additional requirements that are less commonly found with traditional software applications, including:

• Potential interaction with other applications – mobile devices may have numerous applications from varied sources, with the possibility of interactions among them.

• Sensor handling – most modern mobile devices include an accelerometer,  a touch screen, a global positioning system, a real and/or virtual keyboards, a microphone usable by applications other than voice calls, one or more cameras, and multiple networking protocols. 

• Native and hybrid (mobile web) applications – mobile devices often include applications that invoke services over the telephone network or the Internet via a web browser and affect data and displays on the device.

• Families of hardware and software platforms – mobile devices may have to support applications that were written for all of the varied devices supporting the operating system, and also for different versions of the operating system.

• Security – mobile platforms are open, allowing the installation of new “malware” applications that can affect the overall operation of the device, including the surreptitious transmission of local data by such an application.

• User interfaces – a mobile application must share common elements of the user interface with other applications and must adhere to externally enveloped user interface guidelines, many of which are implemented in the software development kits (SDKs) that are part of the platform.

• Complexity of testing – mobile web applications are particularly challenging to test. Not only do they have many of the same issues found in testing web applications, but they have the added issues associated with transmission through gateways and the telephone network

• Power consumption – many aspects of an application affect its use of the device’s power and thus the battery life of the device.  Mobile applications may inadvertently make extensive use of battery-draining resources.

Follow Best Practices

With all of the recent experience in creating mobile applications, much is known about how to build them and about how people use their devices and these applications.

In Web Application Development, all but the largest and most complicated software and system development projects have moved away from a process-intensive approach toward a more agile approach, with the Scrum approach and other Agile techniques, finding widespread acceptance.

Above and beyond the process, though, is the systematic codification of knowledge about the best practices to follow for application development.

The World Wide Web Consortium has issued a candidate set of recommendations for mobile web (not native) applications. Apple has published an iPhone Application Programming Guide with guidelines for various aspects of iPhone development. The Developer’s Guide for Android includes a Best Practices section that addresses application compatibility, user interface guidelines, and designing for performance and responsiveness, among other things.

In short, developers can find a lot of guidance to assist them with programming their applications. Platform developers have drawn on decades of software engineering knowledge to create software architectures and SDKs that provide developers with access to needed device resources. However, these technical aspects don’t address the larger issues of creating large-scale applications.

Find the Balance

For mobile devices and their applications, the software engineering process must not only be aware of the hardware device properties, but must also address project management issues and the unique aspects of mobile application development noted above.

Many large-scale and enterprise-oriented mobile applications will be part of a product family. These applications will often be mobile web applications, rather than native mobile applications, and will often complement or augment an existing application. As a result, development of the mobile application will typically be done within the context of the overall software development effort, thus providing a management framework for the mobile application.

The unique qualities of the mobile environment makes it important not to treat the mobile application as an afterthought, but rather as an independent task with its own software engineering process and product requirements.

While the large number of mobile applications makes it appear that software development processes for them are well understood, there remain a large number of complex issues where further evaluation is needed. In addition, there is a mobile “angle” to almost every aspect of software engineering, where the characteristics of mobile applications and their operating environments present a new or different set of issues

Below are some of the most promising areas for software engineering evaluation as related to development of mobile applications.

The User Experience

Mobile users are often seeking to quickly complete a simple task, and can’t take advantage of the full range of functionality provided by a traditional Web application.

The user interfaces for mobile web applications may borrow from traditional web applications, but must often be redesigned to highlight the most commonly used functions and to make most effective use of the screen and the mobile user interface paradigm, including both the user input and the associated motion and location information.

Using a mobile device is different from working with a desktop or laptop computer. Gestures, sensors, and location data play a dominant role in many mobile applications.

The smaller display and different styles of user interaction also have a major impact on interaction design for mobile applications, which in turn has a strong influence on application development.  

The mobile user interface paradigm is based around widgets, touch, physical motion, and keyboards (physical and virtual)

Other context dependencies may also play a role in the user experience, including such aspects as physical location, proximity to other mobile devices, and the activation of various device features. 

Mobile platforms include their own UI libraries and guidelines, so native applications for a device will share a common “look and feel.” It’s in the interest of the application developer to adhere to platform standards, especially on touch-screen devices, where users expect to use the platform’s standard set of gestures, which differs for each platform. 

With the challenge of making the best possible use of limited screen space, user interface design takes on greater importance than ever.  These observations raise some evaluation issues, including: 

• How does one determine which functions should be present in a mobile version of a traditional application?

• Are there techniques that can assure the maximum reuse of code among different versions?

• What is the comparable effort to build a native mobile application (or a set of them for different platforms) compared to a mobile web application?

• Is there a measurable difference in user satisfaction or productivity with either of these?

• Is there a need for specialized scenario development processes and tools for mobile applications?

• Does the mobile UI require a different contextual design process to support a different set of use cases?

• How does a software designer integrate the various forms of input and sensor data in application design?

Non-functional Requirements

The success of any application, mobile or otherwise, depends on a lengthy list of non-functional qualities. Among those most relevant to mobile applications are performance (efficient use of device resources, responsiveness, scalability), reliability (robustness, connectivity, stability),quality (usability, install ability), and security.

The mobile environment, with its dependence on different kinds of networks, differs from traditional environments and thus raises some new areas for evaluation.

• Do mobile web applications behave differently when connected using the telephone network (3G, 4G) than when using an 802.11 (WiFi) or 802.16 (WiMax) connection?

• Are there differences in security?

• Is there a significant difference in responsiveness?

• Are traditional fallback and exception-handling techniques adequate, or does the higher likelihood of a dropped connection (or intermittent connectivity) require additional mechanisms?

• Are there new techniques needed for assuring data integrity, or will the synchronization techniques from traditional client-server computing suffice?

• Does potential loss of connectivity or battery power represent a risk to program and/or data integrity if such an event occurs during a transaction or system update? 

• Should applications be designed differently depending on the speed of the network on which they are being used?

• How does a developer create applications that will maximize battery life and resource usage?

Processes, Tools, and Architecture

As mobile applications become more complex and mission critical, development organizations must introduce processes that address more aspects of the development process than are covered in today’s agile processes and development environments.  The user experience is especially critical, so there is a greater need to create prototypes of the user interface(s), particularly when multiple devices will be supported.

Testing is another important area for mobile software engineering research.

Consider the development of testing methods for product families, such as Android devices. It’s insufficient to merely test an Android application on an emulator; It must be tested across many different Android devices running different versions of the operating system on various telecom networks, perhaps with l10n and i18n options. Integrated test suites would simplify this process.

Another area for research involves application maintenance in the rapidly changing world of mobile platforms.  While “early adopter” consumers are often willing to update their device and their applications, most enterprise users are less likely to do so. In many cases, their companies will have policies discouraging them from doing so.

One particularly interesting question involves the use of virtualization technology on these devices as a way to support various platforms.

Finally, application development and deployment is moving toward the “cloud”. This new computing paradigm will not only affect development processes and tools, but also application architectures.

Portability

An important issue  for the application developer is to decide which platform(s) to support in the highly fragmented world of mobile development. From the standpoint of the application developer, it’s quite expensive to support multiple platforms, especially when there are multiple versions and variants for each of them. The application developer has several options:

A. Develop for a single platform only and use, to the extent possible, a common subset of the features available across all variants and versions of that platform; for example, the developer would have only a single code base for an application that would run on different versions of the iPhone, the iPad, and possibly the iPod Touch.

While that approach would simplify the developer’s work, the resulting application would not be able to take advantage of all of the differentiating features of each device.

B. Develop native applications for each platform and variant, trading off the development and maintenance costs against the ability to optimize the application for each platform.

C. Develop mobile web applications, thus minimizing the amount of native code for each platform.  It remains uncertain whether this approach will meet the needs of the market, or use one or more layer(s) of abstraction that can map a “write once” application into native executable programs that will run on multiple platforms.

Each of these approaches presents a set of research questions, and suggests the need for customized tools to support cross-platform development and testing.


Client Comments
"Keene Systems developed a profitable eCommerce site and two powerful intranet applications for us. One was an editorial application for entering new books and updating the live site through a workflow-controlled process that included editor, publisher and author approvals. The second was for customer service, billing, and financial reporting and detailed activity monitoring. In all three cases, Keene Systems delivered outstanding turnkey systems that were flexible and open-ended."
David Wilcox, CEO
MeansBusiness Inc.

“Keene Systems enabled us to create an internal database-driven HR application that calculated employee bonuses and hid its complexity from our users. The UI was as simple to use as a spreadsheet.”
Nancy Spalding-Gray, IT Mgr.
State Street Research

“To help us create an internal patient record-keeping system, Keene Systems provided the responsive service we needed, delivering the completed project on schedule and on budget.”
Sharon Hershon, IT Manager
Partners Healthcare