Thursday, November 6, 2014

Cloud Computing Technologies


Cloud Computing Technologies

Standard Object Application Protocol (SOAP), JavaScript Object Notation (JSON), AJAX, and Representational State Transfer (Rest) are new standards that make working with different providers easier for developers and a better user experience for the users (Anderson, 2007). Many of the new standards evolved from the need of developers to collaborate across platforms. Emerging standards such as Node.js are designed to make developing cross platform applications faster and easier.

AJAX

Asynchronous JavaScript and XML (AJAX) is a software design pattern that uses internet browsers to call information on a page with script without making a page refreshes (Györödi, Györödi, Pecherle, Lorand, & Alin, 2009). The AJAX message lightweight and does not include metadata such as definition information.  An example of can be seen in figure 8. Organizations are able create webpages that mimic traditional desktop applications with AJAX. AJAX is a way for organizations to expose business functionality in a way that is consumable by other programs.


Figure 8. Ajax XML

JSON

JavaScript object notation (JSON) is a format that is now commonly used for Ajax (Crockford, 2006). Transferring XML to a web page is difficult to process, space intensive, and processors intensive (Lawrence, 2004). Unlike XML, which must be parsed by the browser, JSON allows the direct conversion of text sent from a web server into a JavaScript object that is directly accessible by other JavaScript objects without string parsing. The direct conversion saves webpages time and processing power (Crockford, 2006). JSON has less extra characters and white space than XML.  An example can be seen in figure 9. Consequently, JSON consumes less network bandwidth than XML. Slow network bandwidth is a large contributing factor to slow web pages (Crockford, 2006). Using JSON is a technology that is easy to read, efficient, and is easier to combine desperate data sources (Severance, 2012).
 

 

REST

Roy Fielding proposed a set of principles that constitute a set of standard transmission architectures for the internet in his 2000 dissertation. Fielding (2000) named this architecture Representational State Transfer (REST). REST principles are designed to make communication over the internet efficient and scalable across multiple servers (Vinoski, 2007).
REST enforces standardization of communication. This allows web services written in one language to easily communicate with webservers written in other languages (Vinoski, 2007). REST is also stateless. Servers do not keep information about the clients that are calling them. Being stateless allows clients to transfer between servers seamlessly and allows easy scalability (Fielding, 2000; Vinoski, 2007).

Node

Node.Js or Node is a cross platform language that allows developers to write server side JavaScript (Tilkov & Vinoski 2010). Node.js allows developers to write in one language for the browser and the server allowing them to write code faster (Tilkov & Vinoski 2010). Being fast, having a low memory foot print, and being specifically designed for Ajax transactions, Node.js is rapidly becoming a popular language for cloud computing (Tilkov & Vinoski 2010).

OData


Open data (OData) is a set of web services that allow clients to make queries against databases with a web browser (Krishnaswamy, 2010). This allows companies to make flexible web services that allow clients control how the data will be presented back to them (Krishnaswamy, 2010). Rather than having a set of static web services OData allows clients of the web services to construct their own data interfaces.

Tuesday, October 7, 2014

as a Service

Software as a Service

In research, software as a service (SaaS) it is generally referred to as software, distributed as an internet-based web service (Bajaj, Bradley, Cravens, 2008; McCreary, 2009). Using SaaS can have both advantages and disadvantages. SaaS can be less expensive, platform agnostic, faster to implement (Laplante, Zhang, & Voas, 2008). SaaS can also have slow performance, create dependencies, and can be limiting to organizations (McCreary, 2009).

Cloud computing services has allows companies for take advantage of lower cost of entry, rapid development, and pay-as-you go in contrast to large capital expenses, slower development, and high barrier to entry (Andersen, Birchall, Jessen, & Money 2006; Denne, 2007; Katzan & Dowling, 2010; Gill, 2011; O’Sullivan, 2009; Waxer, 2009; Wulke, & Kohl, 2004). Entrepreneur are using cloud computing’s lower cost of ownership and improved productivity to start businesses that would not be feasible with traditional software development methodologies (Denne, 2007; Sharif, 2010; Wei et al., 2009). On-demand services allow companies to handle large spikes in traffic without having to purchase excess servers that are underutilized the majority of the time. Advances in web services technologies such as grid computing and virtualization made it possible for providers of cloud services to rapidly scale their cloud services to meet the needs of their clients (Prez et al., 2009). Cloud computing allows organizations to pay only for what they use with no large capital expenses at the beginning of a project by effectively outsourcing a part of their IT infrastructure (McGrath & MacMillan, 2009).

SaaS uses platform agnostic transmission methods. The same SaaS can be used by developers utilizing different programming languages and operating systems without changes by cloud provider (Laplante et al., 2008). SaaS providers can issue updates without requiring the customer to install new software. Customers using SaaS always have the latest bug fixes as soon as they come out.

Application program interfaces (APIs), the programming model behind SaaS, allows software developers to rapidly create software by building upon readymade components (McCreary, 2009; Robillard, 2009). Readymade components have advantages and disadvantages. Traditional software components locked users into software versions. These components could be hard to update across an organization which made bug fixes by the vendor difficult to implement. They often locked users into particular software languages and language versions (Robillard, 2009).

Platform as a Service (PaaS)

Platform as a service allows customers to create entire applications on the cloud platform. Platform as a service (PaaS) is generally thought of a system that can be built upon. Companies such as Microsoft and Google allow companies to host custom web services. While other companies such as Salesforce allow consumers to write code in the cloud that is executed against their system. PaaS is a platform that can be expanded but consumers of the service do not have direct access to the operating system. Consumers of PaaS cannot install software such as antivirus programs or audit the security of a system.

Infrastructure as a Service (IaaS)

IaaS gives consumers hosted computers. IT professionals rent time on computers with IaaS. Providers such as Amazon and Rack space allow companies to purchase time on servers. Users of IaaS can use a remote desktop application to remote onto a cloud hosted computer and install software and configure the server similar to how they would have if they had purchased the server and hosted it in-house. IaaS allows companies to take advantage the on demand, scalable of the cloud while having control over data and security (Karadsheh, 2012).

As A Service (aaS)


Some cloud computing literature described three main forms of cloud computing (Chebrolu, 2010; Schneiderman, 2011). Although IaaS, PaaS and SaaS represent most types of cloud providers, there are other types of providers. These types of services are often referred to as “as a service” (aaS) or everything as a service (EaaS) (Banerjee et al., 2011). The concept of EaaS is that most IT services can be broken down into cloud based components. Testers can use testing as a service (TaaS) to take advantage of cloud computing’s scalability to perform scalability tests (Yang, Onita, Zhang, & Dhaliwal, 2010).

Thursday, September 4, 2014

Evolution of Cloud Computing Pt 3


Cloud Computing

Cloud computing is the nexus of many business and technological advancements. The technology of grid computing allows cloud computing providers the ability to rapidly scale to meet the needs of their customers. Standardizations of transmission protocols such as Asynchronous JavaScript and XML (AJAX), SOA, and JavaScript Object Notation (JSON) make it relatively simple for organizations to consume cloud computing services. The billable utility computing model allows computing providers the ability to monetize their offerings. As with Web 2.0, businesses are exposing business functionality through web services (Baumbach, 2009). This creates the opportunity for businesses to monetize their IT assets.
The practice of an organization making software functionality available to the public through a web service became known as Software as a Service (SaaS). With SaaS, companies are offering many types of services. Hardware that can be accessed over the Internet, termed Infrastructure as a Service (IaaS) and extensible platforms, called Platform as a Service (PaaS). Most cloud services fit into the three categories of SaaS, PaaS, or IaaS (Mell & Grance, 2011) and are depicted in Figure 6. Services that fall outside of the general three categories of cloud services are often called Everything as a Service (EaaS) or as a Service (aaS) (Banerjee et al., 2011).


Figure 6. Cloud Service Types

There is no official definition of cloud computing. The National Institute of Standards and Technology (NIST) defines cloud computing as having five distinct characteristics (Mell & Grance, 2011). First, cloud computing is on-demand and is self-service. Consumers of cloud services can sign up online and immediately start using the cloud service. A cloud service does not require salespeople to negotiate the price, legal people to work out the contract, or implementation specialists to help the customer work with the system. Customers signing up for cloud services have a set price, contract, and implementation that they will use. Cloud computing must be accessible over broadband communication channels. Cloud computing’s resources are pooled and computational capacity can expand rapidly. Many cloud computing providers use grid computing to expand rapidly. Finally, cloud computing is a measured service. These measures help cloud computing services to rapidly expand to meet the needs of consumers or throttle consumers who are using enough services to slow the system down for other customers.



Figure 7. Cloud Computing Principles

Monday, August 4, 2014

Evolution of Cloud Computing: Web Standards Pt 2

Service Orientated Architecture

Service orientated architecture (SOA) is the codification of distributed computing into a standardized approach and messaging format. SOA allows organizations to develop a series of services that can expose programming functions and objects through a special type of XML called simple object access protocol (SOAP). Through Web Service Definition Language (WSDL) and Universal Description Discovery and Integration (UDDI), developers can discover what functionality the web service has available (Chen & Tsai, 2009).
Service oriented architecture enables the reuse of software components saving organizations time and costs by increasing efficiency (Welke, Hirschheim, & Schwarz, 2011). Infrastructure efficiency allows companies to quickly make changes and grow their IT portfolio. Componentized systems allow organizations the ability to upgrade single components rather than entire systems (Sarkar, 2009; Welke et al., 2011). Figure 5 shows the software code that makes up a SOAP message.

Web 2.0

Berners-Lee et al. (2006) note that the evolution of the World Wide Web is not happening with the addition of more complex algorithms but through the incorporation of physiology and sociology into constructing web pages. Berners-Lee et al. believed understanding why, socially, people used the web is essential to the evolution of the Internet. They also believe that making it easier for developers to collaborate between organizations will enhance the overall web experience. The Web 2.0 movement is a combination of new technologies that are easier to use, encourage collaboration, have easily accessible data, and have a social and psychological aspect making web pages more powerful and socially aware (Anderson, 2007; Paroutis & Saleh, 2009).

Web 2.0 is a movement away from the restrictive explicit environment of SOA into a system where communication to users and between organizations is more freely available (Lin, 2007). Web 2.0 is principally about making interactions seamless and easier for both the developer and user.

Friday, July 4, 2014

Evolution of Cloud Computing Pt 1


Evolution of Cloud Computing Pt 1

Research on distributed computing, grid computing, utility computing, and software services are the building blocks of cloud computing (Berman, Fox, & Hey, 2003; Feeney et al., 1974; Ross & Westerman, 2004; Vouk, 2008). As technology changes, many businesses are finding ways of leveraging new technologies. Cloud computing allows many businesses to gain a competitive advantage by leveraging advances in computers and networks.

Distributed Computing

In distributed computing systems, as depicted in Figure 2, computers interact with each other to achieve a computational goal. Distributed computing is a heterogeneous endeavor where each computer, using independent software, has a specific task to perform (Thain, Tannenbaum, & Livny, 2005). Distributed computing can handle complex tasks requiring a large amount of processing power. Distributed computing systems take advantage of software on different platforms. Similar to cloud computing, distributed computing allows software developers the ability to swap out system modules if they no longer meet the business needs.


Figure 2. Distributed Computing Systems

Grid Computing

Grid computing, shown in Figure 3, an offshoot of distributed computing, is homogenous, loosely coupled, and scalable (Udoh, 2011). Grid computing utilizes a controller to rapidly scale processing power by bring more computers onto the grid when needed (Udoh, 2011). Grid computing uses inexpensive personal computers, creating a low-cost way for organizations to turn excess capacity into the computational power of super computers (Prez et al., 2009). Elastic computing is a core principle of grid computing. The controller can increase or decrease the number of computers being used to meet the computational needs with elastic computing (Krautheim, 2010).


Figure 3. Grid Computing

Utility Computing

Utility computing, as depicted in Figure 4, takes the concept of elastic computing and applies a practical business application to it (Roy & Roy, 2005). Customers of the utility only pay for the services they are using. The consumer pays through a subscription or for the metered use services they are consuming (Krautheim, 2010). Information technology assets and services become consumable similar to a phone or electrical utility (Roy & Roy, 2005).
Utility computing can lead to lower cost of ownership on IT products by reducing the need for underutilized servers. Utility computing can also reduce the maintenance cost that can be a large part of an IT budget (Marston, 2011; Roy & Roy, 2005).



Figure 4. Utility Computing

Tuesday, July 30, 2013

Cloud Workers: How Cloud Computing affects Testers

Tester

Connectathon       
By Dugsong, via Wikimedia Commons
Cloud computing can present a unique set of challenges to testers.  Every system is not built the same.  Some are more stable and contains less bugs than others.  Some systems are similar to traditional software development while others represent a completely new way of doing things.

Pro

Some systems such as Infrastructure as a service (IaaS) are similar to traditional software development systems.  With these fimilar environmens testers do not have to change much of their methods of testing.

Con

Other systems such as platform as a system (PaaS) can represent entirely new paradigms.  Multitendency system and databases, for example, are systems that exist across multiple systems.  Traditional test automation can involve inserting and them manipulating data.  If the testing system does not pin itself to one database database update latency may cause unexpected errors.  PaaS often do not have the same testing hooks that many mature software languages do.

Software as a Service (SaaS) can suffer from high loads.  The cloud provider may also not give the developers a test environment to work with. When they do find bugs it may be up to the cloud provider to fix.  The cloud provider may not be willing to fix the service before the systems is due to go into production. 

Many cloud systems change versions outside of the SDLC of the current project.  System that are tested and working may break without notice.  Systems with governors may work at the time of release but break under strain.  

Conclusion

In short testers are the ones who have the great burden working with could computing.  They need to find different ways of testing.  In the past testing mainly happened before deployment into production and was expected to remain working the same until the next release.  Cloud computing changes that.  Systems can easily break after deployment changing the way testers need to test.  

Monday, July 29, 2013

Cloud Workers: How Cloud Computing Affects Developers

Developer

Wikimania 2009 - Tim Starling
By Nicolas Goldberg,via Wikimedia Commons     
For developers cloud computing represents a new set of tools that can make development time faster by giving them ready made tools and components.  Not all components are made the same.  Some tools such as Microsoft's Azure and Amazon's AWS give a set of tools that most developers would not have access to.  These tools can come with caviots that can frustrate developers and delay projects.

Pros

Developing in the cloud gives developers access to more tools than ever before.  Software developers can take advantage of elastic computing to scale their applications.  They can globally distribute their assets to increase speed of websites.  Cloud computing increases time to market with many applications.

Cons

Cloud computing does come with limitations.  Some of these limitation are due to inherent factors such as the latency of transmitting information over the internet while other limitations come directly from the cloud provider to safeguard one user from taking down the system for everyone.  Developers need to make systems "cloud ready".  A cloud ready system is one that is tolerant to the limitations of cloud computing.

Over the past 20 years the software development industry has undergone an evolution into better systems and methods.  Design patterns such as the abstract factory pattern help developers complex systems that meets a specific need, development methodologies such as test driven development has help companies cut down development time.

Building in the Cloud

Systems that are not cloud ready can break when the system is under strain.  Latency of the internet can cause system to become prohibitively slow.  In modern development the software is tested and then put into production with a limited smoke test to make sure it works.  With cloud computing systems can fail long after they are deployed.  Software developers need to think critically about the limitations of the cloud they are using and adjust their development methods in a way that will work with the cloud.

Software developers need to have a way of monitoring their cloud based software to make sure that events such as strain or systems upgrades do not break the system.  With traditional software development after the deployment the systems is forgotten about until.  Cloud system's need monitoring in production.  Simply passing test in the development environment will not suffice in the cloud world.