This essay has been submitted by a student. This is not an example of the work written by our professional essay writers.
Cloud Computing is a new kind of computing model that is widely used, basically about information, media, application, and data. The definition of cloud computing is Cloud computing is a model for enabling convenient, on-demand network access to a shared pool of configurable computing resources (e.g., networks, servers, storage applications and services) that can be rapidly provisioned and released with minimal management effort or service provider interaction. 
Cloud Computing vs Web Hosting
Before the existing of cloud computing, companies used web hosting as the medium to store and shared data. Web hosting is one of the internet hosting services that provide server space, web services and file maintenance for websites which are controlled by users that do not have their own web servers. Web hosting gives a fixed server space or the number of processors and hard drives are limited, differently with cloud computing, where it consist of several servers working together as one.
Types of Cloud Computing
There are four types of Cloud Computing which are Public Cloud, Private Cloud, Community Cloud and Hybrid Cloud. Public Cloud is hosted in shared system and accessed by any subscriber with the internet connection to access to the cloud space. Besides, Private Cloud also known as Internal Cloud Computing is established for a specific organizations and it is limit to that group only. Community Cloud is shared among a few organizations that have similar cloud requirements. Finally, Hybrid Cloud which are combination of two clouds, Public, Private or Community. It includes multiple internal and external providers.
Cloud Computing Models
Infrastructure as a Service (IaaS),
IaaS abstracts hardware which are server, storage, and network infrastructure into a pool of computing, storage, and connectivity capabilities that are delivered as services for a usage-based cost .
Platform as a Service (PaaS)
PaaS is between IaaS and SaaS. It can be defined as a computing platform that allows the creation of web applications quickly and easily, without the complexity of buying and maintaining the software and infrastructure underneath it .
Software as a Service (SaaS)
SaaS is an application designed for end-user. SaaS describes when users are rent or borrow online software instead of installing or purchasing the software in their own site (server or computer).
Relationship between Cloud Computing Stacks (IaaS, PaaS, and SaaS)
The relations of cloud stacks are SaaS is a software distribution model in which a third party hosts and makes software applications available to end users via the Internet. PaaS is a framework for delivering operating systems and associated services via the Internet, which does not involve any software downloads or installation. IaaS is a form of equipment outsourcing via the Internet used to support a companyâ€™s operations.
Understanding Software as a Service (SaaS)?
Nowadays, SaaS is rapidly growing among in term of delivering the technology. It is widely used in business-specific application like email, and customer management.SaaS becoming a ubiquitous delivery model as it can support web services and service-oriented services (SOA). It is related to Application Service Provider (ASP) and it also on-demand computing software. A basic concept of SaaS is provider will give user network-based access and user able to use the software without installing it on their own side computer or server. User just needs to key-in their company identity and they can use the software like it is on their on-site. SaaS give a lot of benefit to client site because they do not have to install the software beside they need to prepare a space for the software in the computer. They also able to reduce a cost in terms of buy a server to keep all data because they SaaS use a pay-per-usage model.
Traditional systems development life cycle
The traditional systems development life cycle includes:
During this phase, the development team will gather requirements from the customer. They investigate the need for possible software operating behavior in the given system. Various projects will be proposed and be analyzed feasibly. This will include operational feasibility, economic feasibility and technical feasibility. When the investigation is finished, it will decide which project should be adopted.
This phase will discover the problems in the system. For example, if the user uses the software to compute more complicate data, the software will not work, this phase will find out the limited situation.
Systems design is to design the systems in detail, which includes screen layouts, business rules, process diagrams and other document. After the phase, the enterprise will get a description of new system which is made by a lot of modules.
During this phase, the programmer of company will test the code of software in diverse situation. The user will have an acceptance check after that.
DEPLOYMENT and maintenance
During the last phase, the software will be deployed in the client environment. In most of the cases, the software will be maintained until it loses its value. Eventually it will be replaced by a new one.
SaaS software development life cycle
The SaaS is a part of cloud service. Therefore, the SaaS also follows some ability from cloud service. The first is reachability, which is operation of software from any region, this includes availability through internet; whether it is suited for local language. Next is scalability, which it eh ability of a service which can provide the same function when cloud service is deployed in different situation.
The SaaS life cycle include 6 phases:
During the envisioning phase, the business opportunities will be identified. The entrepreneur has to expand the quantity of customers through envisioning. Due to reachability and scalability of cloud hosted services, through SaaS, the entrepreneur will identify current business needs, envision new business opportunities and new markets, this also includes identifying solution and service needs.
During the platform evaluation phase, the entrepreneurs will determine which alternative platform is most suitable for the service. They will make a platform comparison that includes considerations of economics, capability, supportability, security, compliance, reliability, availability, scalability, performance, and disaster recovery.
The planning phase will make a prediction of service. Planning mainly depends on the style of service and the organizational culture. For example, if the company wants to deploy a game in the SaaS, the company has to plan how to operate this game, and how to collect fee. If the player has some problems, it will have plan that will explain how to tackle it.
During this phase, the cloud provider will be censored more harshly to have a production quality subscription. The IT programmers have to redeploy the service, then reform the schemes, modify the process to implement business continuity and review when the system breakdown. Still take the game company for instance, in this phase, the programmer will redeploy the server to implement trade of game, and make the solution once the game breakdown.
This phase is design phase to put the previous phase into action. Developing phase will deploy and test the service again and again. This will implement new function and innovate current function to improve the development of service.
During this phase, the enterprise will integrate with the evaluation, subscription and development phases to deploy and operate the service with best systemic qualities.
Difference between 2 kinds of life cycle:
Because traditional software service focus on the functionality of software, the system analysis and system design is very significant. While the SaaS life cycle concentrates on the operation, because SaaS is a kind of service, the service provider has to improve the development of operation to expand their clients.
MVC is one of possible ways to structure SaaS applications, but is an advantageous architecture. The fundamental conception of MVC is code reusability and separation of concerns. Most Web applications developed by ASP, PHP or CFML which hybridize the persistent-tier code (e.g. SQL select command) and presentation tier code (e.g. HTML).The production is not scalable developed that way and it can hardly fulfill the clients' continuously chargeable demands. To separate data from presentation tier is normally not easy; it needs elaborate plan and numerous attempts. However, MVC mandatorily separate them at the fundamental.MVC requires layering application which, however more work is necessarily needed, provides a readable structure and organizes application with models much better than others.
In MVC, the model represents application data (the information) and business rules. And it is frequently shared among different applications of a Web application. For example, a LoginForm model may be used for recording users' accounts and by both a front website for end users (say front end) and a website for restrictedly administrative managing the application (say back end) of an application.
View is the interface for user to browse and interact with. For former Web application, view is only constituted by HTML components. However for new Web application, HTML is still a important element but others new technologies has been emerged such as Macromedia Flash, XHTML, XML and Web services. One advantage of MVC is that it can handle many different views in one application. In fact, there is not anything being handled in views, as a view, it is just a way that shows data and allows users to interact.
The controller converts the commands between the model and the view. It deals directly with end users' requests. So when the hyperlink is being clicked and asks to send a HTML form, controller itself does not output anything or execute any method. It just receives the commands and decides which model component should be invoked to handle the command, then decide which view shall be called to show the return data.
Model has most task to handle among three parts of MVC, for example, it can use EJBs, ColdFusion Components and others similar patterns to access database. The return data from models is independent, irrelative to models or data format, which means one model can provide data to several views. Since the codes for the model can be reused by many views, it is just only needed to be written once and reduce the iteration.
It is very significant that one model can be shared by several views because of increasing methods are needed to access the application program. Using MVC, whether the clients are using Flash or WAP, one model can easily handle them. And the some components can be used by different interfaces because the return data is not formatted, for example, some code may be contained by HTML; however they may also needed to be contained by Macromedia Flash and WAP. Because model is isolated with controller and view, to change data and business rules of application program is extremely easy without considering extra changes in controllers and views. The developers only need to change the model when they move program's database from MySQL to Oracle, or change the data source based on RDBMS to LDAP. Once the model is implemented correctly, the view will present them perfectly.
Controller can be used to link different models and views to accomplish users' requests. In this case, controller is a very powerful tool for separating concerns.
The implement of MVC is too complicated. Small application is not suitable for MVC because implementing such application will have adverse effects in the performance and design. The isolated development process by UI authors, business logic authors and controller authors may leads to delay in their respective modules development.
SaaS Implementation using MVC Architecture:
A typical SaaS application will be deployed as a multi-tiered Model View Controller Web application. The View of the SaaS application will be implemented at the presentation tier. This can be achieved using one of these ways; Java Servlet Pages (JSP), HTML, CSS, PHP, ASP. Each of these presentation tiers has its advantages and disadvantages. The selection of this presentation is SaaS vendor's choice.
The Controller will be distributed among the presentation tier and the business tier. This controller can be written using different languages like Java Servlets, plain Java, C# or vendor provided language (Eg Apex language by Salesforce.com). The Model can be implemented in the data tier. This is mostly the representation of data maintained in the server side. There are many such components available. Eg. Entity Bean from J2EE component, sObjects from salesforce.com, Java Persistence API (JPA).
Let us discuss this MVC based architecture of SaaS application with an example.
To develop a SaaS web application - on line hotel booking using a PaaS, Google App Engine in MVC architecture. The application will be developed by a SaaS provider which can be used by tenants, in this scenario they are multiple travel agencies. Each tenant will have their own customers or user groups who will use their website.
Following are the technical specifications,
View - Java Servlet Pages, Controller - Java Servlets and plain Java components, Model - J2EE entity bean
The core functionalities of this application are
to show the available rooms in the selected period of time
to filter the rooms based on the user input
calculate the price for the booking
create the booking
The customer/user will be able to access this application using the web browser which will be implemented in the presentation tier of this architecture. The above functionalities will be available to the users based on the user preferences. The model which will be implemented at the data tier which will be displayed in the View or modified based on the userâ€™s action with the help of Controller program.
Customization facility to the tenants:
With respect to customization, tenant administrators should be offered a configuration facility to select what software variations should be enabled for them (e.g. the price calculation service). In addition, this facility should also allow specifying specific configuration parameters (e.g. business rules for the price calculation service). These configuration data should be stored in the datastore of the SaaS provider in an isolated way under a specific tenant. 
Run-time support is needed to provide support for activating software variations on a per tenant basis or even per user basis. When a user (either client or employee) logs in, the tenant to whom the user belongs should be determined. Based on the acquired tenant ID, the run-time support should then activate the appropriate software variations to process the requests of the user.
Another key requirement of the run-time support is that the tenant-specific software variations should be applied in an isolated way without affecting the service behavior that is delivered to other tenants or users of that tenant. To ensure robustness in the face of run-time adaptations (eg. safe updates).
Test Driven Development
What is TDD?
Test driven development is a type of software development process in which primarily developer writes automated test which initially doesn't pass and then write just enough code to pass the test and Finally it conclude with refactoring of code. This Iteration last up to getting code to acceptable standards.
Test Driven Development Cycle
TDD Lifecycle is short iteration cycle starts includes writing test, code and Refactoring.
I. First step starts with writing test with general idea of what software should do.
II. After running test ,It will fail as our code is not yet ready. If it doesn't fails then it imply that this feature already exists or test is faulty.
III. In next Step, Developer actually starts with writing code and tries to just pass the test. At thus step developer won't focus of functionality and different possibilities .
IV. After running test again, Developer have to keep on modifying code until it works.
V. Once Test passed, The actual refactoring phase (Clean up code) come in picture where Developer looks for repetition of code and other issue with code.
VI. After this, Cycle Starts with another new test, the cycle is then repeated to push forward the functionality
Test driven development in Cloud Computing
Developing software using TDD approach is leads to certain level of complexity ,As In cloud we have to work with remote machine.But,TDD has many merits over normal approach. So, It really worth to follow it.
Let's Consider following types of software in cloud.
Cloud hosting: Consider a website to be developed in any programming language, with cloud computing it's the same Only difference is that It provides an architecture that's easier to scale the web UI as the traffic increases .A typical xUnit frameworks will provide all that you need to write solid software
Distributed computing: It is software that is designed to scale horizontally across many servers in order to improve reliability, speed and spreading the computational requirements of complex algorithms across many servers. It is more complex than cloud hosting scenario. Adhering to strong test-driven practices is still very important as we frequently keep on changing the code. With strong coverage of test will make development more pleasant, but simply writing unit tests with a standard xUnit library alone is probably not enough to test the code.
Few ways to do TDD for the cloud :
Embedded servers: Maven plug-in can automatically start and stop embedded virtual servers. This is perhaps the ideal solution, because This can â€œspin upâ€Â a new server for each unit test and populate it with only the minimum data that need to test your functionality. But, This can lead to overhead associated with starting up and shutting down these embedded servers may slow down your unit tests.
For e.g.: Cassandra
xUnit:based libraries: If xUnit-style library present for tools which is going to use.For e.g. consider MRUnit library used for writing tests of Hadoop MapReduce jobs. This library provide interface for test. This is better alternative than spinning up embedded server but, might restrict usefulness of your tests.
Call a local testing cluster: If above fails, Maintain a local cluster specifically for running development and continuous-integration tests against. But, This may introduce version control and shared dependency problem between developers. This problem can be removed running individual local copy of the tools on computer.
Advantage of Test Driven Development for Clod Computing
i}In case of setting up geographically distributed team for development. If every code passing thought test suite then teams don't have to have lower productivity caused by a lack of communication as integration tests serve as medium of between them.
ii}With written code and passed test, It is easier to measure developer performance.
iii}As cloud producer, It is easy to judge complexity of feature request with large no. of test cases.