Enrollment options

Learn how to apply an engineering approach to computer software development by focusing on software principles, lifecycle models, requirements and specifications, architecture and conceptual model design, detailed design, implementation, validation and verification, quality assurance, configuration control, project management, tools, and environments.

Time: 36
Course Introduction:

Software engineering is a discipline that allows us to apply engineering and computer science concepts in developing and maintaining reliable, usable, and dependable software. The software engineering concept was discussed at Germany's 1968 NATO Science Committee meeting. In 1984, Carnegie Mellon University won a contract to establish a government research and development center to transition processes, methods, tools, and frameworks to address the challenges of software cost and quality in meeting customer needs. There are several areas to focus on within software engineering, such as design, development, testing, maintenance, and management. Software development outside the classroom is complex because real-world software is much larger, widely distributed worldwide, and faces cybersecurity threats.

This course aims to present software engineering as a body of knowledge. The course presents software engineering concepts and principles parallel to the software development life cycle. The course will begin by introducing software engineering, defining this body of knowledge, and discussing the main methodologies of software engineering. You will then learn about the Software Development Life Cycle (SDLC) framework and its major methodologies, followed by software modeling using the Unified Modeling Language (UML), a standardized general-purpose modeling language used to create visual models of object-oriented software. You will learn about the SDLC's major phases: analysis, design, coding/implementation, and testing. You will also learn about project management to deliver high-quality software that satisfies customer needs and stays within budget. By completing the course, you will master software engineering concepts, principles, and essential processes of the SDLC. Using UML, you will demonstrate this knowledge by creating artifacts for requirements gathering, analysis, and design phases.

Software Engineering is a highly process-oriented discipline, including many technical and management activities performed by computer hardware, software, or people. In general, a process is a description of the tasks to be performed to complete an activity. Suppose a process needs more detail for hardware, software, or humans to perform the activity (the process is not enactable). In that case, it must have an associated procedure that describes "how" the tasks are enacted. In general, a procedure describes "how" a process is enacted. Processes and procedures also specify "who" enacts them (the roles) and provide context information, such as "why", "when", and "where" the activities are performed. Lastly, this course uses several important paradigms. A paradigm is a perspective, pattern, or model that helps describe a discipline. Two important paradigms for this course are "life cycle", used to describe the development of a system, and "language", used to explain processes and procedures. We communicate via a language that has nouns and verbs. Nouns represent roles ("who" and "what") and places ("where"); verbs represent activities, processes, and procedures. To learn the language, we need to learn its terms, the relationships of the terms, and its grammar. The language paradigm is used in explaining object-oriented design, modeling languages, and teaching programming languages.

Course Units:
  • Unit 1: Introduction to Software Engineering
  • Unit 2: The Software Development Life Cycle
  • Unit 3: Software Modeling
  • Unit 4: Software Requirements Gathering
  • Unit 5: Software Requirements Analysis
  • Unit 6: Software Design
  • Unit 7: Object-Oriented Implementations
  • Unit 8: Software Testing
  • Unit 9: Project Management
  • Unit 10: Design Modification and Quality Control
Course Learning Outcomes:
  • Describe the knowledge and skills necessary to practice software engineering and the professional issues that a software engineer might face;
  • Use software engineering principles such as separation of concerns, abstraction, and incremental development to develop reliable software;
  • Differentiate between software development processes and methods;
  • Create major activities and key deliverables in a software development life cycle, such as use case, class, and sequence diagrams;
  • Create UML diagrams for software analysis and design by using the object-oriented methodology;
  • Use project management concepts to manage projects, people, and products; and
  • Use software engineering concepts to construct quality software systems.
Continuing Education Units: 3.6
Self enrollment (Student)