CSC 266 Software Engineering       [formerly CSC 265] 4 cr.

This course will explore in detail the design and implementation of large software systems using modern software engineering principles.   Topics include: software life cycle models, tools and techniques for software engineering, the software development life cycle, testing/evaluation techniques, and evaluation metrics.   An ongoing group design project will be used to gain practical experience with course topics and CASE tools.   Three lecture hours and three hours of scheduled laboratory per week, plus programming work outside of class.   Not open to students who have received credit for CSC 265.
Prerequisite: CSC 260.


Goals:
   The purpose of this course is to develop students' understanding of modern methodologies, processes and techniques encountered in the development of large-scale software systems.   The goals of the course are:
  • CG1: to develop an appreciation for the process of large-scale software development;
  • CG2: to develop the skills and knowledge necessary to analyze, design and verify large software systems;
  • CG3: to give students experience in making and critiquing presentations;
  • CG4: to give students experience in team software development.

Objectives:
   Upon successful completion of the course, the student will have:
  • CO1: demonstrated knowledge of the software development life cycle and its phases;
  • CO2: demonstrated knowledge of the major models used in the development of large-scale software;
  • CO3: demonstrated an appreciation of the factors affecting team selection and performance;
  • CO4: demonstrated knowledge of the tools and techniques of software development, specifically including UML;
  • CO5: demonstrated knowledge of modern design paradigms;
  • CO6: properly utilized a modern CASE tool environment, specifically including UML modeling;
  • CO7: developed and executed a plan for product testing and evaluation;
  • CO8: participated in the development and presentation of group projects.

Topics:
  • cross life cycle software engineering concepts and techniques
    • historical and economic aspects of Software Engineering
    • professional code of conduct
    • social context of software development
    • overview of the software development process
      • requirements, specification, design, implementation, integration, maintenance and retirement
    • software life cycle models
      • classical: ad hoc ("build and fix"), waterfall, rapid prototyping, incremental, extreme programming, spiral
      • object-oriented: fountain
    • development teams
      • organizational options
      • team roles
    • basic tools and techniques
      • stepwise refinement, cost-benefit analysis, metrics, CASE, version control, configuration control
      • Unified Modeling Language (UML)
    • product testing
      • pre-execution testing: walkthroughs, inspections, peer review
      • execution-based testing
      • test objectives: evaluate the utility, reliability, robustness, performance and correctness of the product
      • correctness proofs
    • modular design
      • cohesion
      • coupling
      • encapsulation
      • abstract data types (ADTs)
      • information hiding
      • objects
        • inheritance and polymorphism
      • dynamic binding
    • reusability
      • concepts, design guidelines, potential issues
    • portability
      • concepts, impediments, basic techniques
    • interprocess communication / interoperability
      • COM, CORBA
    • planning
      • time and cost estimation
      • management plans
      • development of a test plan
      • training as an aspect of planning
  • information system models
    • role of database systems
  • requirements phase activities
    • determining requirements
    • analyzing requirements
    • human factors
    • prototyping
    • testing, tools and metrics
  • classical specification (analysis) phase activities
    • the specification document
    • structured systems analysis
    • entity-relationship modeling
    • finite state machines
    • other formal techniques (petri nets, Z)
    • comparison of techniques
    • testing, tools and metrics
  • object-oriented analysis (specification) phase activities
    • object-oriented analysis concepts
    • use-case modeling
    • class modeling
    • dynamic (activity) modeling
    • testing, tools and metrics
  • design phase activities
    • design and abstraction
    • action (process) oriented design
    • data-oriented design
    • object-oriented design
    • testing, tools and metrics
  • implementation phase activities
    • choosing a programming language
    • good programming practices
    • coding standards
    • module reuse
    • integration
    • test case set generation
      • testing to code
      • testing to specifications
    • black-box testing
    • glass-box testing
    • code walkthroughs and inspections
    • tools
  • implementation and integration phase activities
    • an alternative to implementation, then integration
    • basic concepts
    • top-down implementation and integration
    • bottom-up implementation and integration
    • implementation and integration in an object-oriented product
    • testing
      • graphical user interface (GUI) integration testing
      • product testing
      • acceptance testing
    • tools, metrics
  • maintenance phase activities
    • reasons why maintenance is necessary
    • management of maintenance
      • fault reporting and resolution
      • change authorization
    • effect of repeated maintenance
    • reverse engineering
    • testing, tools and metrics
  • retirement phase activities
    • factors influencing system retirement
    • management of the retirement process

      The emphasis of the course is on the proper design of a software system from initial conception to final product maintenance.   There will be an ongoing case study presented in depth, paralleled by a semester-long design project leading to the design and implementation of a moderate-sized system by groups within the class.   Extensive laboratory work, group discussion time and group presentations conducted as part of the scheduled laboratory sessions are an integral component of the course, serving to reinforce the concepts and techniques presented in lecture.

      All programs must conform to departmental guidelines for program design and implementation, and all lab reports must conform to guidelines announced in class.   Regardless of numeric average, a student will not be eligible for a passing grade unless he or she has submitted a lab report for every programming assignment.

      The course grade will be determined using the following approximate weights: project reports and deliverables: 25%;   presentations: 10%; midterm and final exam: 40%; homework: 15%; quizzes and/or papers: 10%.


Bibliography:
  • Dennis & Wixom.   Systems Analysis and Design.   John Wiley & Sons, 2000.
  • Dikel, David M.; Kane, David; Wilson, James R.   Software Architecture: Organizational Principles and Patterns.   Prentice-Hall, 2001.
  • Fowler, Martin, with Kenneth Scott. UML Distilled: A Brief Guide to the Standard Object Modeling Language.   Second Edition. Addison-Wesley, 2000.
  • Gamma, Helm, Johnson & Vlissides.   Design Patterns.   Addison-Wesley, 1995.
  • Hoffer, et. al.   Modern Systems Analysis & Design. Second Edition. Addison-Wesley, 1999.
  • Peters & Pedrycz. Software Engineering: An Engineering Approach.   John Wiley & Sons, 2000.
  • Pfleeger, Shari Lawrence.   Software Engineering: Theory and Practice.   Second Edition. Prentice-Hall, 2001.
  • Pressman, Roger S. Software Engineering: A Practitioner's Approach. Fifth Edition. McGraw-Hill, 2001.
  • Schach, Stephen R.   Classical and Object-Oriented Software Engineering.   Fifth Edition.   McGraw-Hill, 2002.


Salem State Home Computer Science Home Faculty Computer Studies Major Flow Sheet
Computer Studies Minor Courses Course Sequence Diagram Computer Laboratories