February 16, 2012

Requirements and Restrictions

   In this post I will try to describe the most important and natural requirements of my system.

Architectural Requirements

  1. The system will be developed for Android Architecture using Google Technologies.
  2. The persistence will be handled by a distributed database.
  3. The database will be BigTable.
  4. Database management will be provided by NoSQL.
Functional Requirements
  1. The system will be designed for one application distributed on multiple mobile devices.
  2. Transparent data (readable) will be supported by the system.
  3. The system must be able to provide an internet connection to successfully synchronize the data between local database and cloud database.
  4. The system will use a Wi-Fi connection when is available otherwise a GPRS standard - User can choose what type of connection will be used primarily, as default Wi-Fi will be set up. Also user application will be able to force this relation: in case only GPRS is available the application will load only relevant data.
  5. Offline work will be supported by the system - The accuracy of the application will not be affected by the fact that at a time there is no available network connection, Content Provider will store data locally(cache approach) and synchronize it with the cloud when an internet connection becomes available.
  6. Cloud to Device Messaging(C2DM) protocol will be used to tell the application that on the server side is new data, so that the application can fetch it. The C2DM service handles all aspects of queueing of messages and delivery to the target application running on the target device.
  7. JSON(GSON) will be the data exchange format used for serializing and transmitting structured data over a network connection.
  8. To ensure consistency the system will be able to replicate the data on several storage devices.
  9. Timestamps will be used to solve conflicts during resynchronization. We will use the "last update wins" approach because it's the most simple and natural.
  10. The communication between entities(server and client) will be ensured through REST architecture using Create/Read/Update/Delete functions.
  11. The database on the server side will be able to maintain and distinguish pieces of data from multiple clients.
  12. Optimize the network bandwidth and save time making Delta updates. This require the user to download  the data that has changed, not the whole database.
Non-Functional Requirements
  1. The programming language used for developing the system will be Java.

     Beside those requirements, at the beginning I will add some restrictions just to be sure that in the end I will have a functional software. If the development of the project will go well, I will remove step by step one of them and I will try to solve it. The complexity of my system will increase with every removed restriction.

Restrictions
  1. Network connection is available at any time.
  2. One device will be used to avoid conflicts in synchronizing the cloud and local database.This implies that a network synchronization will take place before continuing working.
  3. The client database will fit in the cellphone memory.
  4. Every application has its own database.
  5. Database from the server side (cloud) will be accessible only from Android devices.
  6. Changes on the client side will result with an update of the entire database on the cloud.

     The software development methodology that I will try to use is Agile. Those methods have proven their effectiveness and are transforming the software industry everyday. The main goal is to provide a functional software. Tasks will be divided into small increment parts and functional software is developed in short iterations("timeboxes"). A good feature of this method is that encourages rapid and flexible response to change.
     
      It seems this method uses my design principle, Keep it simple, stupid!, we will see if is true.

No comments:

Post a Comment