An Introduction to CS531
Secure Programming
|
Prof. David Bernstein
James Madison University
|
|
Computer Science Department
|
bernstdh@jmu.edu
|
Objective of CS531
- A Casual Statement of the Objective:
- Help you learn how to write secure software
- Required for a Careful Statement of the Objective:
- An understanding of the process(es) used to
write software
- A careful definition of some terms
Purposes of Today's Meeting
- Discuss some of the topics that are necessary to create a
careful statement of the objectives of this course
- Software Processes
- Software Products
- Software Quality
- CS531 from a Process Perspective, a Quality Perspective, and an Operational Perspective
- Discuss the course and my expectations
Processes
- A Definition:
- A process (a.k.a. activity) is a collection of
related tasks (a.k.a. actions)
that transforms a set of inputs into a set of outputs.
- An Observation:
- The set of algorithms is a subset of the set of processes
(which, includes, for example heuristics)
- Describing Processes:
- Specify the inputs to and outputs from the process
- Specify the tasks
- Specify the inputs to and outputs from each task
(a.k.a. data flows)
- Specify the order of tasks and the conditions under which they
occur (a.k.a. control flows)
Software Processes
- Definition:
- A software process is a set of activities/tasks (and
corresponding inputs and outputs) that results in the
specification, development, validation, and/or evolution
of a software product
- An Observation:
- Software processes are very complex and, hence, our discussion
of them will necessarily involve abstraction
Common Activities in Software Processes
- Project Planning:
- Financial/economic analysis
- Scheduling
- Resource allocation
- Cost estimation
- Risk management
- Product Design:
- Identification of needs and desires
- Specification of requirements
- Prototyping
- Engineering Design:
- Creation of static models
- Creation of dynamic models
- Consideration of architectural styles and design patterns
- Implementation:
- Development
- Code/documentation management
- Debugging
- Verification and validation
- Deployment
- Support and Maintenance
Software Products
- What People (Other than Us) Care About:
- Having everything they need to solve one or
more problems or achieve one or more goals (i.e., a complete means
to one or more ends)
- Definition:
- A software product is one or more programs,
sub-programs, or libraries, along with the data and
supporting materials and services, that a client can use
to solve problems or achieve goals
Some Important Terms Related to Software Products
-
Defect - any undesirable aspect of a product
-
Failure - a deviation between a product’s actual
behavior and intended behavior (e.g., a feature that is
missing or incorrect)
-
Fault - a defect that could (or does) give rise
to a failure
-
Trigger - a condition that causes a fault to
result in a failure
Properties of Software Products
- Reliable - Low probability of failure under normal
operating conditions
- Robust - Able to operate without failure under a wide
variety of condtions
- Safe - Able to minmize the damage resulting from failure
- Secure - Low probability of failure as a result of operating
conditions that are intended to cause a failure
Quality Assurance
- Definition:
-
Quality assurance (QA) is a systematic pattern
of activities intended to ensure that a product properly
satisfies the needs and desires of its stakeholders.
- Activities:
-
Validation is the process of determining if a product
(or its specification) satisfies stakeholders’ needs and
desires ("Are we building the right product?")
-
Verification is the process of determining if a
product (or its specification) satisfies those needs and
desires properly ("Are we building the product right?")
Quality Assurance - An Example
- The Setting:
- You are a newspaper reporter and you are told to write an
article about homelessness (the product)
- Validation:
- You must write about homelessness
- Note: All validation activities are product specific
- Verification:
- You must write properly (e.g., use proper grammar, follow the
newspaper's style guide, make a compelling argument)
- Note: Some verification activities are product-specific
(e.g., the quality of the argument) and some are not (e.g.,
proper grammar)
Defect Elimination - Prevention
- Process Guides:
- Standards and guidelines that describe the way everyone
in the organization should behave
- Templates and checklists that make it easier to do so
- Analysis and Design Methodologies:
- Well-codified approaches to understanding and solving
software-related problems (e.g., OO)
- Well-Studied Solutions:
- Reference architecture
- Design patterns
Defect Elimination - Detection and Removal
- Review and Correct:
- Automated tools
- Manual techniques (e.g., desk-checks, walk-throughs,
inspections)
- Test and Debug:
-
Testing is a validation and verification process that
makes use of the system/product (including prototypes)
while it is in operation or being operated on
Focus of CS531
- From a Software Process Perspective:
- Our concern is with failures that arise from decisions made
during construction (and, to some extent, engineering design)
- From a Software Quality Perspective:
- We are not concerned with ruggedness (i.e., reliability,
robustness, and safety) though ruggedness and security are
often closely related
- We are principally concerned with defect prevention
- From an Operational Perspective:
- We are not concerned with failures that result from
network configuration decisions
- We are not concerned with failures that result from
cryptographic decisions
- We are not concerned with failures that result from
policy decisions
Side Benefits of Taking CS531
- You may learn some specific languages that you are
unfamiliar with (and, at worst, you'll have to review them)
- You may learn about some tools that you are unfamiliar with (though
this will be entirely up to you)
- You will become better at reviewing code and documentation
written by others
About Prof. Bernstein
- The Early University Years
- Working for a Living
- The Quest for a Ph.D.
- The Esteemed Professor
- Now
About You
- Time Allocation:
- Full-time graduate students take 3 courses per semester
- Being a full-time graduate students requires at least as
many hours as being a full-time employee
(e.g., 45 hrs/week)
- You should expect to spend 15 hrs/week on a
graduate course
- Languages You Must Know or Learn on Your Own:
- Language You May Know but I'll Lecture On (Briefly):
There's Always More to Learn