CS 211: Software Engineering Principles

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson
Download our mobile app to listen on the go
Get App

Questions and Answers

Which of the following best describes the role of analysis in software engineering?

  • Understanding the problem by breaking it down (correct)
  • Automating tasks using instruments
  • Applying techniques across software development
  • Combining pieces into a large structure

Software engineering primarily focuses on creating solutions for problems independent of specific client needs.

False (B)

What are the three key aspects of dealing with complexity in software systems?

Abstraction, Decomposition, Hierarchy

_______ engineering involves creating a class-based interface to any system.

<p>Interface</p> Signup and view all the answers

Match the following concepts with their descriptions:

<p>Analysis = Understanding the problem and breaking it down Synthesis = Putting pieces together into a large structure Technique = Formal procedures for producing results Methodology = Collection of techniques unified by a philosophical approach</p> Signup and view all the answers

What is the primary focus of Interface Engineering in software development?

<p>Creating a class-based interface to any system (D)</p> Signup and view all the answers

A primary goal of software engineering is to eliminate change during the software development lifecycle.

<p>False (B)</p> Signup and view all the answers

In software engineering, what term describes putting the pieces of a problem back together into a large structure?

<p>Synthesis</p> Signup and view all the answers

The process of breaking down a system into modules, where each module represents a major processing step is known as _______ decomposition.

<p>functional</p> Signup and view all the answers

Match the following terms with their corresponding descriptions in the context of software engineering:

<p>Abstraction = Hiding unnecessary implementation details Decomposition = Breaking down a complex system into smaller, manageable parts Hierarchy = Organizing elements of a system in a structured manner</p> Signup and view all the answers

Which activity produces the Application Domain Objects?

<p>Requirements Analysis (A)</p> Signup and view all the answers

Models should never be used to provide abstractions

<p>False (B)</p> Signup and view all the answers

What is the key differences between what a computer scientist is doing compared to a software engineer?

<p>Time and the application of a solution</p> Signup and view all the answers

The "entropy" of a software system _______ with each change, according to the second law of software dynamics.

<p>increases</p> Signup and view all the answers

Match each deliverable with the phase of the software lifecycle it corresponds to:

<p>Deliverable 1 = Requirements Elicitation Deliverable 2 = Requirements Analysis Deliverable 3 = Architectural Design Deliverable 4 = Object/Component Design</p> Signup and view all the answers

A software engineer has to create a model from scratch from a new software system. Which of the following applies?

<p>Greenfield Engineering (B)</p> Signup and view all the answers

When using functional decomposition, User interfaces tend to be the most intuitive.

<p>False (B)</p> Signup and view all the answers

What is the name of a book that Astronauts are supplied with to highlight known software problems?

<p>Program Notes and Waivers</p> Signup and view all the answers

A small set of classes that provide a template solutions to a recurring problem is known as a design _______.

<p>pattern</p> Signup and view all the answers

Match the following types hierarchies correctly:

<p>Part of = Shows hierarchical relationship between the different component and sub componets Is-kind-of = Shows hierarchical relationship between type and subtype</p> Signup and view all the answers

After a change has to made to the code base, what is a consequence of Functional Decomposition?

<p>Code is complex and impossible to maintain (D)</p> Signup and view all the answers

A design engineer aims not to design the software for it to be reusable, as that should be done at a higher level.

<p>False (B)</p> Signup and view all the answers

What are software engineering tools called?

<p>CASE (Computer Aided Software Engineering)</p> Signup and view all the answers

Putting the pieces together to create a large structure, is called _______

<p>Synthesis</p> Signup and view all the answers

Associate the following software methodologies to their descriptions:

<p>Waterfall = Traditional and linear software development approach Agile = Iterative approach that focuses on adaptation and continuous feedback.</p> Signup and view all the answers

Flashcards

Software Engineering

A collection of techniques, methodologies, and tools used to produce high-quality software within budget and before a deadline, while accommodating changes.

Analysis

Understanding the problem's nature and breaking it into smaller, manageable parts.

Synthesis

Combining individual pieces into a cohesive, larger structure to solve a problem.

Techniques (in software engineering)

Formal procedures that yield results using well-defined notations.

Signup and view all the flashcards

Methodologies

A structured collection of techniques applied across software development, guided by a unifying philosophical approach.

Signup and view all the flashcards

Tools (in software engineering)

Automated systems employed to execute a technique.

Signup and view all the flashcards

Computer Scientist

Proves theorems, designs languages, and defines knowledge representation schemes with no time constraint.

Signup and view all the flashcards

Engineer

Develops application-specific solutions using computers, languages, tools, techniques, and methods for a client.

Signup and view all the flashcards

Factors Affecting Software Quality

Complexity and Constant Changes

Signup and view all the flashcards

Software Complexity

The system becomes incomprehensible, even to the developers

Signup and view all the flashcards

Software Entropy due to continuous change

The system's structure degrades, making changes costly and potentially rendering it unable to perform its tasks.

Signup and view all the flashcards

Abstraction

Presenting essential features without details.

Signup and view all the flashcards

Decomposition

Breaking down a system into smaller, manageable modules.

Signup and view all the flashcards

Hierarchy

Arranging components in a structured order.

Signup and view all the flashcards

System Model

A description of the system focusing solely on relevant details.

Signup and view all the flashcards

Task Model

Describes task dependencies, timelines, and roles within a project.

Signup and view all the flashcards

Issues Model

Identifies open issues, constraints, and resolutions from the client.

Signup and view all the flashcards

Decomposition

A technique to simplify complex systems by dividing it into smaller parts.

Signup and view all the flashcards

Functional Decomposition

Decomposing the system into modules, each representing a major step in the application domain.

Signup and view all the flashcards

Object-Oriented Decomposition

Decomposing the system into classes, where each class is a major abstraction linked to the application domain

Signup and view all the flashcards

Greenfield Engineering

Finding classes for a brand new software system

Signup and view all the flashcards

Reegineering

Identifying the classes in an existing system

Signup and view all the flashcards

Interface Engineering

Creating a class-based interface to any system.

Signup and view all the flashcards

Hierarchy in System Design

Arranging system parts in a 'part-of' and a 'is-kind-of' structure..

Signup and view all the flashcards

Software Lifecycle

A set of activities and their relationships supporting software development.

Signup and view all the flashcards

Study Notes

Course Information

  • This course is identified as CS 211
  • It is offered in the first semester of 1443 (2021-2022)

Class Requirements

  • Proficiency in a programming language is needed.
  • Prior experience in system analysis or design is not necessarily required.
  • Intended for those wanting to learn about software aspects in analysis and design of complex systems.

Objectives

  • Appreciation for Software Engineering is important:
    • Focus on building complex software systems in frequently changing environments.
  • Understand how to:
    • Produce quality software systems within time constraints.
    • Handle complexity and change effectively.
  • Acquire technical knowledge.
  • Acquire managerial knowledge.
  • Understand the Software Lifecycle:
    • Including process vs product aspects.
    • Various software lifecycles and.
    • Greenfield Engineering starting from scratch.
    • Interface Engineering for legacy systems and reengineering
    • Reengineering defined by Hammer & Champy in 1993 is included.

Acquiring Technical Knowledge

  • Focus on understanding System Modeling
  • Learn about Modeling:
    • Using approximately 20% of UML aspects
    • UML stands for Unified Modeling Language.
  • Modeling at Different Phases of the Software Lifecycle:
    • Requirements Elicitation [Chap. 4] results in Deliverable 1
    • Requirements Analysis [Chap 5] results in Deliverable 2
    • Architectural Design [Chap 6 & 7] results in Deliverable 3
    • Object/Component Design [Chap 8]results in Deliverable 4
    • Coding [Chap 10] results in Deliverable 5
    • Testing [Chap 11] results in Deliverable 6, demonstrated during demo
    • The requirements analysis marked with * mixes the domain model with the solution model, being design-oriented, and in a Waterfall fashion.
  • Ability Model Traceability is key
  • Learning to use tools like CASE (Computer Aided Software Engineering), such as Rational Rose.

Readings

  • Required text:
    • Object-Oriented Software Engineering: Using UML, Patterns, and Java by Bernd Bruegge and Allen Dutoit, Prentice Hall, 2003
  • Recommended books:
    • Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process, 2nd ed. by C. Larman
    • Design Patterns by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, Addison-Wesley, 1996.
    • The Unified Modeling Language User Guide by Grady Booch, James Rumbaugh, and Ivar Jacobson, Addison Wesley, 1999.
    • Objective Knowledge, an Evolutionary Approach by K. Popper, Oxford Press, 1979.
  • Additional readings may be required

Software Engineering Context

  • Software engineering addresses the fact that some software projects total 96.7 million USD and are unsuccessful
  • Referencing a report to congress in 1979, it notes that 45% delivered, but never successfully used, 30% paid for, but not delivered, 3% usable with rework, and 20% used with extensive rework, but later abandoned

Characteristics of Software Systems

  • Software systems are complex creations and:
    • Perform many functions
    • Achieve different and conflicting objectives such as time scales or resource budgets
    • Consist of myriad components
    • Require participation of various disciplines
    • Have development process and life cycles that span many years
  • Software Systems are subject to constant change:
    • Client/end user requirements change
    • Errors get discovered
    • Developers improve understanding
    • Newer technologies emerge
    • Staff turnover occurs

Problem Solving in Software Engineering

  • Analysis: Understanding the problem and breaking into constituent parts
  • Synthesis: Assembling those parts into a structured hole
  • Uses techniques via formal procedures with notation
  • Collection of tehcniques and methodologies unify a philosophical approach
  • Uses Instruments or automated systems

Definition of Software Engineering

  • A discipline comprised of techniques, methodologies, and tools to produce
    • A high quality software syste
    • Within a budget
    • Before a set deadline
    • Even as changes occur

Scientist vs Engineer

  • Computer Scientist:
    • Focuses on algorithms, languages, and knowledge schemas
    • Unlimited time
  • Engineer:
    • Client focus
    • Utilizes tools, techniques, etc
  • Software Engineer:
    • Works across domains
    • Limited time
    • Must anticipate changing requirements and tech

Factors Affecting Software Quality

  • Complexity: - Software becomes so complex that no single programmer can fully understand it leading to higher rate of defects - Bug fixes may introduce further faults and problems
  • Change: - A software system's entropy increases by erosion of system structure - Over time the costs for change become too high, resulting system failure

Abstraction

  • Abstraction, decomposition, and hierarchy deal with complexity
  • Inherent human limitation to deal with complexity includes the 7+-2 phenomena
  • Chunking: Group collection of related objects for mental manageability
  • Ignoring Unessential details: Reduces clutter

System Models

  • Object Model: The structure and relevant relationships
  • Functional Model: The functions and dataflow
  • Dynamic model: How does the system react to external stimulus

Other Models

  • Task Model:
    • PERT (Project Evaluation and Review Technique) to highlight task dependencies
    • The schedule is needed to implement
    • Org Chart describes the different roles
  • Issues model describes opened issues and their resolutions. Constraints posed by a client are included, and resolutions are sought

Model Implications

  • A good software engineer codes sparingly - Reducing code is easier to modify down the line

Issues Management

  • Example of Issue: Galileo vs The Church
  • Centers on the Question of Universe's Center
    • Church: Claimed earth was the centre, citing Aristotle
    • Galileo: Argued for the sun based on Copernicus and observations of Jupiter's moons

Decomposition

  • Defined as dividing and conquering complexity
  • Functional Decomposition:
    • System decomposes into modules
    • Each module performs a procession step (function)
  • Object Oriented Decomposition:
    • System decompses into classes (objects)
    • Each class provides an abstraction

Part of Hierarchy

  • Type of hierarchy
  • e.g., Computer > CPU + I/O Devices + Memory > etc

Is-Kind-Of Hierarchy

  • e.g., Cell > Muscle Cell + Blood Cell + Nerve Cell > etc

Where Are We Now?

  • Three main ways to deal with complexitiy are:
    • Abstraction
    • Decomposition
    • Hierarchy
  • Object orientiation decomposition is important where appropriate
  • Many ways to correctly implement issues
  • Starting with functional description using the use case model and proceed to the object model
    • Leads to software lifecycle

Software Lifecycle

  • Software lifecycle defines the activity relationships needed for system development
  • Includes
    • Selecting relevant activities
    • Defining dependencies
    • Scheduling activities

Software Reusability

  • Reuse desgin patterns and frameworks where possible
  • It should solve specific problems in a way that is generalizable.
  • It should not solve from first principles, but re-use working parts.
  • Frameworks provide architectural guidance

Patterns

  • Chess Master - can use common Openings, Middle, and End games
  • Writer- use known character tropes. or writing guidelines
  • Architest - adopt known structural and architestural patterns
  • and Software Engineers adopt
    • Composite pattern where a collection of objects is treated as one
    • Adaptor pattern (wrapper) in existing systems
    • Bridge patterns in existing extensibles systems

Summary

  • Software engineering is a problem solving activity for developing limited time scales
  • There are many ways to deal with complexity like models
  • Many ways to deal with change
    • Modify the software development to fit the project
    • adopt non-dependant relationships
    • Provide configuration management
  • There is poor software production
    • Space Shuttle example cost billions of dollars
    • Shuttle first launch was cancelled due to sync failures

Software Examples

  • Include year 1900 bug impacting Mary
  • Leapyear bug
  • Airport opening delayed due to buggy automated luggage system

Studying That Suits You

Use AI to generate personalized quizzes and flashcards to suit your learning preferences.

Quiz Team

More Like This

Software Development Process Module 1
30 questions
Software Development Life Cycle
38 questions
Software Engineering Chapter 2
36 questions
Ingeniería de Software
8 questions
Use Quizgecko on...
Browser
Browser