Software and Systems Engineering

Course Description (minor revision to course description for traditional course in current catalog, and different prerequisites for nontrad program)

CSC3024 Software and Systems Engineering [4]. A study of the planning, specification, design, implementation, validation, documentation and management of computer software and computer systems. Participation in a major group project is required.

Prerequisites: CSC2013 Foundations of Computer Science 1, and CSC3033 Database Management Systems.

Topic: Software Design

• Fundamental design concepts and principles • The role and the use of contracts • Design patterns

• Software architecture
• Structured design
• Object-oriented analysis and design
• Component-level design
• Design qualities
• Internal including low coupling, high cohesion, information hiding, efficiency
• External including reliability, maintainability, usability, performance
• Other approaches: data-structured centered, aspect oriented, function oriented, service oriented, agile
• Design for reuse
• Use of open-source materials

Learning Objectives:

1. Discuss the properties of good software design including the nature and the role of associated documentation.
2. Evaluate the quality of multiple software designs based on key design principles and concepts.
3. Select and apply appropriate design patterns in the construction of a software application.
4. Create and specify the software design for a medium-size software product using a software requirement specification, an accepted program design methodology (e.g., structured or object-oriented), and appropriate design notation.
5. Conduct a software design review of open-source materials using appropriate guidelines.
6. Evaluate a software design at the component level.
7. Evaluate a software design from the perspective of reuse.

Topic: Using APIs

• Programming using APIs
• Design of APIs
• Class browsers and related tools
• Debugging in the API environment Introduction to component-based computing
• Introduction to Component-based Computing

Learning Objectives:

1. Explain the value of application programming interfaces (APIs) in software development.
2. Use class browsers and related tools during the development of applications using APIs.
3. Design, implement, test, and debug programs that use large-scale API packages.

Topic: Tools And Environments

• Programming environments
• Requirements analysis and design modeling tools
• Testing tools including static and dynamic analysis tools
• Tools for source control, and their use in particular in team-work
• Configuration management and version control tools
• Tool integration mechanisms

Learning Objectives:

1. Select, with justification, an appropriate set of tools to support the development of a range of software products.
2. Analyze and evaluate a set of tools in a given area of software development (e.g., management, modeling, or testing).
3. Demonstrate the capability to use a range of software tools in support of the development of a software product of medium size.

Topic: Software Processes

• Software life-cycle and process models
• Software process capability maturity models
• Approaches to process improvement
• Process assessment models
• Software process measurements

Learning Objectives:

1. Explain the concept of a software life cycle and provide an example, illustrating its phases including the deliverables that are produced.
2. Select, with justification the software development models and process elements most appropriate for the development and maintenance of a diverse range of software products.
3. Explain the role of process maturity models.
4. Compare the traditional waterfall model to the incremental model, the agile model, and other appropriate models.
5. For each of various software project scenarios, describe the project’s place in the software life cycle, identify the particular tasks that should be performed next, and identify measurements appropriate to those tasks.

Topic: Requirements Specifications

• Systems level considerations
• Software requirements elicitation
• Requirements analysis modeling techniques
• Functional and non-functional requirements
• Acceptability of certainty / uncertainty considerations regarding software / system behaviour
• Prototyping
• Basic concepts of formal specification techniques

Learning Objectives:

1. Apply key elements and common methods for elicitation and analysis to produce a set of software requirements for a medium-sized software system.
2. Discuss the challenges of maintaining legacy software.
3. Use a common, non-formal method to model and specify (in the form of a requirements specification document) the requirements for a medium-size software system.
4. Conduct a review of a software requirements document using best practices to determine the quality of the document.
5. Translate into natural language a software requirements specification (e.g., a software component contract) written in a formal specification language.

Topic: Software Verification Validation

• Distinguishing between verification and validation
• Static approaches and dynamic approaches
• Validation planning; documentation for validation
• Different kinds of testing – human computer interface, usability, reliability, security, conforman to specification
• Testing fundamentals, including test plan creation and test case generation black-box and white-box testing techniques
• Defect seeding
• Unit, integration, validation, and system testing
• Object-oriented testing; systems testing
• Measurements: process, design, program
• Verification and validation of non-code (documentation, help files, training materials)
• Fault logging, fault tracking and technical support for such activities
• Regression testing
• Inspections, reviews, audits

Learning Objectives:

1. Distinguish between program validation and verification.
2. Describe the role that tools can play in the validation of software.
3. Distinguish between the different types and levels of testing (unit, integration, systems, and acceptance) for medium-size software products and related materials.
4. Create, evaluate, and implement a test plan for a medium-size code segment.
5. Undertake, as part of a team activity, an inspection of a medium-size code segment.
6. Discuss the issues involving the testing of object-oriented software.

Topic: Software Evolution

• Software maintenance
• Characteristics of maintainable software
• Reengineering Legacy systems
• Refactoring
• Software reuse

Learning Objectives:

1. Identify the principal issues associated with software evolution and explain their impact on the software life cycle.
2. Discuss the challenges of maintaining legacy systems and the need for reverse engineering.
3. Outline the process of regression testing and its role in release management.
4. Estimate the impact of a change request to an existing product of medium size.
5. Develop a plan for re-engineering a medium-sized product in response to a change request.
6. Discuss the advantages and disadvantages of software reuse.
7. Exploit opportunities for software reuse in a given context.
8. Identify weaknesses in a given simple design, and highlight how they can be removed through refactoring.

Topic: Software Project Management

• Team management
o Team processes
o Team organization and decision-making
o Roles and responsibilities in a software team
o Role identification and assignment
o Project tracking
o Team problem resolution
• Project scheduling
• Software measurement and estimation techniques
• Risk analysis
o The issue of security
o High integrity systems, safety critical systems
o The role of risk in the life cycle
• Software quality assurance
o The role of measurements
• Software configuration management and version control; release management
• Project management tools
• Software process models and process measurements

Learning Objectives:

1. Demonstrate through involvement in a team project the central elements of team building and team management.
2. Prepare a project plan for a software project that includes estimates of size and effort, a schedule, resource allocation, configuration control, change management, and project risk identification and management.
3. Indicate an approach to risk that will help to secure the on-time delivery of software.
4. Compare and contrast the different methods and techniques used to assure the quality of a software product.
Topic revision: r3 - 2013-10-22 - RobertKasper
This site is powered by the TWiki collaboration platformCopyright &© by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback