Software Development Activities


-Figure shows very clear boundaries between each activity. In practice, the boundaries are not so clear. Sometimes it is difficult to say if a particular activity belongs in one box or another. The precise boundaries are not important.

-What is important is to understand the relationships between these activities. Earlier activities, such as defining requirements and object-oriented analysis, determine the course of activities that follow them, such as defining essential use cases or object-oriented design. However, in the course of those later activities, deficiencies in the products of earlier activities emerge. For example, in the course of defining a use case, an ambiguous or conflicting requirement may become apparent. It may be necessary to modify existing use cases or to write new ones. You must expect such iterations.

As long as the trend is for later iterations to produce fewer changes than earlier iterations, consider them part of the normal development process. Following are brief descriptions of some of the activities shown in the above figure. These descriptions provide only enough information to explain how the patterns discussed in this work apply to a relevant activity. Business planning. This typically starts with a proposal to build or modify a piece of software. The proposal evolves into a business case. A business case is a document that describes the pros and cons of the software project and includes estimates of the resources required to complete the project. If a decision is made to proceed with the project, then a preliminary schedule and budget are prepared.

Define requirements. The purpose of this activity is to produce a requirements specification that says what the software produced by the project will and will not do. This typically begins with goals and high-level requirements from the business case. Additional requirements are obtained from appropriate sources to produce an initial requirements specification.

Build Business planning: business case, budget

Detailed planning

Usability testing

Object-oriented analysis: low-level essential use cases, conceptual model, sequence diagrams

Design user interface

Object-oriented design: class diagrams, collaboration diagrams, state diagrams

Logical database design

Write documentation

help


Define requirements: requirements specification

Define high-level essential use cases

Create prototype Define high-level system architecture

Coding Physical database design

Testing

Deployment

As the requirements specification is used in subsequent activities, necessary refinements to the requirements are discovered. The refinements are incorporated into the requirements specification. The products of subsequent activities are then modified to reflect the changes to the requirements specification.

Define essential use cases. A use case describes the sequence of events that occurs in a specific circumstance between a system and other entities. The other entities are called actors. Developing. Usecases improves our understanding of the requirements, analysis, or design on which the use case is based. As we develop a better understanding of requirements, analysis, and design, we are able to refine them. Essential use cases describe events in terms of the problem domain. Use cases that describe events in terms of the internal organization of software are called real uses cases.

The use cases most appropriate for refining requirements are high-level essential use cases. They are high level in that they explore the implications on which they are based on, but they do not try to add additional details. Create prototype. Create a prototype of the proposed software.

A prototype can be used to get reactions to a proposed project. Reactions to a prototype can be used to refine requirements and essential use cases.

Define high-level system architecture. Determine the major components of the system that are obvious from the original proposal.

Also, determine their relationships. Object-oriented analysis. The purpose of this activity is to understand what the software produced by the project will do and how it will interact with other entities in its environment.

The goal of analysis is to create a model of what the software is going to do, but not how to do it. The products of object oriented analysis model the situation in which the software will operate from the perspective of an outside observer.

The analysis does not concern itself with what goes on inside the software.

Object-oriented design. The purpose of this activity is to determine the internal organization of the software. The products of the design effort identify the classes that will comprise the internal

logic of the software. They also determine the internal structure of the classes and their interrelationships.

Coding. The purpose of this activity is to write the code that will make the software work.

Testing. The purpose of this phase is to ensure that the software works as expected.

Inversion Of Control(IOC) Design Pattern

Loose coupling is one of the critical elements in object-oriented software development. It allows you to change the implementations of two related objects without affecting the other object. Inversion of Control (IoC) is one approach you can use to achieve loose coupling between several interacting components in an application.

Popular Java IOC/DI Containers:

  • Spring Framework : A substantially large framework which offers a number of other capabilities apart from Dependency Injection.
  • PicoContainer : A fairly small tightly focused DI container framework.
  • HiveMind : Another DI container framework.
  • XWork : Primarily a command pattern framework which very effectively leverages Dependency Injection. While it is an independent framework in its own right, it is often used in conjunction with Webwork

Popular .Net IOC/DI Containers:

ref:

Inversion of Control Containers and the Dependency Injection pattern(Martin Fowler) - http://martinfowler.com/articles/injection.html






Inversion Of Control(Java Boutique) - http://javaboutique.internet.com/tutorials/loose/

Cloud Computing

Cloud computing is the delivery of computing as a service rather than a product, whereby shared resources, software, and information are provided to computers and other devices as a metered service over a network (typically the Internet).

As a metaphor for the Internet, "the cloud" is a familiar cliché, but when combined with "computing," the meaning gets bigger and fuzzier. Some analysts and vendors define cloud computing narrowly as an updated version of utility computing: basically virtual servers available over the Internet. Others go very broad, arguing anything you consume outside the firewall is "in the cloud," including conventional outsourcing.

Java EE 7 as a Cloud Integrator:

Java Business Integration(JBI) standardizes a way of assembling and binding the components making up an application. JBI defines a container that can host components. Two kinds of components can be plugged into a JBI environment:

  • Service engines provide logic in the environment, such as XSL (Extensible Stylesheet Language) transformation or BPEL (Business Process Execution Language) orchestration.
  • Binding components are sort of "connectors" to external services or applications. They allow communication with various protocols, such as SOAP, REST, Java Message Service, or ebXML.

JBI is built on top of state-of-the-art SOA standards: service definitions are described in WSDL (Web Services Description Language) and components exchange XML messages in a document-oriented-model way.

Together with consuming APIs for REST-based Services and JBI, Java EE 7 can be positioned as a cloud integrator platform. However, we need to see the final specification on the exact options for cloud integration in Java EE 7.

Java EE 7 as a Cloud Provider:

While the options for a cloud consumer and integrator do exist in Java EE in different forms in the earlier versions, the new add-ons to position Java EE 7 as a cloud provider are a major boost to the platform. The following are the expected major features in relation to Java EE 7 as a cloud provider.

  • The Java EE platform architecture to take into account the operational impact of the cloud, more specifically by defining new roles that arise in that model, such as a PaaS administrator.
  • The Java EE platform may also establish a set of constraints that applications that wish to take advantage of PaaS-specific features, such as multi-tenancy, may have to obey and provide a way for applications to identify themselves as designed for cloud environments.
  • All resource manager-related APIs, such as JPA, JDBC and JMS, will be updated to enable multi-tenancy. The programming model may be refined as well, for example, by introducing connectionless versions of the major APIs.
  • Java EE will define a descriptor for application metadata to enable developers to describe certain characteristics of their applications that are essential for the purpose of running them in a PaaS environment. These may include being multi tenancy-enabled, resources sharing, quality of service information, dependencies between applications.

HTML 5

HTML5 was thrown around by the likes of Apple and Google. This is the next evolution of HTML, or Hyper Text Markup Language, which forms the backbone of almost every site on the Internet.

HTML 4 has been tweaked, stretched and augmented beyond its initial scope to bring high levels of interactivity and multimedia to Web sites. Plugins like Flash, Silverlight and Java have added media integration to the Web, but not without some cost. In search of a "better user experience" and battery life, Apple has simply dropped support for some of these plugins entirely on mobile devices, leaving much of the media-heavy Internet inaccessible on iPads and iPhones. HTML5 adds many new features, and streamlines functionality in order to render these processor-intensive add-ons unnecessary for many common functions.

Assuming content providers sign on (and many are), this means you won't have to worry about installing yet another plugin just to listen to a song embedded in a blog or watch a video on YouTube. Similarly, this is a big deal for platforms that either don't support Flash (e.g., iPhone and iPad), or have well documented problems with it (e.g., Linux). It will be a particular boon to those smartphones for which supporting Flash has proven problematic.

ref:

HTML5 Triumphant: Silverlight, Flash Discontinuing - http://www.technologyreview.com/blog/mimssbits/27328/