Book Image

ASP.NET 3.5 Application Architecture and Design

By : Vivek Thakur
Book Image

ASP.NET 3.5 Application Architecture and Design

By: Vivek Thakur

Overview of this book

Table of Contents (14 chapters)
ASP.NET 3.5
Credits
About the Author
About the Reviewers
Preface

Project Life Cycle


From an idea to a fully functional binary or DLL, a project passes through a varied range of activities and processes. The project life cycle refers to the different logical and physical stages that a project goes through from inception to completion. The life cycle starts with gathering the business requirements and ends when the final product is delivered after complete testing. The following are the major stages of a generic project life cycle:

  1. 1. Project Initiation

  2. 2. Planning and Prototyping

  3. 3. Project Construction

  4. 4. Project Transition and Release

These stages are more-or-less common through all projects. In this section, we will see some of the basic processes and understand the importance of each. Note that it is not necessary for each project to follow a standard life cycle strictly. Every project will have its own modified version of the life cycle, as well as its own duration for each stage.

Project Initiation

This is the part where the project idea is discussed with the stakeholders. Here, we discuss the feasibility of the project, and decide if it is really worth moving forward with the project at all. A few things which might be discussed are:

  • Does the project's business model make sense?

  • Is the project feasible given the current technological platforms?

  • How big is the project going to be? Is it possible to complete the project within the business deadline?

  • Do we have the required technical talent available in the market to complete the project on time?

In this phase, the business analyst or the stakeholder(s) will create a high-level requirements document. This document will list the aim of the project and its fundamental business logic in business terms. One can also create RFQ (Request For Quotation) or RFI (Request For Information) documents to be sent to other firms who might be willing to bid for the development of the project, or to the internal development team for further development time and cost estimates.

So in this first stage, the stakeholders discuss and decide on the business feasibility of the project and prepare a document that captures most of the requirements at a very high level.

Project Planning and Prototyping

In this phase, we elaborate on the project requirements by capturing all business requirements in specially formatted documents called use cases, and then prepare a prototype as well as a project plan for the next stages of the project life cycle. Once the project initiation and inception stage is over and the project owners have selected a development team, the second phase starts, in which the architect or the development team leads and the project manager will work out a plan and a development cycle. In this phase, most of the major pre-development activities take place. These activities are described in more detail below:

Project Plan

The project manager will need to create a plan that will lay out all of the major tasks in the project life cycle, along with the resources and time required. Without a plan it would be very difficult to track and manage the progress of different stages of a project. The project plan at this stage might not be able to cover the actual development phase, because this will depend on the completion of the following tasks.

Use Case Design

The architect/business analysts will first start this phase by creating use cases, which can be simple documents explaining the interaction between the application and the end user. A "use case" lists the interaction steps sequentially, along with other possible paths for a single interaction with the user. Each use case should capture a specific scenario from end-to-end. It should also list all pre-conditions as well as post-conditions for that scenario. Here is a sample use case:

UseCase 1.10 User Login

 

Description:

Actor gains access to system.

Actors:

All roles.

Trigger:

Actor invokes the application.

Pre-Conditions:

Not applicable

Post-Conditions:

Actor is successfully logged in to system.

Basic Flow:

BF1: Log on to Client

  1. 1. The System displays the Login screen.

    2. The Actor enters:

    a. Email ID

    b. Password

  2. 3. The System validates the email ID and password.

  3. 4. The use case ends when the Actor is logged into the system. The System displays a list of messages sorted in chronological order, with links to Compose, Delete and Aggregate messages. The actor can select any of the links.

Alternate Flows:

AF1: Forgot Password

The use case starts when the actor has not logged in and clicks Forgot Password link.

  1. 1. The System displays the Forgot Password screen.

  2. 2. The Actor enters his email address.

  3. 3. The Actor clicks on Send Password.

  4. 4. The use case ends when the System sends the new password to the actor's email address.

AF2: Change Password

The use case starts when the My Account action is invoked. The actor is already logged in.

  1. 1. The System displays the My Account screen.

  2. 2. The Actor clicks on Change Password.

  3. 3. The Actor enters the current password and the new password.

  4. 4. The Actor clicks on Change Password.

The use case ends when the System saves the new password.

Exception Flows:

none

Special Requirements:

None

There are many ways of creating use cases; we can also create them diagrammatically. But to keep things simple, we can follow the above use case, which is easier to understand. After the major use cases are covered, we can move to the next step in this elaboration phase, which is, prototyping.

Prototyping

The Graphical User Interface (GUI) of any project is one of the most critical areas in terms of its overall presence and credibility. And many projects are delayed because of repeated changes in the GUI throughout the project life cycle, adding to the frustration of the programmers. For web projects, designing a working prototype in HTML before starting to work on any other activity can be very helpful, for project stakeholders as well as developers. A working prototype means that the different HTML pages would be linked to each other (based on the use cases we covered earlier), and can use dummy data to give a realistic impression of the actual project.

A GUI prototype is not only a part of the Proof of Concept(POC), but also forms an important extension of the project requirements specifications, in a graphical sense. Properly-linked HTML pages with some dummy data showing the important business process flows can be an indispensable tool, aiding in the visual understanding of the project, as well as answering all kinds of technical and business-related questions. That is why it is highly recommended to develop a prototype before starting the actual coding for a project.

Class Model

The architect and the technical lead will create an object model of the system, highlighting all important entities and how they will interact. We will learn more about how to create an object model in the coming chapters of this book.

Database Model

A database model would be created based on the class model described above. This data model, along with the object model and use cases, will help provide the development team with clear instructions, and paths to the targets and objectives. It is very common for a data model to be created before a class model. It's also very common for these two steps to be completed at the same time, as they are very closely related.

Based on the use cases, the prototype and the object/data models, the project manager, along with the architect and the team lead, will develop a project plan for the construction phase, in which the coding takes place. This plan will highlight the milestones as well as list all of the important deliverables of that phase.

Project Construction: Programming and Development

When all of the primary documentation is complete, the actual development work starts. The technical team will study the use cases and the object and data models, and start planning the delivery cycles. Here, we can use one of the following famous development methodologies:

  • SCRUM Development

  • Waterfall Model

  • Agile Development/Extreme Programming (XP)

  • Iterative Development

You can find more information about each of these techniques online via the list of references I have provided. There is a lot of online as well as offline text available on these methodologies. I personally prefer SCRUM development, which is a Chaos Theory based approach. In SCRUM, we have sprint, which is an iteration with a certain number of days (for example, 30) at the end of which the development team covers a certain set of use cases and lets the stakeholders see and test the application. During the next iteration, they cover more features, which are prioritized accordingly. Each iteration passes through a full software development cycle: planning, requirements, design, coding, testing, and documentation. The goal is to have an available release (without bugs) at the end of each iteration.

A major goal to be achieved by using this process is to allow the client to take their new product to market before it is completed in its entirety. We are also minimizing risk by developing highly-focused components in a short period of time. This development process will continue throughout all phases, promoting the release of components to a beta phase in a live environment as the life cycles are completed. The following are the major benefits or principles of the SCRUM method:

  • Keeping things simple by chunking (or batching)

  • Customer satisfaction through rapid, continuous delivery of useful software they can get their hands on

  • Working software is delivered frequently (taking weeks rather than months)

  • Working software is the primary measure of progress

  • Late changes or additions in requirements are welcome and can be added to iterations with ease

  • Close, daily cooperation between clients and developers

  • Continuous attention to technical excellence and good design

  • Regular adaptation to changing circumstances

Because the stakeholders can see and review the current application at the end of each sprint, it gives them a valuable opportunity to change anything they don't like. Changes made at a later stage (such as when all use cases are covered) would take a longer time to absorb into the application, and can sometimes derail the project completely.

Project Transition and Release

At the end of the last iteration, the project will be in alpha stage, which means that all of the main use cases are implemented. The alpha build of the software is the build delivered to the software testers, usually internal to the organization/community developing the software. Usually, no end users see this phase. Alpha stage software is never completely bug free, but functionally covers all use cases.

Once the alpha testing is over, the project moves to the beta phase, which means that external users/end users (outside the company or organization that developed the software) can now start checking the system and using it.

A beta version is the first version released outside of the organization or community that developed the software, for the purpose of evaluation or real-world testing. Beta level software generally includes all of the features, but may also include known issues and bugs of a less serious variety. Once the beta phase is over and all major bugs have been fixed, the project is in an RTM (Release To Manufacture) stage, or in the Gold Edition.

The following is a summary table showing all of the important project phases:

Project Stages

Project Pitfalls

1. Initiation: Understanding project needs from a very high-level perspective and conducting a small feasibility study

A poor feasibility study can hinder or block project progress later on; it is very important to see what really can be achieved and what cannot, given the current technological offerings

2(a) Planning: Understand the project needs comprehensively, develop business use cases, detailed project plan, high-level architecture, class diagrams, data model, sequence diagrams, prototype

Detailed planning and project management is the key here; without a well laid out plan the project is doomed to fail. Wrong estimates or an improper choice of architecture can sound the death knell for the project's progress

2(b) Development: Work iteratively on selected use cases, QA process follows

Lack of unit tests, deviations in architecture, patching and short circuiting code to avoid missing deadlines

3. Transition: Beta testing, release docs, deployment instructions, bug fixing

Without proper usability and integration testing, success is not possible

4. Support: Provide support after the Gold/RTM release

Good support is very crucial