- Forward


Software Engineering: An Overview


Prof. David Bernstein
James Madison University

Computer Science Department
bernstdh@jmu.edu

Print

What is Software?
Back SMYC Forward
  • To the User:
    • The part of the system they interact with in order to achieve a particular goal (e.g., send an email, write a memo)
    • Expand
  • To the Hardware:
    • A collection of instructions to be executed by a computer/processor
    • Expand
  • To the Developer:
    • A collection of human-readable statements (in a language) that can be converted to a collection of instructions to be executed by a computer/processor
    • Expand
What is...
Back SMYC Forward
  • Science?
    • Study of a behavior/phenomenon using the scientific method (i.e., the creation and testing of hypothesis using observation, measurement, and experimentation)
    • Expand
  • Engineering?
    • The application of science to realize goals
    • Expand
Software Engineering
Back SMYC Forward
  • Defined:
    • The application of (scientific) theories, methods and tools to the specification, design, creation, verification/validation, deployment, operation, and maintenance of software products
  • Scope:
    • From specification to maintenance
    • Involves theories/methods from psychology, mathematics/statistics, computer science, and management (of people and resources)
    • Actually consists of both science and art
Software Engineering vs. Computer Science/Engineering
Back SMYC Forward
  • Computer Engineering:
    • The application of theories (often from physics) to the creation of computational devices
    • Usually thought of as a subset of electrical and electronic engineering
  • Computer Science:
    • The theories and methods that underlie computation and the use of computational devices
The Origins of Computer Science Departments
Back SMYC Forward
  • Mathematics Departments:
    • People interested in discrete mathematics who became particularly interested in computation
    • Expand
  • Electrical Engineering Departments:
    • People interested in logic circuits and data storage
    • Expand
Software Processes
Back SMYC Forward
  • Definition:
    • A set of activities/tasks (and corresponding inputs and outputs) that results in the specification, development, validation, and/or evolution of a software product
  • Common Activities:
    • Project planning, product design, engineering design, implementation, deployment, support/maintenance
  • An Observation:
    • Many of these activities involve "problem solving" and/or "design"
Generic Problem Solving/Design Activities
Back SMYC Forward
  • The Parts of the Process:
    • Identification of goals, objectives and constraints
    • Generation of alternatives
    • Evaluation of alternatives
    • Selection of an alternative
  • Categorizing the Parts of the Process:
    • Analysis (to understand the problem)
    • Resolution (to solve the problem)
"Heavyweight" vs. "Agile"/"Lean" Processes
Back SMYC Forward
  • One View:
    • Different processes involve the same activities but vary dramatically in the cycle times
  • A Common Categorization:
    • Heavyweight Processes: Long cycle times (i.e., move in one direction for a long time)
    • Agile/Lean Processes: Short cycle times (i.e., develop the product incrementally)
What Do Software Engineering Students Study?
Back SMYC Forward
  • Becoming a Better Product Designer:
    • Needs elicitation techniques
    • Requirements generation/documentation techniques
    • User interface design techniques
  • Becoming a Better Engineering Designer:
    • Architectural styles
    • Design patterns
  • Becoming a Better Implementer:
    • Tools
    • Idioms
  • Becoming a Better Project Planner/Manager:
    • Foundations (probability, statistics, optimization, finance)
    • Best practices
There's Always More to Learn
Back -