Topics to be covered

 

1.       Why and How to Study Software Engineering

1.1.              Software's Role in the World

1.1.1.        Where and how is it used?

1.1.2.        Software Economics

1.1.3.        Sociological Issues

1.2.              The nature of software

1.2.1.        What makes it different?

1.2.2.        What is it like?

1.2.3.        Some useful analogies

1.2.4.        Some desirable qualities

1.3.              Engineering Software

1.3.1.        Software Product Anatomy

1.3.2.        Stakeholders and their Stakes

1.3.3.        Software Processes

2.       Software Product/Artifact Representation

2.1.              The Central Role of Representation

2.1.1.        Communication/Coordination

2.1.2.        Quality Evaluation

2.1.3.        Analysis, comparison, understanding

2.2.              Abstraction Ð a historical perspective

2.3.              Approaches

2.3.1.        Informal approaches

2.3.1.1.               Natural language

2.3.1.2.               Structured Natural Language

2.3.2.        Pictorial and diagrammatic approaches

2.3.2.1.               Boxologies

2.3.2.2.               Charts and Graphs

2.3.3.        Formalized approaches

2.3.3.1.               Dataflow Diagrams

2.3.3.2.               State Diagrams and Charts

2.3.3.3.               Petri Nets

2.3.3.4.               Programming Languages

2.3.4.        Mathematical and formal approaches

2.3.4.1.               Formal specifications overview

2.3.4.2.               Z

2.3.4.3.               Algebraic Specifications

2.3.4.4.               Predicate Logic

2.3.5.      An Introduction to UML

2.3.5.1.  UML fundamentals

2.3.5.2.  Four views into the software development process (Use case, Logical, Component, Deployment views)

2.3.5.3.            Examples

3.  A Careful Look at Software Products, Their Specification, and the Processes Associated with them:

         3.1.  Requirements

                           3.1.1  What are they for?

                           3.1.2  What is their anatomy?

                           3.1.3.  Representation Approaches

                                             3.1.3.1.  General Approaches

                                             3.1.3.2.  Some Examples

                           3.1.4.  Associated Processes

         3.2.  Designs and Architectures

                           3.2.1  What are they for?

                           3.2.2.  What is their anatomy?

                           3.2.3   Representation Approaches and Examples

                           3.2.4.  Associated Processes

                                             3.2.4.1.  Developing Designs

                                              -  Philosophical Approaches

                                              -  Some Examples of Design Methods

                                                                               - Rigorous Design Method Comparison

3.2.4.2. Analysis/Validation/Testing of Designs

3.2.5. Design Methodology Comparison

         3.3.  Code

                           3.3.1.  Code Paradigms and Languages

                           3.3.2.  Coding Styles and Practices

                           3.3.3.  Associated Processes

                                             3.3.3.1.  Testing and Analysis of Code

4.  Software Process Representation

         4.1.  The role of process in software engineering

4.2.              Software process representation approaches

4.2.1.        Informal approaches

4.2.2.        Pictorial approaches

4.2.3.        Programming Languages

                                             4.2.3.1. Process requirements

                                             4.2.3.2.  Process models

                                             4.2.3.3.  Process Code

         4.3. Process Execution

4.4                Process Improvement: The Capability Maturity

Model (CMM)

5.  Some Additional Software Processes:

         5.1.  Lifecycle Testing and Analysis (and Perpetual Testing)

         5.2.  Configuration Management

         5.3.  Version Control

         5.4.  Reuse

         5.5.  Evolution/Maintenance