RPL - 01 - Software and Software Engineering
RPL - 01 - Software and Software Engineering
Page 2
What is
Software?
Software is:
• (1) instructions (computer programs) that when executed provide
desired features, function, and performance;
• (2) data structures that enable the programs to adequately
manipulate information and
• (3) documentation that describes the operation and use of the
programs.
3
What is Software?
• Software is developed or engineered, it is not manufactured in the
classical sense.
• Software doesn't "wear out."
• Although the industry is moving toward component-based
construction, most software continues to be custom-built.
4
Wear vs. Deterioration
5
Software Application Domain
Today, seven broad categories of computer software present continuing challenges
for software engineers:
• System software. A collection of programs written to service other programs.
Some system software (e.g., compilers, editors, and file management utilities)
processes complex, but determinate,4 information structures. Other systems
applications (e.g., operating system components, drivers, networking software,
telecommunications processors) process largely indeterminate data.
• 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.
Software Application Domain
• Engineering/scientific software. A broad array of “number-crunching” or data
science programs that range from astronomy to volcanology, from automotive stress
analysis to orbital dynamics, from computer-aided design to consumer spending
habits, and from genetic analysis to meteorology.
• 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.
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).
Software Application Domain
• Product-line software. Composed of reusable components and designed to
provide specific capabilities for use by many different customers. It may focus on
a limited and esoteric marketplace (e.g., inventory control products) or attempt
to address the mass consumer market.
• Web/mobile applications. This network-centric software category spans a wide
array of applications and encompasses browser-based apps, cloud computing,
service-based computing, and software that resides on mobile devices.
Software Application Domain
• Artificial intelligence software. Makes use of heuristics to solve complex
problems that are not amenable to regular computation or straightforward
analysis. Applications within this area include robotics, decision-making systems,
pattern recognition (image and voice), machine learning, theorem proving, and
game playing.
Software Engineering
• Some realities:
• a concerted effort should be made to understand the
problem before a software solution is developed
• design becomes a pivotal activity
• software should exhibit high quality
• software should be maintainable
• The seminal definition:
• [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.
11
Software Engineering
• The IEEE definition:
• Software Engineering: (1) The application of a systematic,
disciplined, quantifiable approach to the development,
operation, and maintenance of software; that is, the
application of engineering to software. (2) The study of
approaches as in (1).
12
A Layered Technology
tools
methods
process model
a “quality” focus
13
A Layered Technology - Quality
• Any engineering approach (including software engineering) must rest
on an organizational commitment to quality.
• Philosophies that foster a culture of continuous process
improvement. It is this culture that ultimately leads to more effective
approaches to software engineering.
• The bedrock that supports software engineering is a quality focus.
A Layered Technology – Process
• 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 and establishes the context in which technical methods are applied,
work products (models, documents, data, reports, forms, etc.) are produced,
milestones are established, quality is ensured, and change is properly
managed.
A Layered Technology - 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.
A Layered Technology - 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, a system for the support of software
development, called computer-aided software engineering (CASE), is
established.