CCS356 OOSE Unit - 1 Notes
CCS356 OOSE Unit - 1 Notes
UNIT-I
Software definition:
Definition 1: Software is instructions (computer programs) that are intended to provide desired
Features, function, and performance;
Definition 2: Software is a data structure that enables the programs to adequately manipulate information.
Characteristics of software are
1. Software is developed or engineered; it is not manufactured in the classical sense.
In both activities, high quality is achieved through good design, but the manufacturing phase
for hardware can introduce quality problems that are nonexistent for software
2. Software doesn’t “wear out.”
The failure rate curve for software should take the form of the “idealized curve” shown in
Figure. Undiscovered defects will cause high failure rates early in the life of a program. However, these
are corrected and the curve flattens as shown. 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!
3. Although the industry is moving toward component-based construction, most software continues
to be custom built.
Software Application Domains
Seven broad categories of computer software
1) System software—a collection of programs written to service other programs. Some system
software are compilers, editors, and assembler. The purpose of the sysem software is to establish a
communication with the hardware.
2) Application software—stand-alone programs that solve a specific business need.
3) Engineering/scientific software—has been characterized by “number crunching” algorithms.
4) Embedded software—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.
5) Product-line software—designed to provide a specific capability for use by many different
customers.
6) Web applications—called “WebApps,” this network-centric software category spans a wide
array of applications.
7) Artificial intelligence software—makes use of non numerical algorithms to solve complex
problems that are not amenable to computation or straightforward analysis.
Legacy software systems:
Legacy software systems . . . were developed decades ago and have been continually modified to meet
changes in business requirements and computing platforms.
A few simple realities to build software that is ready to meet the challenges of the twenty-first century
are:
1. A concerted effort should be made to understand the problem before a software solution is developed.
2. Design becomes a pivotal activity
3. Software should exhibit high quality
4. Software should be maintainable
Software in all of its forms and across all of its application domains should be engineered.
Software engineering:
A definition proposed by Fritz Bauer is
[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.
The IEEE definition is:
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.
1) Quality focus
A disciplined quality management is a backbone of software engineering technology.
2) Process layer:
The foundation for software engineering is the process layer. Process defines a framework that
must be established for effective delivery of software engineering technology.
3) Methods:
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.
4) Tools:
Software engineering tools provide automated or semiautomated 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.
1.2. SOFTWARE PROCESS:
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.
In the context of software engineering, a process is not a rigid prescription for how to build
computer software. Rather, it 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. The intent is always
to deliver software in a timely manner and with sufficient quality to satisfy those who have
sponsored its creation and those who will use it.
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.
A generic process framework for software engineering encompasses five activities:
1) Communication:
Before any technical work can commence, it is critically important to communicate and collaborate with
the customer. The intent is to understand stakeholders’ objectives for the project and to gather requirements
that help define software features and functions.
2) Planning:
software project plan—defines the software engineering work by describing the technical tasks to be
conducted, the risks that are likely, the resources that will be required, the work products to be produced,
and a work schedule.
3) Modeling:
Software engineers will create models to better understand software requirements and the design that will
achieve those requirements.
4) Construction:
This activity combines code generation and the testing that is required uncovering errors in the code.
5) Deployment:
The software is delivered to the customer who evaluates the delivered product and provides feedback based
on the evaluation.
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.
Umbrella activities:
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:
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) A technical review—assesses software engineering work products in an effort to uncover and
remove errors before they are propagated to the next activity.
5) Measurement—defines and collects process, project, and product measures that assist the team
in delivering software that meets stakeholders’ needs.
6) Software configuration management—manages the effects of change throughout the software
process.
7) Reusability management—defines criteria for work product reuse (including software
components) and establishes mechanisms to achieve reusable components.
8) Work product preparation and production—encompasses the activities required to create work
products such as models, documents, logs, forms, and lists.
The process model can be defined as the abstract representation of process. The appropriate
process model can be chosen based on abstract representation of process. These process models will
follow some rules for correct usage.
It is called “prescriptive” model 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.
1.3.1. The Waterfall Model (or)classic life cycle (or) sequential life cycle model
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.
The waterfall model is the oldest paradigm for software engineering.
In requirement gathering and analysis phase the basic requirements of the system must be
understood by software engineer, who is called analyst.
The design is an intermediate step between requirements analysis and coding.
Design focuses on:
1) Data Structure
2) Software architecture
3) Interface representation
4) Algorithm details
Coding is a step in which design is translated into machine readable form.
Testing begins when coding is done. The purpose of testing is to uncover errors, fix the bugs and
meet the customer requirements.
Maintenance is the longest life cycle phase. The purpose of maintenance is when the system is
installed and put in practical use then error may get introduced, correcting such errors and putting it
in use.
Advantages:
1) The waterfall model is simple to implement
2) For implementation of small systems it is usefull.
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.
Iteration occurs as the prototype is tuned to satisfy the needs of various stakeholders, while at the
same time enabling you to better understand what needs to be done
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.
In most projects, the first system built is barely usable. It may be too slow, too big, awkward in use
or all three. There is no alternative but to start again, smarting but smarter, and build a redesigned version
in which these problems are solved.
The prototype can serve as “the first system.” The one that Brooks recommends you throw away.
But this may be an idealized view. Although some prototypes are built as “throwaways,” others are
evolutionary in the sense that the prototype slowly evolves into the actual system.
Both stakeholders and software engineers like the prototyping paradigm. Users get a feel for the
actual system, and developers get to build something immediately.
Advantages:
1) Users are actively involved in the development
2) Since in this methodology a working model of the system is provided, the users get a better
understanding of the system being developed.
3) Errors can be detected much earlier.
4) Quicker user feedback is available leading to better solutions.
5) Missing functionality can be identified easily
6) Confusing or difficult functions can be identified Requirements validation, Quick implementation
of, incomplete, but functional, application.
Disadvantages:
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) Software engineer make implementation compromises in order to get a prototype working quickly.
3) An inappropriate operating system or programming language may be used simply because it is
available and known; an inefficient algorithm may be implemented simply to demonstrate
capability.
Usage of prototyping:
Although problems can occur, prototyping can be an effective paradigm for software
Engineering. The key is to define the rules of the game at the beginning; that is, all stakeholders should
agree that the prototype is built to serve as a mechanism for defining requirements. It is then discarded (at
least in part), and the actual software is engineered with an eye toward quality.
The spiral model is an evolutionary software process model that couples the iterative nature of
prototyping with the controlled and systematic aspects of the waterfall model. It provides the potential for
rapid development of increasingly more complete versions of the software.
The spiral development model is a risk-driven process model generator that is used to guide multi-
stakeholder concurrent engineering of software intensive systems.
It has two main distinguishing features.
(1) One is a cyclic approach for incrementally growing a system’s degree of definition and
implementation while decreasing its degree of risk.
(2) The other is a set of anchor point milestones for ensuring stakeholder commitment to feasible and
mutually satisfactory system solutions.
A spiral model is divided into a set of framework activities defined by the software engineering
team. Each of the framework activities represent one segment of the spiral path.
The spiral model is a realistic approach to the development of large-scale systems and software.
Because software evolves as the process progresses, the developer and customer better understand
and react to risks at each evolutionary level.
The spiral model uses prototyping as a risk reduction mechanism but enables you to apply the
prototyping approach at any stage in the evolution of the product. It maintains the systematic
stepwise approach suggested by the classic life cycle but incorporates it into an iterative framework
that more realistically reflects the real world.
The spiral model demands a direct consideration of technical risks at all stages of the project and,
if properly applied, should reduce risks before they become problematic.
Agile is a time-bound, iterative approach to software delivery that builds software incrementally
from the start of the project, instead of trying to deliver all at once.
The agile manifesto for agile software development is a formal declaration of four values and 12
principles to guide an iterative and people centric approach to software development
1.6.1 Principles:
There are famous 12 principles used as agile principles:
1. Highest priority is to satisfy the customer through early and continuous delivery of valuable
software.
2. It welcomes changing requirements, even late in development.
3. Deliver working software frequently, from a couple of weeks to a couple of months, with a
preference to the shortest timescale.
4. Business people and developers must work together throughout the project.
5. Build projects around motivated individuals. Give them the environment and the support they
need, and trust them to get the job done.
6. The most efficient and effective method of conveying information to and within a development
team is face-to-face conversation.
7. Working software is the primary measure of progress.
8. Agile processes promote constant development. The sponsors, developers, and users should be
able to maintain a constant.
9. Continuous attention to technical excellence and good design enhances agility.
10. Simplicity the art of maximizing the amount of work not done is essential.
11. The team must be self– organizing teams for getting best architectures, requirements, and designs
emerge from
12. At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its
behavior accordingly
1.7 Extreme programming:
Extreme programming (XP) is one of the best known agile processes.
1.7.1 XP values:
The set of five values that serve as a basis for all work performed as part of XP—communication,
simplicity, feedback, courage, and respect. Each of these values is used as a driver for specific XP activities,
actions, and tasks.
1. Communication:
To achieve effective communication between software engineers in order to covey
important concepts and to get continuous feedback.
2. Simplicity:
XP focuses on the current needs instead of future needs to incorporate in the design. Hence
the XP believes that the Software design should be simple.
3. Feedback:
The feedback for the software product can be obtained from the developers of the software,
customers and other software team members.
4. Courage:
the strict adherence to certain XP practices require courage. The agile XP team must be
disciplined to design the system today, recognize the future requirements and make the
changes dramatically as per demand.
5. Respect:
By following the above states XP values the agile team can win the respect of the
stakeholders.
1.7.2 Process:
The extreme programming process is explained as follows -
Customer specifies and priorities the system requirements. Customer becomes or of the important
members of development team. The developer and customer together prepare a story-card in which
customer needs are mentioned.
The developer team then aims to implement the scenarios in the story-card.
After developing the story-card the development team breaks down the total work in small tasks. The
efforts and the estimated resources required for these tasks are estimated.
The customer priorities the stories for implementation. If the requirement changes then sometimes
unimplemented stories have to be discarded. Then release the complete software in small and frequent
releases.
For accommodating new changes, new story-card must be developed.
Evaluate the system along with the customer.
Various rules and practices used in extreme programming are as given below-
XP Principle Description
User story-cards Instead of creating a large requirement document user stories are
written by the customer in which what they need is mentioned.
Release planning A release plan for overall project is
prepared from which the iteration plan can be prepared for individual
iteration
Small releases The developer breaks down the user
Planning Stories into small releases and a plan for releasing the small
functionalities is prepared.
Iterative process Divide the development work into small iterations. Keep the iteration
of nearly constant length. Iterative development helps in quick or agile
development.
Stand up The stand up meetings must be, conducted for the current outcomes of
meetings the project.
Simple design Simple design always takes less time than the complex design. It is always
good to keep the things simple to meet the current requirements
Spike solution For answering the tough technical
problems create the spike solutions. The goal of these solutions
Designing
should be to reduce the technical risks.
Refactoring Refactoring means reductions in the redundancy, elimination of
unused functionalities, redesign the obsolete designs. This will
improve the quality of the project.
Customer The most essential requirement of the XP is availability of the
Coding availability customer. In Extreme programming the customer not only helps
the developer team but it should be the part of the project.
Paired All the code to be included in the project must be coded by groups
programming of two people working at the same computer. This will increase the
quality of coding
Unit testing The test framework that contains automated test case suite is used to
the code. All the code must be using unit testing before its release.
Continuous As soon as one task is finished integrate it into the whole system.
integration Again after such integration unit testing must be conducted
Testing
No overtime Working overtime loses the spirit and motivation of the team. Conduct
the release of the team. Conduct the release planning meeting to
change the project scope or to reschedule the project
Applications of Extreme Programming (XP): Some of the projects that are suitable to develop
using XP model are given below:
Small projects: XP model is very useful in small projects consisting of small teams as face to
face meeting is easier to achieve.
Projects involving new technology or Research projects: This type of projects face changing
of requirements rapidly and technical problems. So XP model is used to complete this type of
projects.
1.7.3. Industrial XP:
The industrial XP (IXP) is an organic evolution of XP. It is customer-centric. It has expanded role for
customers, and its advanced technical practices.
Various new practices that are appended to XP to create IXP are as follows:
1. Readiness Assessment:
Prior to the initiation of an IXP project, the organization should conduct a readiness
assessment.
(1) an appropriate development environment exists to support IXP
(2) The team should contain appropriate and skilled stakeholders
(3) The organization has a distinct quality program and supports continuous improvement
(4) The organizational culture will support the new values of an agile team.
(5) The broader project community will be populated appropriately.
2. Project Community:
Skilled and efficient people must be chosen as the agile team members for the success of the
project. The team is reffered as the community when extreme programming approach is
considered. The project community consists of technologies, customers, and other stakeholders
who play rthe vital role for the success of the project. The role of the community members must
be explicitly defined
3. Project charting:
Project charting means assessing the justification for the project as a business application. That
means, the IXP team assess whether the project satisfies the goals and objectives of the
organization.
4. Test driven management:
For assessing the state of the project and its progress the industrial XP needs some measurable
criteria. In test driven management the project is tested with the help of these measurable criteria.
5. Retrospectives:
After delivering the software increment, the specialized review is conducted which is called as
retrospective. The intention of retrospective is to improve the industrial XP process.
1.8 CMMI:
The Capability Maturity Model Integration (CMMI) is a capability maturity model developed by the
Software Engineering Institute, part of Carnegie Mellon University in Pittsburgh, USA. The CMMI
principal is that “the quality of a system or product is highly influenced by the process used to develop
and maintain it”. CMMI can be used to guide process improvement across a project, a division, or an
entire organization.
CMMI provides:
Guidelines for processes improvement
An integrated approach to process improvement
Embedding process improvements into a state of business as usual
A phased approach to introducing improvements
CMMI Models
CMMI consists of three overlapping disciplines (constellations) providing specific focus into the
Development, Acquisition and Service Management domains respectively:
CMMI for Development (CMMI-DEV) – Product and service development
CMMI for Services (CMMI-SVC) – Service establishment, management, and delivery
CMMI for Acquisition (CMMI-ACQ) – Product and service acquisition
Originating in software engineering, CMMI has been highly generalised over the years to embrace other
business processes such as the development of hardware products, service delivery and purchasing which
has had the effect of abstracting CMMI.
ANNA UNIVERSITY QUESTIONS
PART A
1. What is Software Engineering? NOV/DEC 2013, NOV / DEC 2014, APRIL/MAY 2017,
APRIL/MAY 2017
Software engineering is the application of a systematic, disciplined, quantifiable approach to the
development, operation and maintenance of software as well as the study of approaches of the same.
2. 'Software doesn't wear out'. Justify. NOV/DEC 2013, MAY/JUNE 2016
The failure rate curve for software should take the form of the “idealized curve” shown in Figure.
Undiscovered defects will cause high failure rates early in the life of a program. However, these are
corrected and the curve flattens as shown. 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!
Figure : Failure curves for software
PART B
1. Compare the following life cycle models based on their distinguishing factors, strengths and
weaknesses — Waterfall Model, RAD Model, Spiral Model and Formal Methods Model. (Present in
the form of table only — use diagrams wherever necessary) NOV/DEC 2013, NOV/DEC 2018
2. Assume that you are the technical manager of a software development organization. A client
approached you for a software solution. The problems stated by the client have uncertainties which lead
to loss if it not planned and solved. Which software development model you will suggest for this project
– Justify. Explain that model with its pros and cons and neat sketch. NOV/DEC 2015
3. Explain the various levels of capability maturity model integration. NOV/DEC 2015
4. Discuss the prototyping model. What is the effect of designing a prototype on the overall cost of the
software project? MAY/JUNE 2016
5. Describe the type of situations where iterative enhancement model might lead to difficulties
MAY/JUNE 2016
6. Elucidate the key features of the software process models with suitable examples. MAY/JUNE 2016
7. What is the role of user participation in the selection of a life cycle model? MAY/JUNE 2016
8. Which process model is best suited for risk management? Discuss in detail with an example. Give the
advantages and disadvantages of the model. NOV/DEC 2016
9. List the principles of agile software development. NOV/DEC 2016, NOV/DEC 2019
10. What is a process model? Describe the process model that you would choose to manufacture a car.
Explain giving suitable reasons. MAY/JUNE 2017, NOV/DEC 2019 (Spiral Model)
QUESTION BANK
PART A
1. What is the impact of reusability in software development process?
2. Explain the component based software development model with a neat sketch.
3. What are the characteristics of software?
4. Software doesn’t wears out. Justify
5. What are the layers of software engineering?
6. Write down the generic process framework that is applicable to any software project.
7. List the goals of Software Engineering
8. Give two reasons why system engineers must understand the environment of a
system.
9. What are the two types of software products?
10. What is Software Engineering? What are their applications?
11. List out evolutionary software process model.
11. What are the difference between product and process?
12. What are the advantages and disadvantages of Waterfall Model?
13. What are the advantages and disadvantage of Incremental Model?
14. What are the advantages and disadvantages of Spiral Model?
15. Define Computer based system and specify its components.
16. What are the advantages and disadvantages of Prototyping Model?
17. Depict the relationship between work product, task, activity and system.
18. List two deficiencies in waterfall model. Which
process model do you suggest to overcome each
deficiency?
19. What are the pros and cons of Iterative software development models?
20. What is legacy software? What are characteristics of legacy software?
21. What is an agile process?
22. List out the principles of Agile.
PART B
1. Explain the following: (i) waterfall model (ii) Spiral model (iii) Prototyping
model
2. Discuss the various life cycle models in software development.
3. Compare and contrast the different lifecycle models.
4. Discuss in detail about any two evolutionary process models.
5. Explain in detail about the software process.
6. Which process model is best suit for risk management? Discuss in
detail with an example. Give advantages and disadvantages of the
model.
7. List the principles of agile development.
8. Explain in details about extreme programming XP process.
9. Explain about agile process.