Pertemuan 3
Pertemuan 3
Engineering
Practice
2023
PTIK - UNS
Ellen Ullman
I have no idea what time it is. There are no windows in this office and no
clock, only the blinking red LED display of a microwave, which flashes
12:00, 12:00, 12:00, 12:00.
Joel and I have been programming for days. We have a bug, a stubborn
demon of a bug. So the red pulse no-time feels right, like a read-out of
our brains, which have somehow synchronized themselves at the same
blink rate . . .
What are we working on? . . . The details escape me just now. We may
be helping poor sick people or tuning a set of low-level routines to verify
bits on a distributed database protocol—I don’t care. I should care; in
another part of my being—later, perhaps when we emerge from this
room full of computers—I will care very much why and for whom and
for what purpose I am writing software. But just now: no. I have passed
through a membrane where the real world and its uses no longer matter.
I am. . . .
a software engineer. . . .
Software Engineering Practice
Consists of a collection of concepts, principles, methods, and tools that a
software engineer calls upon on a daily basis
Equips managers to manage software projects and software engineers to build
computer programs
Provides necessary technical and management how to’s in getting the job done
Transforms a haphazard unfocused approach into something that is more
organized, more effective, and more likely to achieve success
3
Seven Core Principles for Software Engineering
1) Remember the reason that the software exists
• The software should provide value to its users and satisfy the requirements
As an example, consider the design of a user interface for a WebApp. Consistent placement of menu
options, the use of a consistent color scheme, and the consistent use of recognizable icons all help to
make the interface ergonomically sound.
Core Principle: Practice Guide
Principle 4. Focus on the transfer of information. Software is about information
transfer—from a database to an end user, from a legacy system to a WebApp, from an
end user into a graphic user interface (GUI), from an operating system to an application,
from one software component to another—the list is almost endless. In every case,
information flows across an interface, and as a consequence, there are opportunities for
error, or omission, or ambiguity. The implication of this principle is that you must pay
special attention to the analysis, design, construction, and testing of interfaces.
Core Principle: Practice Guide
Principle 5. Build software that exhibits effective
modularity. Modularity provides a mechanism for
realizing the philosophy. Any complex system can be
divided into modules (components), but good software
engineering practice demands more. Modularity must
be effective. That is, each module should focus
exclusively on one well-constrained aspect of the
system—it should be cohesive in its function and/or
constrained in the content it represents. Additionally,
modules should be interconnected in a relatively simple
manner—each module should exhibit low coupling to
other modules, to data sources, and to other
environmental aspects.
Core Principle: Practice Guide
Principle 6. Look for patterns. Brad Appleton suggests that: The goal of
patterns within the software community is to create a body of literature to help
software developers resolve recurring problems encountered throughout all of
software development. Patterns help create a shared language for
communicating insight and experience about these problems and their
solutions. Formally codifying these solutions and their relationships lets us
successfully capture the body of knowledge which defines our understanding of
good architectures that meet the needs of their users.
Core Principle: Practice Guide
Principle 7. When possible, represent the problem and its solution from a
number of different perspectives. When a problem and its solution are
examined from a number of different perspectives, it is more likely that greater
insight will be achieved and that errors and omissions will be uncovered. For
example, a requirements model can be represented using a data oriented
viewpoint, a function-oriented viewpoint, or a behavioral viewpoint
Core Principle: Practice Guide
Principle 8. Remember that someone
will maintain the software. Over the
long term, software will be corrected
as defects are uncovered, adapted as its
environment changes, and enhanced as
stakeholders request more capabilities.
These maintenance activities can be
facilitated if solid software engineering
practice is applied throughout the
software process.
The Essence of Problem Solving
29
Coding Principles
(After completing the first round of code)
30
Testing Principles
1) All tests should be traceable to the software requirements
2) Tests should be planned long before testing begins
3) The Pareto principle applies to software testing
• 80% of the uncovered errors are in 20% of the code
4) Testing should begin “in the small” and progress toward testing
“in the large”
• Unit testing --> integration testing --> validation testing --> system testing
5) Exhaustive testing is not possible
31
Test Objectives
32
Deployment Practices
Communication
Project initiation
Requirements
gathering
Planning
Estimating
Scheduling
Tracking Modeling
Analysis
Design Construction
Code
Test Deployment
Delivery
Support
Feedback
Deployment Principles
1) Customer expectations for the software must be managed
• Be careful not to promise too much or to mislead the user
34
End of Chapter 3