Lesson 1 ( Chapter 1 of Text)

advertisement
What is Software Engineering?
Why do we need it?
• I already know how to code --- I am good programmer.
• I have been developing systems for years.
• I have been supporting systems and answering tough
customers questions for years.
• We are using Agile process and we are just cool --making a lot of money in the process.
What is Software Engineering
•
Software Engineering has 2 main parts:
1.
Identification and Analysis of “problems”
2. Identification, Synthesis, and Construction of the
“solution” to the problem.
See page 3,5,11
of text
(not that
SIMPLE)
Yes, support and maintenance is important, and it also includes
of the above two portions, too.
Software Engineering
• In identifying and analyzing software problems, we use:
– techniques: elicitation, documentation, prototyping, reviews, etc.
– business knowledge: domain specific info., business flow, etc.
• In solving problems software engineering employs:
– Methodology or Technique: (e.g.) designing, programming, testing,
integrating, etc. which are directly related to the end product
– Tools: (e.g.) development platform, version control, visual diagram,
etc.
– Procedure & Policies: (e.g.) inspection/review, tracking, metrics,
change management, etc. which are indirectly related to the product
– Process / Paradigm : (e.g.) Waterfall, Spiral, Incremental, etc. which
are a combination of methodology, tools, and procedures
Anything missing in the problem identification and analysis part? Tools?, etc.
Software Engineering & Other Disciplines
• Software Engineers uses the “computing” theories, tools,
algorithms, etc. from computer science.
• Software Engineers uses procedures, techniques, and tools
from other disciplines such as management science, industrial
engineering, and cognitive science.
• Software Engineers also perform in depth research in some of
the above areas themselves. (my view: I differ with the text author, p.5,
a bit here – )
Computer
Science
Customer
Problem
Cognitive
Science
..............
Software Engineering
Management
Solution
for
Customer
Computing Field
Software
Engineering
Graphic/
Visualizati
on/
Animation/
Gaming
AI and
Robotics
Traditional Computer Science
-Theory of computation
- Information theory/Coding theory
-Algorithms and data structure
- Programming Languages
-Formal Logic and Discrete systems
- Man/Machine Interface
- Operating system
- Real-time systems
- Parallel, concurrent, & multi-processing
- Database and Information Retrieval
-Network and Distributed systems
-Computer Organization and Architecture
Software Engineering Topics
Software
Development &
Engineering
- Requirements
Engr.
- Designing
-Construction
/coding
- Testing
Management &
Maintenance
- Evolution &
Support
- Configuration &
Release mgmt
- Project
Management
Software
Engineering
Support
- Measurement &
Metrics
- Process &
Methodology
- Tools
- Ethics
CS Foundation:
programming; data structure; algorithms ; database; etc.
Some Solution Goals for
Software Engineers
1.
2.
3.
4.
What is this?
Minimize Cost
On Schedule ( & Schedule Integrity)
Meets Functional Requirements
Meets Non-Functional Requirements (some calls this
“quality” requirements)
–
–
–
–
–
–
–
Performance in response time, transaction time, etc.
Security
New technology (marketability)
Reliability
Availability
Flexibility and Future Maintainability
etc.
Some use the word, “quality” to only address defects which resulted from
errors made by the software engineers
Software Quality (“defect-free”)
• Software Quality (mainly defects) has been an on-going issue
and was the main catalyst that started Software Engineering
(late 1960’s) when software application grew: (from simple
programs to business systems ---- today; software is managing our
lives)
– Larger (more complex) problems and products
– More “sophisticated” effort needed to solve more complex problems
– More people needed to understand and solve the problem
• Focus on:
– Product Quality
– Process Quality
– Quality in Business (“technical value” vs “business value”- controversial)
Future software engineers must understand that investing in
software demands a return in value to business --- to make the
investment a worthwhile one.
We Focus on Both Deliverables (Product)
and Process/Methodologies
• What are the software deliverables ?
– documents (requirements, design, test cases,
training material, etc.)
– code (source code, executables, libraries, initialized
data base, test harness, etc.)
• Will our methodology, tools, process, etc. that
we employ produce the deliverables ?
1.
2.
3.
4.
5.
on schedule
within cost
meets functional requirements
meets non-functional requirements
Delight the customer!
Cognizant of “Multiple” Perspectives in
Software Engineering
• Customer cares about cost, schedule, and meeting
requirements
• Users care about meeting the requirements with
emphasis on learning, usage, & recoverability from
problems, etc.
• Developers care about “meeting”: requirements,
schedule, productivity/cost, technical challenges, risks
& other goals/targets.
• Sometimes Customers and Users are the same group;
sometimes the customers, users and the developers all belong
to the same company.
Software Engineering
Internal
Product
Structure
& Properties
What process & methodology
can we devise and use to develop
the internal structure and size
Engineering
Processes &
Methodologies
What structure and properties should
the product have in order to
attain the desired, external properties
What set of product properties
will require which process and
which methodologies
External
Product or
Project
Properties
Two Major Components of SWE (Again)
1.
Understanding the Problem (System Approach - Definition)
–
–
–
2.
What is the “total” system (hardware; software; business; people; law;
technology, timing/schedule, etc.)
What are the boundaries
What are the major components of the system and how they “inter-relate”
Constructing the Solution (Engineering)
–
–
–
–
–
–
–
–
Requirements Analysis (more of problem-analysis)
System Design
Program Design
Not all in nice
Coding
sequence;
Code Integration
We iterate through
Testing
these
Product Builds
(How ?)
Product Delivery
Software Engineering “Team”
•
•
•
•
•
Applications/Business Analysts - User Requirements
Designers - System and subsystem level solutions
Programmers - code level solutions (a “must” skill)
QA &Testers - design and code level defect detection
Process and Tool Specialists - version control,
configuration management, packaging, process, and
metrics
• Trainers - user, customer & maintenance education
• Maintenance Support - customer support, product
fixes, and future enhancements
Question: Where do UI experts fit in?
Changes in Computing World
(forcing continuous changes to software engineering)
1. Speed to market is more critical
2. Continuing drop in hardware price but increasing
software development cost
3. Hardware is getting more and more powerful
4. Extensive local and wide-area network ( & the web)
5. Adoption of OO (any new technology) - my words
technology
6. GUI is the norm
7. Waterfall process model is too conservative ; looking
for new process / techniques/ tools
A Relatively Young Discipline & Has No “Laws” - but
• Software Engineering is continuously evolving & there are many players
in this field.
• Tony Wasserman’s 8 fundamentals for effective software engineering:
(Also, check out Alan Davis’ 15 principles of Software Engineering - in
IEEE Software/Nov. 1994 & his 1995 book)
– Abstraction : viewing substance in a more “general” way
– Analysis and Design Methods and Notation : building and communicating
models
– UI Prototyping : constructing parts of the UI to understand user
requirements and also to demonstrate feasibility
– Software Architecture : constructing a set of “basic” solution units and
showing how the units inter-relate
– Software Process : understanding and applying the “best” development
process for the project
– Reuse : taking advantage of previous work
– Measurement : devising and quantifying measurement for software
engineering
– Integrating tools : developing integrated development environment and
tools for the complete software life cycle
Abstraction
• Large projects involve many, interrelated
elements and thus:
– Hard to understand
– Hard to express
– Hard to solve
• Simplify through “abstraction” (or generalization)
– Find “common” attributes and combine elements
• Express only the “essential” commonalities and drop the details
(what level of detail is considered droppable?)
– Find “related” elements and compose to form a “new
element”
• We do this when we design a “class” in OO design activity
Note: “abstraction” used here is NOT meant to compare intangible versus tangible
Abstraction Example
• Problem: the software we need “must have features for
inputting number of programmers and others used in the
project every week; inputting the hourly time expended by
all different type of people ---- verify all the inputs are
correct; compute the cost using the different rates; -----etc.”
– Abstraction: we need a “software project cost tracking software.”
Software Project cost
tracking
Input and input
verification
Cost
computation
combining and grouping
related functions into even
higher level abstraction
Viewing &
reporting
class
General Project
cost tracking
sub-class
software Project
cost tracking
sub-class
construction Project
cost tracking
Analysis & Design Methods and Notation
• Large, complex projects need many, different people to
complete within time:
– We need express and keep our own thoughts and solutions
– We need to communicate our thoughts and solutions to others
– We need to understand other people’s thoughts and solutions
• Requires a common methodology and notation so that we
can communicate with ourselves (later in time) and with
others with different background and culture.
– Requirements specification document (Joey’s question – on assignment)
– Design document
– Etc.
UI Prototyping
• Prototyping means build a “mocked” version to:
– Demonstrate feasibility
– Understand the requirements, design, coding needs
– Negotiate requirements and design
• UI Prototyping used to improve UI requirements
specification and design:
–
–
Aid the users to better identify and express the
interface (and functional flow) requirements
Aid the developers to better understand the UI needs
(and functional needs) of the users
Software Architecture
• Large software systems have many inter-related
parts, thus defining the “framework” of the solution
with these inter-related elements is important:
– easier understanding of the principle behind the details of
design
– easier to make modification and maintain the software
• To define the software solution framework, we have
to specify the software architecture:
– Basic components
– Inter-relations among the components (what’s a “relation”
in software?)
Software Architecture Considerations
• How do we design/specify the basic components
and their relationships?
–
–
–
–
–
Modular (or functional) decomposition/composition
Data decomposition/composition and structure
Event decomposition/composition
Input/Output decomposition/composition
Object/Class composition/decomposition
We may use combinations of these techniques.
Note: we do not have a common software architecture
technique and notation, yet (refer to earlier point)
Software Process
• For large, complex software projects, we utilize
many, different people; besides needing “common
notation” and “good communication,” we need an
organized and structured way to conduct business.
• Software Development Process defines:
1. major tasks/activities involved
2. sequence of performing and relationship among the
tasks/activities
3. skills and people required to perform the different
tasks (often leads to organizational structure)
4. tools needed to support the tasks
- Different large software projects may use different process.
- But using no process is a high risk for large projects!
Reuse
• Developing large, complex software system
takes lots of people and time --- and is very
competitive (time and effort).
• One way to reduce time and cost is to reuse
components:
– code library for pre-coded functionalities by
Programming Language
– Development kit with code frame-work
• Besides code, we need to make more software
artifacts reusable:
– Requirements specification
– Design
– Test cases
Barriers to Reuse
1. Sometimes faster to build a small component than
search for a perfect match
2. No motivation(rewards) for developers to make his/her
work general enough to be reusable by others
3. No assurance that an available, reusable component is
well tested and performs as stated
4. Difficult to get support of a reusable component
5. Difficult to understand a reusable component written
by others, especially with no common notations
6. Performance and other attribute trade-off of general
versus specific component sometimes favor the nonreusable specific component.
Measurement
• Without “quantified” measurements, it is very
difficult to assess, control, and improve any
aspects of a product, process, people, etc.
• Other engineering fields have some very well
defined attributes and metrics.
• Software Engineering is working to improve on
this to become a “real engineering” field (e.g.):
– Size of software
– Complexity of software
– Reliability of software
- This is a “fertile” area for research and for jobs in large companies
- Needs experience and knowledge
Tools and Integrated Environment
• Tools have been the key to human civilization
and advancement. Software engineering is no
different.
• We need to continue to develop better tools,
especially for large complex projects:
–
–
–
–
–
Interoperate in heterogeneous environment
Present integrated and common user interface
Have integrated linkage between tools and processes
Data are shared among the related tools
Tools are automated to have better control among
themselves, initiating, terminating and passing
information
Wasserman’s 8 Fundamental Notions
• These 8 points touch upon different aspects of
software engineering
• They are all important in varying degree
• Some are specific and some are more general
Hopefully
Your appreciation of these will grow as we move forward
Also, read Chapter 1 of your Text-Book that complements this
lecture.
Download