Software Design and Development

Prerequisites

C or better in CMSC 341 (Data Structures)

Description

This course is an introduction to the basic concepts of software engineering including software lifecycle, requirements analysis, design, coding, testing, and documentation. Professional ethics in computer science and the social impact of computing are discussed. Additional topics may include tools for software development, software metrics, and software maintenance. The objectives of the course are met using classroom presentations, guest lecturers, and a semester-long project developed in a team setting.

Course Outcomes

  1. Understanding of the software development life cycle and software process models
  2. Exposure to specific software processes and process improvement
  3. Know the definitions, goals, and principles of software engineering and how to apply them
  4. Experience working in a software development team
  5. Experience taking a leadership role in a software development team
  6. Enhanced verbal and written communication skills
  7. Exposure to professional ethics in computer science

Program Outcomes

CMSC 345 supports the CMSC program outcomes:

  • (O1) and (O3) through the development of a large software product in a current high-level language, proceeding through all phases of the software development life cycle (SDLC), using tools appropriate to each team’s particular product
  • (O2) through multiple written and oral communication assignments
  • (O5) through lectures, readings, and discussions regarding current topics in the software engineering sub-discipline

This course also enables CAC student characteristic (d):

  • (d) An ability to function effectively on teams to accomplish a common goal

Text

There is no required textbook for this course. Readings will be selected from articles from the current software engineering literature.

Topics

  1. Software Process Models and Software Processes
    • waterfall, spiral, iterative and incremental, evolutionary and throwaway prototyping, agile
    • Capability Maturity Model Integrated (CMMI)
    • overview of specific processes (e.g., Rational Unified Process, SCRUM, Extreme Programming)
    • The Software Development Life Cycle
    1. Requirements
      • product scope
      • requirements specification (e.g., use case specifications and diagrams)
      • functional vs. non-functional requirements
      • user interface requirements
      • usability issues
      • requirements traceability
    2. Design
      • system architecture
      • system decomposition
      • data design
      • procedural vs. object-oriented design
      • design by contract
    3. Implementation
      • coding and commenting standards
      • coding goals (e.g., simplicity, efficiency, maintainability)
      • refactoring
      • configuration management
      • code inspection
    4. Testing
      • black box (specification-based) testing
      • white box (structural) testing
      • unit testing
      • integration testing
      • system testing
      • acceptance testing
  2. Communication Skills
    • working in teams
    • formal reports
    • diagrams and notations (e.g. UML diagrams)
    • oral presentations and demonstrations

Additionally, instructors should schedule speakers (minimum of three) from outside the University. Speakers whose topics reinforce or further explain one or more of the required or optional topics are recommended.

Grading

  1. Team Grades (65% total)
    • Project Artifacts (40%)
      • System Requirements Specification (8%)
      • System Design Document (8%)
      • UI Design Document (8%)
      • Code Inspection Report (6%)
      • Test Report (6%)
      • Administrator Manual (4%)
    • Final Product Delivery and Demonstration (5%)
    • Final Product (20%)
    • Midterm Design Review (Satisfactory/Unsatisfactory)
    • Peer Evaluations (possible deduction)
  2. Individual Grades (35% total)
    • Attendance (5%)
    • Quizzes (20%)
    • Weekly Verbal and Biweekly Written Status Reports (5%)

Updated February 26, 2012