CMSC 447 Syllabus

CMSC 447 Syllabus

Software Engineering I


CMSC 341 and one additional 400-level CMSC course with a grade of ‘C’ or better.


This course introduces the basic concepts of software engineering, including software life cycle, requirements analysis and software design methods. Professional ethics in computer science and the social impact of computing are discussed as an integral part of the software development process. Additional topics may include tools for software development, software testing, software metrics and software maintenance.

Course Outcomes

Each student will:

  1. Apply advanced software engineering principles: Develop a deep understanding of advanced software engineering concepts, methodologies, and best practices, and apply them effectively to design, develop, and deploy complex software systems.
  2. Collaborate in a team-based software project: Enhance teamwork and collaboration skills by working in a team-based environment to plan, implement, and deliver a software project that addresses real-world problems or meets specific requirements.
  3. Demonstrate proficiency in software development tools and technologies: Acquire proficiency in utilizing modern software development tools, frameworks, and technologies, including version control systems, integrated development environments (IDEs), testing frameworks, and project management tools.
  4. Analyze software requirements and design solutions: Develop the ability to critically analyze software requirements, evaluate alternative solutions, and design robust software architectures that meet functional and non-functional requirements, while considering scalability, security, and maintainability.
  5. Implement and test software solutions: Gain practical experience in implementing software solutions using appropriate programming languages, libraries, and frameworks. Apply rigorous testing methodologies to ensure the correctness, reliability, and performance of the developed software.
  6. Conduct effective software project management: Learn and apply project management techniques to plan, schedule, track progress, and manage software development projects. Develop skills in risk assessment, resource allocation, and effective communication within a software engineering team.
  7. Present and document software artifacts: Enhance communication skills by preparing and delivering comprehensive presentations and documentation that effectively communicate the software project’s objectives, design decisions, implementation details, and evaluation outcomes to technical and non-technical stakeholders.

Student Outcomes

  Level Of Emphasis
ABET Outcome Low Medium High
Analyze a complex computing problem and to apply principles of computing and other relevant disciplines to identify solutions.     X
Design, implement, and evaluate a computing-based solution to meet a given set of computing requirements in the context of the program’s discipline.     X
Communicate effectively in a variety of professional contexts.     X
Recognize professional responsibilities and make informed judgments in computing practice based on legal and ethical principles.     X
Function effectively as a member or leader of a team engaged in activities appropriate to the program’s discipline.     X
Apply computer science theory and software development fundamentals to produce computing-based solutions.     X



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


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

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

Optional Topics

  • Capability Maturity Model Integration (CMMI)


50% Project Artifacts

(System Requirements Specification,
System Design Document,
UI Design Document,
Code Inspection Report,
Test Report, and
Administrator Manual)

25% Product Delivery and Demonstration
10% Homework Assignments
15% Exam(s)

Updated June 19, 2023 by JD and JK