course name : software engineering and project · software engineering is the application of a...

176
Course Name : Software Engineering and Project Management Course Code : 310243 Credit : Th-03 Examination Scheme: In-Sem(Paper) : 30 Marks End-Sem(Paper) : 70 Marks In-sem Exam : End-Sem Exam :

Upload: others

Post on 14-Mar-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Course Name : Software Engineering and Project

Management

Course Code : 310243

Credit : Th-03

Examination Scheme:

In-Sem(Paper) : 30 Marks

End-Sem(Paper) : 70 Marks

In-sem Exam :

End-Sem Exam :

Page 2: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Prerequisite & Course Objectives

Prerequisite: Fundamentals of Programming Languages

Course Objectives:

To learn and understand the principles of Software Engineering

To be acquainted with methods of capturing, specifying, visualizing and analyzing software requirements.

To apply Design and Testing principles to S/W project development.

To understand project management through life cycle of the project.

To understand software quality attributes.

Page 3: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Course : Software Engineering and Project Management

Unit 1

Introduction to Software Engineering, Software Process

Models

Page 4: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Syllabus

Software Engineering Fundamentals : Nature of Software , Software Engineering Principles, The Software Process , Software Myths

Process Models : A Generic Process Model, Prescriptive Process Models: The Waterfall, Incremental Process(RAD), Evolutionary Process, Unified Process, Concurrent.

Advanced Process Models & Tools : Agile software development: Agile methods, Plan-driven and agile development, Extreme programming Practices, Testing in XP, Pair programming. Introduction to agile tools: JIRA, Kanban

Case Studies: An information system (mental health-care system), wilderness weather system

Page 5: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

What is it ?

Computer software is the product that software professionals build and then support over the long term.

It encompasses (keeps) programs that execute within a computer of any size and architecture, content that is presented as the computer programs execute, and descriptive information in both hard copy and virtual forms that encompass virtually any electronic media.

Software engineering encompasses a process, a collection of methods (practice) and an array of tools that allow professionals to build high-quality computer software.

Page 6: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

What does it ?

Software engineers build and support software, and virtually everyone in the industrialized world uses it either directly or indirectly.

Why it is important ?

Software is important because it affects nearly every aspect of our lives and has become pervasive in our commerce, our culture, and our everyday activities.

Software engineering is important because it enables us to build complex systems in a timely manner and with high quality.

Page 7: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

What are the steps ?

You build computer software like you build any successful product, by applying an agile, adaptable process that leads to a high-quality result that meets the needs of the people who will use the product.

You apply a software engineering approach.

What is the work product?

From the point of view of a software engineer, the work product is the set of programs, content (data), and other work products that are computer software.

But from the user’s viewpoint, the work product is the resultant information that somehow makes the user’s world better.

Page 8: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Software Engineering Fundamentals :

Nature of Software

Page 9: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Today, software takes on a dual role. It is a product, and at the same time, the vehicle for delivering a product.

As a product, it delivers the computing potential embodied by computer hardware or more broadly, by a network of computers that are accessible by local hardware.

Whether it resides within a mobile phone or operates inside a mainframe computer, software is an information transformer producing, managing, acquiring, modifying, displaying, or transmitting information that can be as simple as a single bit or as complex as a multimedia presentation derived from data acquired from dozens of independent sources.

Page 10: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

As the vehicle used to deliver the product, software acts as the basis for the control of the computer (operating systems), the communication of information (networks), and the creation and control of other programs (software tools and environments)

Software delivers the most important product of our time information.

It transforms personal data (e.g., an individual’s financial transactions) so that the data can be more useful in a local context; it manages business information to enhance competitiveness; it provides a gateway to worldwide information networks (e.g., the Internet), and provides the means for acquiring information in all of its forms.

Page 11: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

How should we define software ?

Software is:

(1) instructions (computer programs) that when executed, it provide desired features, function, and performance;

(2) data structures that enable the programs to adequately manipulate information, and

(3) descriptive information in both hard copy and virtual forms that describes the operation and use of the programs.

Therefore, software has characteristics that are

considerably different than those of hardware :-

Page 12: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

1. Software is developed or engineered; it is not manufactured in the classical sense.

Although some similarities exist between software development and hardware manufacturing, the two activities are fundamentally different.

In both activities, high quality is achieved through good design, but the manufacturing phase for hardware can introduce quality problems that are nonexistent (or easily corrected) for software.

Both activities are dependent on people, but the relationship between people applied and work accomplished is entirely different.

Both activities require the construction of a “product,” but the approaches are different.

Software costs are concentrated in engineering.

This means that software projects cannot be managed as if they were manufacturing projects.

Page 13: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Figure 1.1 :- Failure curve for Hardware

Page 14: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Figure 1.1 depicts failure rate as a function of time for hardware.

The relationship, often called the “bathtub curve,” indicates that hardware exhibits relatively high failure rates early in its life (these failures are often attributable to design or manufacturing defects); defects are corrected and the failure rate drops to a steady-state level (hopefully, quite low) for some period of time.

As time passes, however, the failure rate rises again as hardware components suffer from the cumulative effects of dust, vibration, abuse, temperature extremes, and many other environmental maladies.

Stated simply, the hardware begins to wear out.

Page 15: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

2. Software doesn’t “wear out.”

Software is not susceptible to the environmental maladies that cause hardware to wear out.

In theory, therefore, the failure rate curve for software should take the form of the “idealized curve” shown in Figure 1.2.

Page 16: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Figure 1.2 :- Failure curves for Software

Page 17: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

The idealized curve is a gross oversimplification of actual failure models for software.

However, the implication is clear—software doesn’t wear out. But it does deteriorate!

During its life, software will undergo change.

As changes are made, it is likely that errors will be introduced, causing the failure rate curve to spike as shown in the “actual curve”

(Figure 1.2).

Before the curve can return to the original steady-state failure rate, another change is requested, causing the curve to spike again. Slowly, the minimum failure rate level begins to rise—the software is deteriorating due to change.

Page 18: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

When a hardware component wears out, it is replaced by a spare part.

There are no software spare parts.

Every software failure indicates an error in design or in the process through which design was translated into machine executable code.

Therefore, the software maintenance tasks that accommodate requests for change involve considerably more complexity than hardware maintenance.

Page 19: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

3. Although the industry is moving toward component-based

construction, most software continues to be custom built.

As an engineering discipline evolves, a collection of standard design components is created.

Standard screws and off-the-shelf integrated circuits are only two of thousands of standard components that are used by mechanical and electrical engineers as they design new systems.

The reusable components have been created so that the engineer can concentrate on the truly innovative elements of a design, that is, the parts of the design that represent something new.

Page 20: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

In the hardware world, component reuse is a natural part of the engineering process.

In the software world, it is something that has only begun to be achieved on a broad scale.

A software component should be designed and implemented so that it can be reused in many different programs.

For example, today’s interactive user interfaces are built with reusable components that enable the creation of graphics windows, pull-down menus, and a wide variety of interaction mechanisms.

The data structures and processing detail required to build the interface are contained within a library of reusable components for interface construction.

Page 21: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Software Application Domains

Today, seven broad categories of computer software present continuing challenges for software engineers:

1. System software A collection of system programs known as System Software.

Some system software (e.g., compilers, editors, and file management utilities) processes complex, but determinate, information structures.

Other systems applications (e.g., operating system components, drivers, networking software, telecommunications processors) process largely indeterminate data.

Software is determinate if the order and timing of inputs, processing, and outputs is predictable.

Page 22: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Software is indeterminate if the order and timing of inputs, processing, and outputs cannot be predicted in advance.

Page 23: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

2. Application software Stand-alone programs that solve a specific business need.

Applications in this area process business or technical data in a way that facilitates business operations or management/technical decision making.

In addition to conventional data processing applications, application software is used to control business functions in real time.

3. Engineering/scientific software It has been characterized by “number crunching” algorithms.

Applications range from astronomy to volcanology, from automotive stress analysis to space shuttle orbital dynamics, and from molecular biology to automated manufacturing.

Page 24: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

4. Embedded software They resides within a product or system and is used to implement

and control features and functions for the end user and for the system itself.

Embedded software can perform limited and esoteric functions (e.g., key pad control for a microwave oven) or provide significant function and control capability (e.g., digital functions in an automobile such as fuel control, dashboard displays, and braking systems).

5. Product-line software They designed to provide a specific capability for use by many

different customers.

Product-line software can focus on a limited and esoteric marketplace. (e.g., inventory control products) or address mass consumer markets (e.g., word processing, spreadsheets, computer graphics, multimedia, entertainment, database management, and personal and business financial applications).

Page 25: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

6. Web Applications They are also called as “WebApps,” this network-centric software

category spans a wide array of applications.

In their simplest form, WebApps can be little more than a set of linked hypertext files that present information using text and limited graphics.

7. Artificial intelligence software It makes use of non numerical algorithms to solve complex problems that are

not amenable to computation or straightforward analysis.

Applications within this area include robotics, expert systems, pattern recognition (image and voice), artificial neural networks, theorem proving, and game playing.

Page 26: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Software Engineering

Page 27: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

When a new application or embedded system is to be built, many voices must be heard.

And it sometimes seems that each of them has a slightly different idea of what software features and functions should be delivered.

It follows that a concerted effort should be made to understand the problem before a software solution is developed.

The information technology requirements demanded by individuals, businesses,

and governments grow increasing complex with each passing year.

Large teams of people now create computer programs.

Sophisticated software that was once implemented in a predictable, self-contained, computing environment is now embedded inside everything from consumer electronics to medical devices to weapons systems.

It follows that design becomes a pivotal activity.

Page 28: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

o Individuals, businesses, and governments increasingly rely on software for strategic and tactical decision making as well as day-to-day operations and control.

o If the software fails, people and major enterprises can experience anything from minor inconvenience to catastrophic failures.

o It follows that software should exhibit high quality.

As the perceived value of a specific application grows, the likelihood is that

its user base and longevity will also grow. As its user base and time-in-use increase, demands for adaptation and enhancement will also grow.

It follows that software should be maintainable.

Page 29: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Software engineering is the establishment and use of sound engineering principles in order to obtain economically software that is reliable and works efficiently on real machines.

Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software.

Software engineering is a layered technology.

Referring to Figure 1.3, any engineering approach (including software engineering) must rest on an organizational commitment to quality.

Page 30: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Figure 1.3 :- Software Engineering Layers

Page 31: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

The bedrock that supports software engineering is a Quality focus.

The foundation for software engineering is the Process layer. The software engineering process is the glue that holds the technology layers together and enables rational and timely development of computer software.

Process defines a framework that must be established for effective delivery of software engineering technology.

The software process forms the basis for management control of software projects.

Software engineering Methods provide the technical how-to’s for building software.

Methods encompass a broad array of tasks that include communication, requirements analysis, design modeling, program construction, testing, and support.

Page 32: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Software engineering methods rely on a set of basic principles that govern each area of the technology and include modeling activities and other descriptive techniques.

Software engineering tools provide automated or semi automated support for the process and the methods.

When tools are integrated so that information created by one tool can be used by another, a system for the support of software development, called Computer-aided software engineering, is established.

Page 33: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

The Software Process

Page 34: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

A Process is a collection of activities, actions, and tasks that

are performed when some work product is to be created.

An activity strives to achieve a broad objective (e.g., communication with stakeholders) and is applied regardless of the application domain, size of the project, complexity of the effort, or degree of rigor with which software engineering is to be applied.

An action (e.g., architectural design) encompasses a set of tasks that produce a major work product (e.g., an architectural design model).

A task focuses on a small, but well-defined objective (e.g., conducting a unit test) that produces a tangible outcome.

Page 35: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Process is an adaptable approach that enables the people doing the work (the software team) to pick and choose the appropriate set of work actions and tasks.

A Process framework establishes the foundation for a complete software engineering process by identifying a small number of framework activities that are applicable to all software projects, regardless of their size or complexity.

In addition, the process framework encompasses a set of umbrella activities that are applicable across the entire software process.

A generic process framework for software engineering encompasses five activities:

Page 36: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

1. Communication Before any technical work can commence, it is critically important to

communicate and collaborate with the customer and other stakeholders.

The intent is to understand stakeholders’ objectives for the project and to gather requirements that helps to define software features and functions.

2. Planning Any complicated journey can be simplified if a map exists.

A software project is a complicated journey, and the planning activity creates a “map” that helps guide the team as it makes the journey.

The map—called a software project plan.

Page 37: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

3. Modeling Whether you’re a landscaper, a bridge builder, an aeronautical

engineer, a carpenter, or an architect, you work with models every day.

You create a “sketch” of the thing so that you’ll understand the big picture—what it will look like architecturally and many other characteristics.

If required, you refine the sketch into greater and greater detail in an effort to better understand the problem and how you’re going to solve it.

A software engineer does the same thing by creating models to better understand software requirements and the design that will achieve those requirements.

Page 38: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

4. Construction This activity combines code generation (either manual or automated) and the

testing that is required to uncover errors in the code.

5. Deployment The software (as a complete entity or as a partially completed

increment) is delivered to the customer who evaluates the delivered product and provides feedback based on the evaluation.

A stakeholder is anyone who has a stake in the successful outcome of the project—business managers, end users, software engineers, support people.

Page 39: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

These five generic framework activities can be used during the development of small, simple programs, the creation of large Web applications, and for the engineering of large, complex computer-based systems.

The details of the software process will be quite different in each case, but the framework activities remain the same.

Software engineering process framework activities are complemented by a number of umbrella activities.

In general, umbrella activities are applied throughout a software project and help a software team manage and control progress, quality, change, and risk.

Typical umbrella activities include:

Page 40: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

1. Software project tracking and control Allows the software team to assess progress against the project plan and take

any necessary action to maintain the schedule.

2. Risk Management Assesses risks that may affect the outcome of the project or the quality

of the product.

3. Software Quality Assurance Defines and conducts the activities required to ensure software quality.

4. Techincal Reviews

Assesses software engineering work products in an effort to uncover and remove errors before they are propagated to the next activity.

Page 41: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

5. Measurement Defines and collects process, project, and product measures

that assist the team in delivering software that meets stakeholders’ needs; can be used in conjunction with all other framework and umbrella activities

6. Software Configuration Management Manages the effects of change throughout the software process.

7. Reusability Managemet Defines criteria for work product reuse (including software

components) and establishes mechanisms to achieve reusable components.

Page 42: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

8. Work product preparation and production Encompasses the activities required to create work products such as models,

documents, logs, forms, and lists.

Page 43: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

How does process model differs from one another ?

The software engineering process is not a rigid prescription that must be followed dogmatically by a software team.

Rather, it should be agile and adaptable (to the problem, to the project, to the team, and to the organizational culture).

Therefore, a process adopted for one project might be significantly different than a process adopted for another project.

Among the differences are

Overall flow of activities, actions, and tasks and the interdependencies among them.

Degree to which actions and tasks are defined within each framework activity.

Degree to which work products are identified and required.

Manner in which quality assurance activities are applied.

Page 44: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Manner in which project tracking and control activities are applied.

Overall degree of detail and rigor with which the process is described.

Degree to which the customer and other stakeholders are involved with the project.

Level of autonomy given to the software team.

Degree to which team organization and roles are prescribed.

Page 45: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Software Engineering Practice

Page 46: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

In the sections that follow, you’ll gain a basic understanding of the generic concepts and principles that apply to framework activities

The Essence of Practice

1. Understand the problem (communication and analysis). 2. Plan a solution (modeling and software design). 3. Carry out the plan (code generation). 4. Examine the result for accuracy (testing and quality assurance).

Page 47: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

1. Understand the problem (communication and analysis).

It’s sometimes difficult to admit, but most of us suffer from hubris (presumption) when we’re presented with a problem. We listen for a few seconds and then think, Oh yeah, I understand, let’s get on with solving this thing.

Unfortunately, understanding isn’t always that easy. It’s worth spending a little time answering a few simple questions:

Who has a stake in the solution to the problem? That is, who are the stakeholders?

What are the unknowns? What data, functions, and features are required to properly solve the problem?

Can the problem be compartmentalized? Is it possible to represent smaller problems that may be easier to understand?

Can the problem be represented graphically? Can an analysis model be created?

Page 48: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

2. Plan the Solution

Now you understand the problem (or so you think) and you can’t wait to begin coding. Before you do, slow down just a bit and do a little design.

Have you seen similar problems before? Are there patterns that are recognizable in a potential solution? Is there existing software that implements the data, functions, and features that are required?

Has a similar problem been solved? If so, are elements of the solution reusable?

Can sub problems be defined? If so, are solutions readily apparent for the sub problems?

Can you represent a solution in a manner that leads to effective implementation? Can a design model be created?

Page 49: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

3. Carry out the Plan

The design you’ve created serves as a road map for the system you want to build. There may be unexpected detours, and it’s possible that you’ll discover an even better route as you go, but the “plan” will allow you to proceed without getting lost.

Does the solution conform to the plan? Is source code traceable to the design model?

Is each component part of the solution provably correct? Have the design and code been reviewed, or better, have correctness proofs been applied to the algorithm?

Page 50: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

4. Examine the Result

You can’t be sure that your solution is perfect, but you can be sure that you’ve designed a sufficient number of tests to uncover as many errors as possible.

Is it possible to test each component part of the solution? Has a reasonable testing strategy been implemented?

Does the solution produce results that conform to the data, functions, and features that are required? Has the software been validated against all stakeholder requirements?

In fact, it’s reasonable to state that a commonsense approach to software engineering will never lead you astray (away from the right path).

Page 51: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Software Engineering Principles

Page 52: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

David Hooker [Hoo96] has proposed seven principles that focus on software engineering practice as a whole. They are reproduced in the following paragraphs:

1. The First Principle: The Reason It All Exists A software system exists for one reason: to provide value to its users. All

decisions should be made with this in mind.

Before specifying a system requirement, before noting a piece of system functionality, before determining the hardware platforms or development processes, ask yourself questions such as: “Does this add real value to the system?” If the answer is “no,” don’t do it. All other principles support this one.

Page 53: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

2. The Second Principle: KISS (Keep It Simple, Stupid!) Software design is not a haphazard (carelessness) process. There are many

factors to consider in any design effort.

All design should be as simple as possible.

This facilitates having a more easily understood and easily maintained system.

This is not to say that features, even internal features, should be discarded in the name of simplicity.

Indeed, the more elegant designs are usually the more simple ones. Simple also does not mean “quick and dirty.”

Page 54: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

3. The Third Principle: Maintain the Vision A clear vision is essential to the success of a software project .

Without conceptual integrity, a system threatens to become a patchwork of incompatible designs, held together by the wrong kind of screws. . . . Compromising the architectural vision of a software system weakens and will eventually break even the well-designed systems.

Having an empowered architect who can hold the vision and enforce compliance helps ensure a very successful software project.

Page 55: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

4. The Fourth Principle: What You Produce, Others Will Consume So, always specify, design, and implement knowing someone else will have to

understand what you are doing.

The audience for any product of software development is potentially large.

Specify with an eye to the users. Design, keeping the implementers in mind. Code with concern for those that must maintain and extend the system.

Someone may have to debug the code you write, and that makes them a user of your code. Making their job easier adds value to the system.

Page 56: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

5. The Fifth Principle: Be Open to the Future A system with a long lifetime has more value. In today’s computing

environments, where specifications change on a moment’s notice and hardware platforms are obsolete just a few months old, software lifetimes are typically measured in months instead of years.

However, true “industrial-strength” software systems must endure far longer.

To do this successfully, these systems must be ready to adapt to these and other changes.

Systems that do this successfully are those that have been designed this way from the start.

Page 57: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

6. The Sixth Principle: Plan Ahead for Reuse Reuse saves time and effort. Achieving a high level of reuse is

arguably the hardest goal to accomplish in developing a software system.

The reuse of code and designs has been proclaimed as a major benefit of using object-oriented technologies.

However, the return on this investment is not automatic. To leverage (strategic advantage) the reuse possibilities that object-oriented [or conventional] programming provides requires forethought and planning.

There are many techniques to realize reuse at every level of the system development process. . . .

Planning ahead for reuse reduces the cost and increases the value of both the reusable components and the systems into which they are incorporated.

Page 58: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

7. The Seventh principle: Think! When you think about something, you are more likely to do it right. You also

gain knowledge about how to do it right again.

If you do think about something and still do it wrong, it becomes a valuable experience.

A side effect of thinking is learning to recognize when you don’t know something, at which point you can research the answer.

When clear thought has gone into a system, value comes out.

Applying the first six principles requires intense thought, for which the potential rewards are enormous.

( If every software engineer and every software team simply followed Hooker’s seven principles, many of the difficulties we experience in building complex computer-based systems would be eliminated. )

Page 59: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Software Myths

Page 60: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Software myths—erroneous beliefs about software and the process that is used to build it—can be traced to the earliest days of computing.

Myths have a number of attributes that make them insidious.

For instance, they appear to be reasonable statements of fact (sometimes containing elements of truth), they have an intuitive feel, and they are often promulgated by experienced practitioners who

“know the score.”

1. Management myths

Managers with software responsibility, like managers in most disciplines, are often under pressure to maintain budgets, keep schedules from slipping, and improve quality.

Page 61: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Myth : We already have a book that’s full of standards and procedures for building software. Won’t that provide my people with everything they need to know?

Reality : The book of standards may very well exist, but is it used? Are software practitioners aware of its existence? Does it reflect modern software engineering practice? Is it complete? Is it adaptable? Is it streamlined to improve time-to-delivery while still maintaining a focus on quality? In many cases, the answer to all of these questions is “no.”

Myth : If we get behind schedule, we can add more programmers and catch up (sometimes called the “Mongolian horde” concept).

Reality : Software development is not a mechanistic process like manufacturing. People can be added but only in a planned and well-coordinated manner.

Page 62: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Myth : If I decide to outsource the software project to a third party, I can just relax and let that firm build it.

Reality : If an organization does not understand how to manage and control software projects internally, it will invariably struggle when it out-sources software projects.

Page 63: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

2. Customer myths A customer who requests computer software may be a person at

the next desk, a technical group down the hall, the marketing/sales department, or an outside company that has requested software under contract.

Myths lead to false expectations (by the customer) and, ultimately, dissatisfaction with the developer.

Page 64: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Myth : A general statement of objectives is sufficient to begin writing programs—we can fill in the details later.

Reality : Although a comprehensive and stable statement of requirements is not always possible, an ambiguous “statement of objectives” is a recipe for disaster. Unambiguous requirements

(usually derived iteratively) are developed only through effective and continuous communication between customer and developer.

Myth : Software requirements continually change, but change can be easily accommodated because software is flexible.

Reality : It is true that software requirements change, but the impact of change varies with the time at which it is introduced. When requirements changes are requested early (before design or code has been started), the cost impact is relatively small.

Page 65: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

3. Practitioner’s myths Myths that are still believed by software practitioners have been

fostered by over 50 years of programming culture.

During the early days, programming was viewed as an art form. Old ways and attitudes die hard.

Myth : Once we write the program and get it to work, our job is done.

Reality : Someone once said that “the sooner you begin ‘writing code,’ the longer it’ll take you to get done.” Industry data indicate that between 60 and 80 percent of all effort expended on software will be expended after it is delivered to the customer for the first time.

Page 66: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Myth : Until I get the program “running” I have no way of assessing its quality.

Reality : One of the most effective software quality assurance mechanisms can be applied from the inception of a project the technical review. Software reviews are a “quality filter” that have been found to be more effective than testing for finding certain classes of software defects.

Myth : The only deliverable work product for a successful project is the working program.

Reality : A working program is only one part of a software configuration that includes many elements. A variety of work products (e.g., models, documents, plans) provide a foundation for successful engineering and, more important, guidance for software support.

Page 67: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Myth : Software engineering will make us create voluminous and unnecessary documentation and will invariably slow us down.

Reality : Software engineering is not about creating documents. It is about creating a quality product. Better quality leads to reduced rework. And reduced rework results in faster delivery times.

Page 68: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Process Models

Page 69: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

A Generic Process Model

Page 70: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

When you work to build a product or system, it’s important to go through a series of predictable steps—a road map that helps you create a timely, high-quality result.

The road map that you follow is called a “software process”.

Generic Process Model

A process was defined as a collection of work activities, actions, and tasks that are performed when some work product is to be created.

Each of these activities, actions, and tasks reside within a framework or model that defines their relationship with the process and with one another.

Page 71: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance
Page 72: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

The software process is represented schematically in Figure 2.1.

Referring to the figure, each framework activity is populated by a set of software engineering actions.

Each software engineering action is defined by a task set that identifies the work tasks that are to be completed, the work products that will be produced, the quality assurance points that will be required, and the milestones that will be used to indicate progress.

Figure 2 shows Process flow.

A linear process flow executes each of the five framework activities in sequence, beginning with communication and culminating with deployment (Figure 2.2a)

An iterative process flow repeats one or more of the activities before proceeding to the next (Figure 2.2b).

Page 73: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

An evolutionary process flow executes the activities in a “circular” manner. Each circuit through the five activities leads to a more complete version of the software (Figure 2.2c).

A parallel process flow (Figure 2.2d) executes one or more activities in parallel with other activities (e.g., modeling for one aspect of the software might be executed in parallel with construction of another aspect of the software).

Page 74: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance
Page 75: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance
Page 76: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Figure 2.2 : Process Flow

Page 77: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Prescriptive Process Models:

Page 78: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

We call them as “Prescriptive” because they prescribe a set of process elements—framework activities, software engineering actions, tasks, work products, quality assurance, and change control mechanisms for each project.

Each process model also prescribes a process flow (also called a work flow )—that is, the manner in which the process elements are interrelated to one another.

Page 79: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

1. The Waterfall Model

Page 80: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

There are times when the requirements for a problem are well understood—when work flows from communication through deployment in a reasonably linear fashion.

The waterfall model, sometimes called the classic life cycle,

suggests a systematic, sequential approach to software development that begins with customer specification of requirements and progresses through planning, modeling, construction, and deployment, culminating in ongoing support of the completed software (Figure 2.3) .

A variation in the representation of the waterfall model is called the V-model. Represented in Figure 2.4.

Page 81: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Figure 2.3 : The Waterfall Model

Page 82: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Figure 2.4 : The V- model

Page 83: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

As a software team moves down the left side of the V, basic problem requirements are refined into progressively more detailed and technical representations of the problem and its solution.

Once code has been generated, the team moves up the right side of the V, essentially performing a series of tests (quality assurance actions) that validate each of the models created as the team moved down the left side.

In reality, there is no fundamental difference between the classic life cycle and the V-model.

The V-model provides a way of visualizing how verification and validation actions are applied to earlier engineering work.

The waterfall model is the oldest paradigm for software engineering.

Page 84: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Among the problems that are sometimes encountered when the waterfall model is applied are:

1. Real projects rarely follow the sequential flow that the model proposes. Although the linear model can accommodate iteration, it does so indirectly. As a result, changes can cause confusion as the project team proceeds.

2. Real projects rarely follow the sequential flow that the model

proposes. Although the linear model can accommodate iteration, it does so indirectly. As a result, changes can cause confusion as the project team proceeds.

3. The customer must have patience. A working version of the

program(s) will not be available until late in the project time span. A major blunder, if undetected until the working program is reviewed, can be disastrous.

Page 85: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

The linear nature of the classic life cycle leads to “blocking states” in which some project team members must wait for other members of the team to complete dependent tasks.

In fact, the time spent waiting can exceed the time spent on productive work.

Page 86: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

2. Incremental Process Models (RAD)

Page 87: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Figure 2.4 : The Incremental Model

Page 88: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

The incremental model combines elements of linear and parallel process flow.

For example, word-processing software developed using the incremental paradigm might deliver basic file management, editing, and document production functions in the first increment; more sophisticated editing and document production capabilities in the second increment; spelling and grammar checking in the third increment; and advanced page layout capability in the fourth increment.

It should be noted that the process flow for any increment can incorporate the prototyping paradigm.

When an incremental model is used, the first increment is often a core product. That is, basic requirements are addressed but many supplementary features (some known, others unknown) remain undelivered.

Page 89: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

The core product is used by the customer (or undergoes detailed evaluation).

As a result of use and/or evaluation, plan is developed for the next increment. The plan addresses the modification of the core product to better meet the needs of the customer and the delivery of additional features and functionality.

This process is repeated following the delivery of each increment, until the complete product is produced.

The incremental process model focuses on the delivery of an operational product with each increment.

Early increments are stripped-down versions of the final product, but they do provide capability that serves the user and also provide a platform for evaluation by the user.

Page 90: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Early increments can be implemented with fewer people. If the core product is well received, then additional staff (if required) can be added to implement the next increment. In addition, increments can be planned to manage technical risks.

For example, a major system might require the availability of new hardware that is under development and whose delivery date is uncertain.

It might be possible to plan early increments in a way that avoids the use of this hardware, thereby enabling partial functionality to be delivered to end users without inordinate delay.

Page 91: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

3. Evolutionary Process

Page 92: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Software, like all complex systems, evolves over a period of time.

Business and product requirements often change as development proceeds.

You need a process model that has been explicitly designed to accommodate a product that evolves over time.

Prototyping

Often, a customer defines a set of general objectives for software, but does not identify detailed requirements for functions and features.

In other cases, the developer may be unsure of the efficiency of an algorithm, the adaptability of an operating system, or the form that human machine interaction should take.

In these, and many other situations, a prototyping paradigm may offer the best approach.

Page 93: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

The prototyping paradigm (Figure 2.6) begins with communication.

You meet with other stakeholders to define the overall objectives for the software, identify whatever requirements are known, and outline areas where further definition is mandatory.

A prototyping iteration is planned quickly, and modeling (in the form of a “quick design”) occurs.

A quick design focuses on a representation of those aspects of the software that will be visible to end user.

The quick design leads to the construction of a prototype. The prototype is deployed and evaluated by stakeholders, who provide feedback that is used to further refine requirements.

Page 94: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Figure 2.6 : The Prototyping Paradigm

Page 95: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Ideally, the prototype serves as a mechanism for identifying software requirements.

If a working prototype is to be built, you can make use of existing program fragments or apply tools (e.g., report generators and window managers) that enable working programs to be generated quickly.

Both stakeholders and software engineers like the prototyping paradigm.

Users get a feel for the actual system, and developers get to build something immediately.

Yet, prototyping can be problematic for the following reasons:

Page 96: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

1. Stakeholders see what appears to be a working version of the software, unaware that the prototype is held together haphazardly, unaware that in the rush to get it working you haven’t considered overall software quality or long-term maintainability.

2. As a software engineer, you often make implementation

compromises in order to get a prototype working quickly.

Page 97: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

4. Unified Process

Page 98: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

The Unified Process recognizes the importance of customer communication and streamlined methods for describing the customer’s view of a system.

“Unified method” that would combine the best features of each of their individual object-oriented analysis and design methods.

The result was UML—a unified modeling language that contains a robust notation for the modeling and development of object-oriented systems.

Page 99: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Figure 2.9 : The Unified Process

Page 100: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Phases of the Unified Process

The Inception phase of the UP encompasses both customer communication and planning activities.

By collaborating with stakeholders, business requirements for the software are identified; a rough architecture for the system is proposed; and a plan for the iterative, incremental nature of the ensuing project is developed.

Architecture at this point is nothing more than a tentative outline of major subsystems and the function and features that populate them. Later, the architecture will be refined and expanded into a set of models that will represent different views of the system.

The Elaboration phase encompasses the communication and modeling activities of the generic process model (Figure 2.9).

Page 101: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Elaboration refines and expands the preliminary use cases that were developed as part of the inception phase and expands the architectural representation.

The architectural baseline demonstrates the viability of the architecture but does not provide all features and functions required to use the system.

The Construction phase of the UP is identical to the construction activity defined for the generic software process.

Using the architectural model as input, the construction phase develops or acquires the software components that will make each use case operational for end users.

To accomplish this, requirements and design models that were started during the elaboration phase are completed to reflect the final version of the software increment.

Page 102: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

The Transition phase of the UP encompasses the latter stages of the generic construction activity and the first part of the generic deployment (delivery and feedback) activity.

Software is given to end users for beta testing and user feedback reports both defects and necessary changes.

In addition, the software team creates the necessary support information (e.g., user manuals, troubleshooting guides, installation procedures) that is required for the release.

The Production phase of the UP coincides with the deployment activity of the generic process.

During this phase, the ongoing use of the software is monitored, support for the operating environment (infrastructure) is provided, and defect reports and requests for changes are submitted and evaluated.

Page 103: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

5. Concurrent Model

Page 104: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

The concurrent development model, sometimes called

concurrent engineering, allows a software team to represent iterative and concurrent elements of any of the process models.

Figure 2.8 provides a schematic representation of one software engineering activity within the modeling activity using a concurrent modeling approach.

The activity modeling may be in any one of the states noted at any given time.

Software engineering activities exist concurrently but reside in different states.

Page 105: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Figure 2.8 : One element

of the Concurrent process model

Page 106: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

For example, early in a project the communication activity (not shown in the figure) has completed its first iteration and exists in the awaiting changes state.

The modeling activity (which existed in the inactive state while initial communication was completed, now makes a transition into the under development state.

If, however, the customer indicates that changes in requirements must be made, the modeling activity moves from the under development state into the awaiting changes state.

Concurrent modeling defines a series of events that will trigger transitions from state to state for each of the software engineering activities, actions, or tasks.

This generates the event analysis model correction, which will trigger the requirements analysis action from the done state into the awaiting changes state.

Page 107: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Advanced Process Models & Tools:

Agile software development:

Page 108: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Agile Methods

Page 109: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

What is it ?

Agile software engineering combines a philosophy and a set of development guidelines.

The philosophy encourages customer satisfaction and early incremental delivery of software; small, highly motivated project teams; informal methods; minimal software engineering work products; and overall development simplicity.

An agile team fosters communication and collaboration among all who serve on it.

Why is it important ?

The modern business environment that spawns computer-based systems and software products is fast-paced and ever changing.

Page 110: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

What is an Agile Process ?

Any agile software process is characterized in a manner that addresses a number of key assumptions about the majority of software projects.

1. It is difficult to predict in advance which software requirements will persist and which will change. It is equally difficult to predict how customer priorities will change as the project proceeds.

2. For many types of software, design and construction are

interleaved. That is, both activities should be performed in tandem so that design models are proven as they are created. It is difficult to predict how much design is necessary before construction is used to prove the design.

3. Analysis, design, construction, and testing are not as

predictable (from a planning point of view) as we might like.

Page 111: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

When this heavyweight, plan-driven development approach is applied to small and medium-sized business systems, the overhead involved is so large that it dominates the software development process.

More time is spent on how the system should be developed than on program development and testing.

As the system requirements change, rework is essential and, in principle at least, the specification and design has to change with the program.

Dissatisfaction with these heavyweight approaches to software engineering led a number of software developers in the 1990s to

propose new ‘Agile Methods’.

These allowed the development team to focus on the software itself rather than on its design and documentation.

Page 112: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Agile methods universally rely on an incremental approach to software specification, development, and delivery.

They are best suited to application development where the system requirements usually change rapidly during the development process.

They are intended to deliver working software quickly to customers, who can then propose new and changed requirements to be included in later iterations of the system.

Although these agile methods are all based around the notion of incremental development and delivery, they propose different processes to achieve this.

Page 113: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Two of the most widely used methods: Extreme programming & Scrum.

Agile methods have been very successful for some types of system development:

1. Product development where a software company is developing a small or medium-sized product for sale.

2. Custom system development within an organization, where there is

a clear commitment from the customer to become involved in the development process and where there are not a lot of external rules and regulations that affect the software.

Page 114: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Principles of Agile Methods :-

1. Customer Involvement :- Customers should be closely involved throughout the development process. Their role is provide and prioritize new system requirements and to evaluate the iterations of the system.

2. Incremental delivery :- The software is developed in

increments with the customer specifying the requirements to be included in each increment.

3. People not process :- The skills of the development team should

be recognized and exploited. Team members should be left to develop their own ways of working without prescriptive processes.

4. Embrace change :- Expect the system requirements to change

and so design the system to accommodate these changes. 5. Maintain simplicity :- Focus on simplicity in both the software

being developed and in the development process. Wherever possible, actively work to eliminate complexity from the system.

Page 115: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

In practice, the principles underlying agile methods are sometimes difficult to realize:

1. Although the idea of customer involvement in the development process is an attractive one, its success depends on having a customer who is willing and able to spend time with the development team and who can represent all system stakeholders. Frequently, the customer representatives are subject to other pressures and cannot take full part in the software development.

2. Individual team members may not have suitable personalities for

the intense involvement that is typical of agile methods, and therefore not interact well with other team members.

3. Prioritizing changes can be extremely difficult, especially in

systems for which there are many stakeholders. Typically, each stakeholder gives different priorities to different changes.

Page 116: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

4. Maintaining simplicity requires extra work. Under pressure from delivery schedules, the team members may not have time to carry out desirable system simplifications.

5. Many organizations, especially large companies, have spent years

changing their culture so that processes are defined and followed. It is difficult for them to move to a working model in which processes are informal and defined by development teams.

Page 117: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Plan-driven and agile development

Page 118: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

By contrast, a plan-driven approach to software engineering identifies separate stages in the software process with outputs associated with each stage.

The outputs from one stage are used as a basis for planning the following process activity.

Figure 3.2 shows the distinctions between plan-driven and agile approaches to system specification.

Requirement Engineering = What your program should do ?

Requirement Specification = How you plan to do it ?

Page 119: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Figure 3.2 : Plan-driven and agile specification

Page 120: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

In a plan-driven approach, iteration occurs within activities with formal documents used to communicate between stages of the process.

For example, the requirements will evolve and, ultimately, a requirements specification will be produced.

This is then an input to the design and implementation process. In an agile approach, iteration occurs across activities.

Therefore, the requirements and the design are developed together, rather than separately.

A plan-driven software process can support incremental development and delivery.

It is perfectly feasible to allocate requirements and plan the design and development phase as a series of increments.

Page 121: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

An agile process is not inevitably code-focused and it may produce some design documentation.

To decide on the balance between a plan-based and an agile approach, you have to answer a range of technical, human, and organizational questions:

1. Is it important to have a very detailed specification and design before moving to implementation? If so, you probably need to use a plan-driven approach.

2. Is an incremental delivery strategy, where you deliver the

software to customers and get rapid feedback from them, realistic? If so, consider using agile methods.

3. How large is the system that is being developed? Agile methods are

most effective when the system can be developed with a small co-located team who can communicate informally. This may not be possible for large systems that require larger development teams so a plan-driven approach may have to be used.

Page 122: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

4. What type of system is being developed? Systems that require a lot of analysis before implementation (e.g., real-time system with complex timing requirements) usually need a fairly detailed design to carry out this analysis. A plan-driven approach may be best in those circumstances.

4. What is the expected system lifetime? Long-lifetime systems may require more design documentation to communicate the original intentions of the system developers to the support team. However, supporters of agile methods rightly argue that documentation is frequently not kept up to date and it is not of much use for long-term system maintenance.

Page 123: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Extreme programming

Page 124: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Extreme programming (XP) is perhaps the best known and most widely used of the agile methods.

In extreme programming, requirements are expressed as scenarios (called user stories), which are implemented directly as a series of tasks.

Programmers work in pairs and develop tests for each task before writing the code.

All tests must be successfully executed when new code is integrated into the system.

There is a short time gap between releases of the system.

Figure 3.3 illustrates the XP process to produce an increment of the system that is being developed.

Page 125: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Figure 3.3 : The extreme programming release cycle

Page 126: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Figure 3.4 : Extreme programming practices

Sr. Principle or practice Description

No.

1 Incremental Requirements are recorded on Story Cards and the

planning Stories to be included in a release are determined

by the time available and their relative priority.

The developers break these Stories into

development ‘Tasks’. See Figures 3.5 and 3.6.

2 Small releases The minimal useful set of functionality that

provides business value is developed first.

Releases of the system are frequent and

incrementally add functionality to the first release.

3 Simple design Enough design is carried out to meet the current

requirements and no more.

4 Test-first An automated unit test framework is used to write

development tests for a new piece of functionality before that

functionality itself is implemented.

Page 127: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Sr. Principle or practice Description

No.

5 Refactoring All developers are expected to refactor the code

continuously as soon as possible code

improvements are found. This keeps the code

simple and maintainable.

6 Pair programming Developers work in pairs, checking each other’s

work and providing the support to always do a

good job.

7 Collective The pairs of developers work on all areas of the

ownership system, so that no islands of expertise develop

and all the developers take responsibility for all of

the code. Anyone can change anything.

8 Continuous As soon as the work on a task is complete, it is

integration integrated into the whole system.

After any such integration, all the unit tests in the

system must pass.

Page 128: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Sr. Principle or practice Description

No.

9 Sustainable pace Large amounts of overtime are not considered

acceptable as the net effect is often to reduce

code quality and medium term productivity.

10 On-site customer A representative of the end-user of the system

(the Customer) should be available full time for

the use of the XP team. In an extreme

programming process, the customer is a member

of the development team and is responsible

for bringing system requirements to the team for

implementation.

Page 129: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Extreme programming involves a number of practices, summarized in Figure 3.4, which reflect the principles of agile methods:

1. Incremental development is supported through small, frequent releases of the system. Requirements are based on simple customer stories or scenarios that are used as a basis for deciding what functionality should be included in a system increment.

2. Customer involvement is supported through the continuous

engagement of the customer in the development team. The customer representative takes part in the development and is responsible for defining acceptance tests for the system.

3. People, not process, are supported through pair programming,

collective ownership of the system code, and a sustainable development process that does not involve excessively long working hours.

Page 130: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

4. Change is embraced through regular system releases to customers, test-first development, refactoring to avoid code degeneration, and continuous integration of new functionality.

5. Maintaining simplicity is supported by constant refactoring

that improves code quality and by using simple designs that do not unnecessarily anticipate future changes to the system.

In an XP process, customers are intimately involved in specifying and prioritizing system requirements. The requirements are not specified as lists of required system functions.

Rather, the system customer is part of the development team and discusses scenarios with other team members.

Together, they develop a ‘story card’ that encapsulates the customer needs.

Page 131: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

The development team then aims to implement that scenario in a future release of the software.

Page 132: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

SCRUM

It is one of the agile software development methods.

It is an iterative & incremental software development framework.

It gives holistic & flexible development strategies.

It enables teams to self organize by online collaborations of team members.

Its key principle is to recognize that during project development customers can change their requirement & requirements of customers & unpredictable.

It assumes problem cannot be fully understood or defined but focusing on maximizing team ability to deliver quickly.

Page 133: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Different technologies used in SCRUM process is as follows :-

SCRUM team: - It contains product owner, development team & scrum master.

Product Owner: - Person responsible for product backlog.

SCRUM Master: - Person responsible for scrum process.

Development team: - Team of people responsible for delivering the product.

Sprint burn down chart: - Daily sprint progress.

Release burn down chart: - Chart of completed product backlog.

Product backlog: - List of priority wise requirement.

Sprint backlog : - List of task to be completed which are prioritized.

Page 134: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Sprint :- Period in which development occurs.

Spike : - Period used to research concept.

Tracer bullet : - It is spike with current architecture, technology, best practices, etc.

Tasks : - Items added to sprint backlog at the beginning of sprint which are broken into hours.

Definition of done : - Exit criteria which decides product backlog items are completed or not.

Velocity : - Total efforts a team is capable of in a sprint.

Scrum-but : - It is exception to scrum methodology.

Page 135: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

SCRUM Process Flow SCRUM process flow contains different stages.

Different stages are as follows : -

Setup : -

Remove any customization from existing application.

Activate scrum process pack plug-in.

Assign scrum roles to users.

Create a product : -

Product represents the functionality which is identified by owner.

Product contains different features which are needed for enhancement which are useful for customer satisfaction.

It can have few features or many features.

Page 136: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Create user stories : -

These are product requirement created by product owner.

User stories are written in plain language. Less technical jargons are used.

It contains specific requirement that product should have.

Stories cannot be created without associating with product.

Create release : -

It has start & end date in which number of development iterations are completed.

Create sprint : -

It is the basic unit of time in development process.

It can have any length. Typically, it takes one to four weeks to complete.

SCRUM master creates one or more sprints.

Page 137: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Sprints should release in given start & end dates.

Scrum team need to complete al the stories which are committed.

Plan sprint : -

Team & scrum master need to decide on which stories they can commit to complete within a sprint.

Scrum master make sure that capability of sprint team matches the requirement of stories.

If the capacity of stories exceeds then scrum master add team members, remove stories or add sprint as & when needed.

Velocity chart is used in estimation process.

Track sprint progress : -

Scrum master is responsible for checking the progress.

He provides the progress report of the team.

Page 138: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Team members frequently update task & records.

Page 139: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Generate charts : -

Progress of a spirit can be tracked with the help of different charts.

Chart is one of the important tools of scrum team.

Burn down chart compares ideal progress in sprint against actual progress.

It is done on daily basis.

Page 140: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

SCRUM Roles Different roles are used in scrum process.

3 different roles are as follows :-

1. Product Owner They are stakeholders of the customer.

They ensure teams delivers values to business.

They write customer centric items, rank customer centric item & add to product backlog.

Role of the product owners in product requirement are as follows :-

Important role of product owner is communication with development team.

Identifying important requirement & communicating is important task of product owner.

Page 141: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

They generally reduce communication gap between team & stakeholders.

They announce the different release of the product.

They communicate the team status.

They negotiate priorities, scope, funding & schedule.

2. Development Team They are responsible for delivering the product.

Team generally consists of people of different skills.

Team size can be from between 3 to 9.

They includes member like analyst, designer, developer, tester, technical communicator etc..

Development team is self organizing.

Page 142: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

3. Scrum Master Scrum is facilitated by scrum master.

He is accountable for product goals & deliverables.

He is not a team lead or manager. He acts as a buffer between development team & distracting influences.

Project manager is responsible for people management but scrum master is not related to people management.

Page 143: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Scrum Cycle Description Scrum cycle is divided into different activities, which are as follows :-

1. Define During defining the requirement, generally scrum team, scrum master

& product owner sits together.

They decide the priority of team for duration of sprint. It is useful in high level direction for the team.

2. Plan It is about selecting items from product backlog.

It is also evaluates values of different items & estimates the efforts needed by scrum team.

Page 144: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

3. Build Task from the sprint backlog is selected for development.

They go on selecting the items till the items from the sprint backlog get completed.

4. Review Review is presented by scrum team to product owner about the

implementation of the items.

5. Retrospect It is final steps of the retrospection.

Page 145: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Testing in XP

Page 146: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

One of the important differences between incremental development and plan-driven development is in the way that the system is tested.

With incremental development, there is no system specification that can be used by an external testing team to develop system tests.

As a consequence, some approaches to incremental development have a very informal testing process, in comparison with plan-driven testing.

To avoid some of the problems of testing and system validation, XP emphasizes the importance of program testing.

XP includes an approach to testing that reduces the chances of introducing undiscovered errors into the current version of the system.

Page 147: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

The key features of testing in XP are:

1. Test-first development. 2. Incremental test development from scenarios, 3. User involvement in the test development and validation, and 4. The use of automated testing frameworks.

Test-first development is one of the most important innovations in XP.

Instead of writing some code and then writing tests for that code, you write the tests before you write the code.

This means that you can run the test as the code is being written and discover problems during development.

Writing tests implicitly defines both an interface and a specification of behavior for the functionality being developed.

Page 148: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Problems of requirements and interface misunderstandings are reduced.

This approach can be adopted in any process in which there is a clear relationship between a system requirement and the code implementing that requirement.

In test-first development, the task implementers have to thoroughly understand the specification so that they can write tests for the system.

This means that ambiguities and omissions in the specification have to be clarified before implementation begins. Furthermore, it also avoids the problem of ‘test-lag’.

This may happen when the developer of the system works at a faster pace than the tester.

User requirements in XP are expressed as scenarios or stories and the user prioritizes these for development.

Page 149: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

The development team assesses each scenario and breaks it down into tasks.

Each task generates one or more unit tests that check the implementation described in that task.

Figure 3.7 is a shortened description of a test case that has been developed to check that the prescribed dose of a drug does not fall outside known safe limits.

The role of the customer in the testing process is to help develop acceptance tests for the stories that are to be implemented in the next release of the system.

In XP, acceptance testing, like development, is incremental.

Page 150: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Figure 3.7 : Test case description for dose checking

Page 151: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

The customer who is part of the team writes tests as development proceeds. All new code is therefore validated to ensure that it is what the customer needs.

Relying on the customer to support acceptance test development is sometimes a major difficulty in the XP testing process.

Test automation is essential for test-first development.

Tests are written as executable components before the task is implemented.

These testing components should be standalone, should simulate the submission of input to be tested, and should check that the result meets the output specification.

An automated test framework is a system that makes it easy to write executable tests and submit a set of tests for execution.

Page 152: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

As testing is automated, there is always a set of tests that can be quickly and easily executed.

Whenever any functionality is added to the system, the tests can be run and problems that the new code has introduced can be caught immediately.

Test-first development and automated testing usually results in a large number of tests being written and executed.

However, this approach does not necessarily lead to thorough program testing.

There are three reasons for this:

1. Programmers prefer programming to testing and sometimes they take shortcuts when writing tests. For example, they may write incomplete tests that do not check for all possible exceptions that may occur.

Page 153: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

2. Some tests can be very difficult to write incrementally. For example, in a complex user interface, it is often difficult to write unit tests for the code that implements the ‘display logic’ and workflow between screens.

3. It is difficult to judge the completeness of a set of tests.

Although you may have a lot of system tests, your test set may not provide complete coverage. Crucial parts of the system may not be executed and so remain untested.

If the tests are not reviewed and further tests written after development, then undetected bugs may be delivered in the system release.

Page 154: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Pair Programming

Page 155: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Another innovative practice that has been introduced in XP is that programmers work in pairs to develop the software.

They actually sit together at the same workstation to develop the software. However, the same pairs do not always program together.

Rather, pairs are created dynamically so that all team members work with each other during the development process.

The use of pair programming has a number of advantages:

1. It supports the idea of collective ownership and responsibility for the system. This reflects Weinberg’s (1971) idea of egoless programming where the software is owned by the team as a whole and individuals are not held responsible for problems with the code. Instead, the team has collective responsibility for resolving these problems.

Page 156: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

2. It acts as an informal review process because each line of code is looked at by at least two people. Code inspections and reviews are very successful in discovering a high percentage of software errors. However, they are time consuming to organize and, typically, introduce delays into the development process.

3. It helps support refactoring, which is a process of software

improvement. The difficulty of implementing this in a normal development environment is that effort in refactoring is expended for long-term benefit. An individual who practices refactoring may be judged to be less efficient than one who simply carries on developing code.

In a given time, a pair of developers would produce half as much code as two individuals working alone. There have been various studies of the productivity of paid programmers with mixed results.

Page 157: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Using student volunteers, Williams and her collaborators (Cockburn and Williams, 2001; Williams et al., 2000) found that productivity with pair programming seems to be comparable with that of two people working independently.

The reasons suggested are that pairs discuss the software before development so probably have fewer false starts and less rework.

Furthermore, the number of errors avoided by the informal inspection is such that less time is spent repairing bugs discovered during the testing process.

The sharing of knowledge that happens during pair programming is very important as it reduces the overall risks to a project when team members leave. In itself, this may make pair programming worthwhile.

Page 158: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Introduction to Agile Tools : JIRA, Kanban

Page 159: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

JIRA

Page 160: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Like all good names in the software industry, it started as an in-house code name.

We originally used Bugzilla for bug tracking and the developers in the office started calling it by the Japanese name for Godzilla, Gojira (the original black-and-white Japanese Godzilla films are also office favourites). As we developed our own bug tracker, and then it became an issue tracker, the name stuck, but the Go got dropped - hence JIRA!

Further investigation into the name has revealed that Gorira is Japanese for "gorilla", whilst Kujira is Japanese for "whale". So Gojira is roughly translated to mean "gorilla the size of a whale"!

Page 161: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

JIRA is a tool developed by Australian Company Atlassian. It is used for bug tracking, issue tracking, and project management. The name "JIRA" is actually inherited from the Japanese word "Gojira" which means "Godzilla".

The basic use of this tool is to track issues, and bugs related to your software and Mobile apps. It is also used for project management. The JIRA dashboard consists of many useful functions and features which make handling of issues easy. Some of the key features are listed below.

JIRA Scheme Inside JIRA scheme, everything can be configured, and it consists of

Workflows

Issue Types

Custom Fields

Screens

Field Configuration

Notification

Permissions

Page 162: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

JIRA Issues and Issue types

What is JIRA Issue?

JIRA issue would track bug or issue that underlies the project. Once you have imported project then you can create issues.

Under Issues, you will find other useful features like

• Issue Types • Workflow's • Screens • Fields • Issue Attributes

Page 163: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Figure 3.9 : Typical JIRA Issue

Page 164: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

The numbered fields shown in the above screenshot are:

1. Project — the 'parent' project to which the issue belongs.

2. Key — a unique identifier for this issue. (The characters to the left of the hyphen represent the project to which this issue belongs.)

3. Summary — a brief one-line summary of the issue. 4. Type — see below for a list of types. 5. Status — the stage the issue is currently at in its

lifecycle ('workflow'). See below for a list of statuses. 6. Priority — the importance of the issue in relation to other

issues. (See below for a list of priorities).

Page 165: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

7. Resolution — a record of the issue's resolution, if the issue has been resolved or closed. (See below for a list of resolutions).

8. Affects Version(s) (if applicable) — project version(s) for which

the issue is (or was) manifesting. 9. Fix Version(s) (if applicable) — project version(s) in which the

issue was (or will be) fixed. 10. Component(s) (if applicable) — project component(s) to which

this issue relates. 11. Labels(s) (if applicable) — labels to which this issue relates. _(This

field will only appear if the Labels plugin has been installed.) 12. Environment (if applicable) — the hardware or

software environment to which the issue relates. 13. Description — a detailed description of the issue.

Page 166: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

14. Assignee — the person to whom the issue is currently assigned. 15. Reporter — the person who entered the issue into the system. 16. Votes — the number of votes that have been cast for this issue. 17. Watches — the number of people who are watching this issue. 18. Due (if applicable) — the date by which this issue is scheduled to

be completed. 19. Created — the time and date on which this issue was entered

into JIRA. 20. Updated — the time and date on which this issue was last edited. 21. Resolved — the time and date on which this issue was resolved.

Page 167: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Additionally, if your administrator has enabled 'Time-Tracking', the following fields will appear below the 'Dates' section:

Original Estimate — the total amount of time required to resolve the issue, as estimated when the issue was created.

Remaining Estimate — the remaining amount of time required to resolve the issue.

Time Spent — the sum of all the individual work logs for this issue.

Page 168: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Issue Type

Issue Type displays all types of items that can be created and tracked via JIRA. JIRA Issues are classified under various forms like new feature, sub-task, bug, etc. as shown in the screen shot.

Bug — A problem which impairs or prevents the functions of the product.

Improvement — An enhancement to an existing feature.

New Feature — A new feature of the product.

Task — A task that needs to be done.

Custom Issue — A custom issue type, as defined by your organisation if required.

Page 169: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Priority

An issue's priority indicates its relative importance. The default priorities are listed below; note that both the priorities and their meanings can be customised by your JIRA administrator to suit your organization.

Blocker — Highest priority. Indicates that this issue takes precedence over all others.

Critical — Indicates that this issue is causing a problem and requires urgent attention.

Major — Indicates that this issue has a significant impact.

Minor — Indicates that this issue has a relatively minor impact.

Trivial — Lowest priority.

Page 170: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Project

A JIRA project is a collection of issues, and is defined according to your organisation's requirements. For example, a JIRA project could be:

A software development project

A marketing campaign

A helpdesk system

A leave request management system

A website enhancement request system

Every issue belongs to a project. Each project has a name (e.g. Website Issues) and a key (e.g. WEB). The project key becomes the first part of that project's issue keys, e.g. WEB-101, WEB-102, etc:

Page 171: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Figure 3.10

Project : Website Issues

Page 172: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Component

A project component is a logical grouping of issues within a project. Each project may consist of various components (or none), depending on your organization's needs.

For example, a software development project could consist of

components called 'Documentation', 'Backend', 'Email Subsystem', 'GUI'. A website enhancement request system might consist of components called 'Products', 'Contact Us', etc:

An issue can belong to zero, one or multiple components within a project.

Page 173: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

Figure 3.11

JIRA Component

Page 174: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

WorkFlows

A JIRA workflow is a set of statuses and transitions that an issue goes through during its lifecycle. JIRA workflow encompasses five main stages once the issue is created.

Open Issue

Resolved Issue

InProgress Issue

ReOpened Issue

Close Issue

Page 175: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

References

Page 176: Course Name : Software Engineering and Project · Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance

1. Roger Pressman, “Software Engineering: A Practitioner’s Approach”, Mc Graw Hill, ISBN 0–07–337597–7 2.

2. Ian Sommerville, “ Software Engineering”, Addison and Wesley, ISBN

0-13-703515-2