University of Management and Technology
School of Systems and Technology
CC-2101.Software Engineering
Lecture 03
Chapter 02: Software Engineering
Software Engineering
Software engineering encompasses a process, a
collection of methods (practice) and an array of tools that
allow professionals to build high-quality computer
software.
Software engineers apply the software engineering
process.
Software engineering is important because it enables us
to build complex systems in a timely manner and with
high quality
Software Engineering
The IEEE [IEE93a] has developed the following
definition for software engineering:
The application of a systematic, disciplined,
quantifiable approach to the development,
operation, and maintenance of software; that is,
the application of engineering to software.
And yet, a “systematic, disciplined, and
quantifiable” approach applied by one software
team may be burdensome to another. We need
discipline, but we also need adaptability and
agility
Software Engineering Layers
Software engineering is a layered
technology.
Referring to Figure, any engineering
approach (including software
engineering) must rest on an
organizational commitment to quality.
Total quality management (TQM), Six
Sigma, and similar philosophies foster a
continuous process improvement
culture, and it is this culture that
ultimately leads to the development of
increasingly more effective approaches
to software engineering.
Software Engineering Layers-
Process
The foundation for software engineering is the
process layer.
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.
Software Engineering Layers- Methods and Tools
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.
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.
Tools
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, called computer-aided software engineering.
The Software Process .(Activity, Action,
Task)
A process is a collection of activities, actions, and tasks
that are performed when some work product is to be
created.
An activity attempts 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
An action (e.g., architectural design) encompasses a set of tasks
that produce a major work product (e.g., an architectural model)
A task focuses on a small, but well-defined objective (e.g.,
conducting a unit test) that produces a tangible outcome
The Process Framework
A process framework is the foundation for a
complete software engineering process by
identifying framework activities that are applicable
to all software projects, regardless of their size or
complexity.
In addition, the process framework includes a set of
umbrella activities that are applicable across the
entire software process.
Generic Process Framework
A generic process framework for software
engineering encompasses five activities
1. Communication.
2. Planning.
3. Modeling.
4. Construction.
5. Deployment.
Umbrella Activities
Software project tracking and control
Risk management
Software quality assurance
Technical reviews
Measurement
Software configuration management
Reusability management
Work product preparation and production
Software Engineering Practice-The Essence of
Practice
1. Understand the problem (communication
and analysis)
2. Plana solution (modeling and software
design)
3. Carry out the plan (code generation)
4. Examine the result for accuracy (testing and
quality assurance)
SOFTWARE MYTHS
SOFTWARE MYTHS - MANAGEMENT
"We already have a book that is full of standards and procedures for
building software. Won't that provide my people with everything they
need to know?"
• Not used, not up to date, not complete, not focused on quality, time,
and money
"If we get behind, we can add more programmers and catch up"
• Adding people to a late software project makes it later
• Training time, increased communication lines
"If I decide to outsource the software project to a third party, I can just
relax and let that firm build it"
SOFTWARE MYTHS - CUSTOMER
"A general statement of objectives is sufficient to begin
writing programs – we can fill in the details later"
• Ambiguous statement of objectives spells disaster
"Project requirements continually change, but change can be
easily accommodated because software is flexible"
• Impact of change depends on where and when it occurs in
the software life cycle (requirements analysis, design,
code, test)
SOFTWARE MYTHS - PRACTITIONER
"Once we write the program and get it to work, our job is done"
• 60% to 80% of all effort expended on software occurs after it is delivered
"Until I get the program running, I have no way of assessing its quality
• Formal technical reviews of requirements analysis documents, design documents, and
source code (more effective than actual testing)
"The only deliverable work product for a successful project is the working program"
• Software, documentation, test drivers, test results
"Software engineering will make us create voluminous and unnecessary documentation
and will invariably slow us down"
• Creates quality, not documents; quality reduces rework and provides software on time
and within the budget
Some Important Terms
Why do we need to ENGINEER a software?
Scientist vs. Engineer
Manufacturing approach vs. engineering approach
Feasibility Study
Vision vs. Scope
Analysis vs. design
Features/ Requirements/ specifications
4 P’s of Project Management (Process, Project, Product, People)