Monday 1 August 2016

ASSIGNMENT OF ADVANCED SOFTWARE ENGINEERING

Question No. 1 What do you mean by product life cycle? Explain the seven stages of product life cycle?
Product Life Cycle:-
In the previous section, we discussed the frequently used software engineering terminologies. You learnt the difference between a product and a process. A series of steps is required to manufacture a product. Let us in this section, the different stages in the product life cycle. The product developed should satisfy the customer. The series of steps involved in developing the product is called the product life cycle. The seven stages in a product life cycle are:
A set of deliverables that is delivered to a customer is called a product. It includes documentation, manuals, source code, etc. We can define a process as the set of activities that are followed for producing a product. Process is the way for producing software. The process should be efficient to get good quality products.
Let us now discuss in detail the seven stages of the product life cycle.

1. Analysis stage:-


In this stage, the development team analyzes the problem in an existing application or finds new ideas for an application. After identifying the idea, the development team needs to determine the scope of the problem. After identifying the scope, the development team can easily identify the essential components necessary for the product development. The important thing for software development is the system requirement. The system requirement differs based on the software product. The development team should carefully analyze the requirements needed for the product development.

2. Design stage:-


 This is an important stage in the product life cycle. In this stage, the development team designs the individual components and creates the blue prints. The analysis done in the analysis stage helps to create the design documents. Designs such as database design, functional specification design, and document design take place in this stage. The design needs to be done carefully because the development stage depends upon the design created during the design stage. If the design prepared is well structured, it reduces the time taken in the upcoming stages of the product life cycle.

3. Development stage:-


In this stage, the actual development of the product takes place according to the blue print created in the design stage. The team members start writing code for the product. The product is divided into different modules and each member is allotted a separate module to develop the product. The code is written based on the chosen technology. Generation of code takes place after the code is developed. The code is executed after it is generated.

4. Testing stage:-


It is essential to test each and every product before it is launched in the market. The quality assurance cannot be given to a product if it is not tested. We must test the developed product to ensure that it meets the specifications stated in the design stage. In this stage, the developed product is tested and reports are prepared. The report describes the errors in the developed products. There are different methods for testing the developed product. Unit testing and system testing methods are used for testing the product. After this stage, the life cycle again moves to the development stage to correct the errors identified in this stage. After correcting the errors, the product is again tested. This process continues till the product is found to be error-free. There are some tools available to test the developed product. We can use these tools to test a product and identify the defects. These tools are used to make the testing easy and to get an error-free product. The test scenarios are written by the testers to check the testing needs of software application. The test scenario drives the test cases which are related to the requirements and designs. Depending upon the type of requirement and design, the test scenarios are addressed as functional and structural. The test scenario should be feasible, clear, complete, and cover all requirements. The test scenario and the test case should be prioritized as per the requirements. After completing product testing, versions of completed product are supplied to the clients for testing onsite. The first version is the alpha release and the corrected version is the beta release. Usually the final version is the beta release.

5. Implementation stage:-


This is known as First Customer Ship (FCS) in software industry. After the development and testing stage the product moves to the implementation stage. In this stage the product is taken to the end users.

6. Maintenance stage:-


 The software maintenance stage is the longest stage in the software life cycle. This stage is distinguished in terms of costs. About 90% of the total life cycle cost of the software is consumed in the maintenance stage. The software maintenance activity is classified into four types. They are perfective, adaptive, corrective and preventive. The maintenance of the software is not performed by the person who creates the product. In this stage, the problems raised by the customers after releasing the product are rectified. The testing team tests the product again and rectifies the errors that are raised by the customers.

7. End-of-life stage/Retirement stage:-


The final stage of the life cycle is the retirement stage. This stage is reached after many years of service. In this stage, the product is replaced with a newer version that has enhanced features. Thus, the old product’s life cycle comes to an end. This is the end stage for the old product. There are many instances in which the current version is replaced with new version. The true retirement occurs when a product has outgrown its usefulness. The functionality of the product is removed from the computer. Now that you are familiar with the product life cycle, let us next discuss the project life cycle models. A project life cycle can be a subset of a product life cycle. This means that a product life cycle can have many project life cycles.
Question No. 2 List any ten major principles of agile software?
Agile Software:-
Although different developers prefer different flavors of agile, they realized that all flavors have some common principles. The agile Manifesto was formulated by 17 software developers who gathered in February 2001 in the Wasatch Mountains of Utah. It was formulated to find a common baseline for their perceptions of software development process and to develop the common elements previously implemented in various software organizations. The Agile Manifesto presents an alternative strategy to the software development process that had been implemented during the past 40 years, starting from the early phases of the development of complex software systems. Different agile methods apply the Agile Manifesto and some of them are:
A.  Scrum
B.   DSDM
C.  Extreme Programming
D.  Crystal
E.   Adaptive Software Development
F.   Feature-Driven Development
List any ten major principles of agile software
1.     Satisfying the customers with early and continuous delivery of valuable software is agile software’s major priority.
2.    Welcoming varying requirements, even during the later phases of development. Agile processes also support change for the customer’s competitive benefit.
3.    Delivering working software often, with a shorter timescale is preferred.
4.    Involving business people and developers in development of agile process and making them work together every day during the project.
5.    Developing projects around motivated individuals and also providing those individuals the environment and the support they require, and trusting them to get the work done.
6.    Considering face-to-face conversation as the most proficient and useful way of conveying information to a development team.
7.    Considering working software as the major measure of progress.
8.    Supporting sustainable growth by ensuring that the sponsors, developers, and customers maintain a steady pace indefinitely.
9.    Providing constant attention to technical excellence and improving agility with good design.
10.  Simplifying, which is the art of maximizing the amount of work performed, is very crucial.
Question No. 3 List the four developer practices of XP. Explain briefly about Adopt test-driven development?
Developer Practices:-
Developers must work together regardless of the size of the project. If the team is able to work smoothly, then they can deliver high quality software. As everyone in the team contributes to the project, XP dedicates several practices to improve the teamwork. These practices strengthen the good programming practices of the team. They also help to nurture and guide the less experienced developers of the team. Thus, XP developer practices help to keep everyone in the team on track.
1.   Adopt test-driven development
2.   Practice pair programming
3.   Adopt collective ownership
4.   Integrate continually
Adopt test-driven development:-
The main reason for adopting test-driven development practice is to prove that the code developed works based on the requirement. XP emphasizes the need for testing every code as and when it is developed. You must test the code to check if the code actually does what it is intended to do and if anything can make the code to behave erratically. Usually traditional testing is carried out by writing test cases to check the conditions under which the software fails. But XP also writes test cases to find out if the software passes the test. In XP, the development of a feature is said to be finished only when it passes the test. Therefore, test your code or feature whenever you get an opportunity to run a test. This gives the developer the confidence about the code. Also, you must run a test before and after refactoring your code. You must remember that finding a bug in few lines of code is easy, but finding the bug in a code with hundreds of lines is difficult. Many automated testing tools or frameworks are available for testing. Using a good testing framework helps to save lot of time and resources. It also gives an accurate feedback about the status of the project any time. Manual testing may fail to identify or overlook certain bugs, but it does not happen in automated testing. A good test must try to explore one issue at a time. When a code fails the test, you must have sufficient information to track the test to identify and debug the software. Therefore, you must use simple tests as they enable easy debugging when compared to complex tests. Usually tests are of two types:
Unit test - This test is carried out to find out the behavior of the individual pieces or functions of the software.
Acceptance test - This test is carried out to verify that the software features match the business requirements and expectations of the customer.
Every unique piece of code requires its own test case. The test case probes the limits of expected and unexpected use of the codes. It also serves as a guide for any future changes. Usually a well written unit test also tells you how to use the code. The acceptance test case is written based on the customer’s requirements. You must work with the customer to write automated acceptance tests to prove to the customer that all the requirements are met successfully. Only when the software passes the acceptance test, the development is complete. Test-driven development supports refactoring to improve the software efficiency. It helps developers to ensure that the system is kept in good condition during every release. It also serves as a benchmark for future development. Any test-driven development method requires positive peer pressure to help developers to overcome the initial setbacks of test-driven development method and continue testing even if it seems difficult. At the same time, it is also essential to clearly communicate with the customer and obtain the test cases from the customer for acceptance tests.
Question No. 4 What is a story card? Briefly explain the various steps in creating a story card.
Story Card:-
The customers convey their requirements of a desired feature as a story card. A story card informs the developer the customer’s specification. Based on the inputs the customer provides, the developers estimate the schedule to develop the required software (or software feature). As developers also contribute in iteration planning, we can consider it developer driven. The customer has to prepare for the iteration planning session by giving more details about the stories. This can be done in the following ways:
1.  The customer can briefly explain the story. As this is simple and verbal, it is effective.
2. The customer can present a written description of the story details. This can be of few pages, and it mainly tries to corroborate all the important aspect of the story.
3. The customer can provide an acceptance test for the story.
The discussion between the customer and developer results in the production of task cards. A task is characterized by the total effort it needs i.e., actual number of person days required to implement the story card. Usually a task is assigned to one team member or pair of developers for developing the code.
The business changes can affect the pending stories as the project progresses. The customer re-evaluates their business requirements when necessary. This affects the tasks as when the stories change, even the tasks also change. Therefore, you have to evaluate the tasks that may have changed after planning the iteration. Usually stories are written along with acceptance tests to check whether the story has been implemented correctly. The acceptance test is written on a card called index card. Each story will have one acceptance test, but sometime one acceptance test will be written for more than one story or one story may have more than one acceptance test. However, the story and its respective acceptance test have to be implemented in the same iteration. The developer estimates the time to complete each story. This is done by assigning each story a number of story points or milestones. Therefore, every iteration has number of story points that are implemented one after the other through the course of the iteration. These story points determine the project velocity. At the end of each iteration, the customer and the developer have to identify the number of story points actually implemented.
Question No. 5 Explain XP prerequisites.

1. Team agreement:-


The team’s agreement to use XP is as important as management support. If team members do not want to use XP, it’s not likely to work. XP assumes that each team member’s willingness to adopt it. It is not a good practice to force the process on somebody who is resisting it.
2.  A collocated team:-
XP relies on high-frequency and high-speed communication for most of its practices. To achieve that communication, the team members must sit together in the same room.  (Source: Reproduced from Schuh, P .(2003). Integrating Agile Development in the Real World, 1st ed. USA: Charles River Media, Inc. p 280) The seating arrangement of a collocated team is based on a ’caves and commons’ approach. The objective of this approach is to provide people access to ’commons’ where they can interact together, and ’caves’ where they can work alone.
3. On-site customers:-
On-site customers are essential to the success of an XP team. They, led by the product manager, decide which features the team will develop. These decisions impact the value of the software. Therefore, the customer is part of the development environment. Having an on-site customer is the best way to get immediate feedback. When the customers are on-site they can answer queries immediately. When both customer and developers are guided by a reflective mode of thinking, they can improve their understanding of the software or application being developed. For example, when after some problem is corrected, the customer and the developers can reflect on their current understanding of the software or application and compare it with the understanding that preceded it. XP encourages short release cycles. Consider the problems when the customer only sees new releases of the software every few months. If there is considerable time in between feature releases, the customers cannot give real-time feedback to the programming team. Months of hard work may go waste if customers change their minds, or if the programmers do not deliver what is expected by the customer.
4. The right team size:-
According to the proponents of XP, certain factors make some projects well suited for this methodology. The first major issue is the size of the team. In general, XP is most effective in cases where small teams, of usually two to 12 programmers, are involved. Small teams are more flexible, and better able to adapt to changes than 50 or 100-person programming giant teams. An XP team cannot just have one member. It needs an even number of programmers due to the XP concept of pair programming. To use this approach, pair the team. Each pair must share a single computer and each person in the pair must focus on a different angle of the problem. While one developer types and actually applies and implements the code, the second developer must check for syntax and spelling errors. The other developer must understand how the current module that is being developed fits into the whole work. The two developers in the pair alternate their roles as required and brainstorm on the best approach a particular problem. Teams with less than four programmers may not have the intellectual diversity needed. They will also have difficulty using pair programming, which is a significant support mechanism in XP. However, large teams face challenges of coordination. Although experienced teams can handle those challenges efficiently, a new XP team may experience difficulties in the beginning.
Use all XP practices:-
XP utilizes all the resources of the project efficiently. It also ensures that every practice directly contributes to the development of valuable software. The recommended practices of XP are as follows:
I. A brand-new codebase
II. Strong design skills
III. A language that is easy to refactor
IV. An experienced programmer-coach
V. A friendly and cohesive team

Question No. 6 Explain in detail about version control tools?
Version control:-
Version control tools are essential building blocks of any software development projects. Concurrent Version System (CVS) is the most popular version control system. CVS keeps a master copy of each file on a server known as repository. The repository has a history of all the files. You can view history of changes, recover previous revisions of files and mark particular revisions with tag names. The files can be maintained in a predictable and repeatable way by using tools like CVS. The copy of the entire code is available for the programmers on their computer and they can make changes without affecting other programmers. The programmers commit the modified files to the CVS repository after the current task is completed. The revised files are visible to other programmers and they can choose to update to the new versions when they are ready. Working in small steps is a necessity because XP requires pair programming. If you work on a task that takes several days to complete, then you cannot switch your programming partners several times. A key to XP success is completing a task within a few hours by breaking the project into smaller tasks. Working in small steps also helps when using CVS because your personal workspace is always synchronized with the repository. Multiple programmers may work on a team on the same files concurrently with CVS. So you have to merge changes and resolve conflicts before committing your modified code to repository. The conflicts can be minimized by performing frequent updates. The likelihood of conflict increases with work done by other team members if the programmer does not get the code for days and weeks at a time. CVS allows concurrent edits to the same files but other version control programs force programmers to lock files before making changes. While exclusive locking seems safer than concurrent editing, it can impede development if other team members are unable to make changes. When working with locking version control tools, working in small steps is the best way to avoid problems. The likelihood of lock connection is reduced if each programmer locks only few files at a time.

------------------------------------------------------------------------------------------------

No comments:

Post a Comment