• Course Introduction

    • Time: 36 hours
    • Free Certificate
    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 with an introduction to software engineering, defining this body of knowledge and a discussion of 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.