• 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.

        • Course Syllabus

          First, read the course syllabus. Then, enroll in the course by clicking "Enroll me". Click Unit 1 to read its introduction and learning outcomes. You will then see the learning materials and instructions on how to use them.

        • Unit 1: Introduction to Software Engineering

          When dependency on software and computers became more important, software grew in size and became a necessity for businesses and users worldwide. In the last 30 years, we have seen an unparalleled explosion in the amount of software produced and used by our modern society. There is a need to set concrete objectives (or functional requirements), predict necessary resources (like cost estimates) to attain those objectives, and manage customers' expectations. As you review the material in this unit, compare and contrast software engineering with computer science and information technology, and contrast them with STEM, an educational model and program that combines the closely related fields of science, technology, and mathematics. These disciplines are closely related and have some differences when applied to software. As you work through this unit, spend some time reviewing the software characteristics and the code of ethics used in the professional practice of software engineering.

          Completing this unit should take you approximately 3 hours.

        • Unit 2: Software Development Life-Cycle Models

          The software development life-cycle (SDLC) is the process of planning, creating, testing, and deploying an information system. There are different approaches to breaking down the work when developing software systems. Conceptually, each model provides specific guidance to the sequencing and repeating life-cycle activities to deliver high-quality software systems.

          As you review this unit, try to see the similarities in these categories of life-cycle models. This will help you grasp the basic concepts of SDLC. This unit connects strongly with Unit 9: Project Management, since choosing and managing a software life-cycle process is a central component of project management.

          Completing this unit should take you approximately 4 hours.

        • Unit 3: Software Modeling

          Many people believe that good design is fundamental to creating successful software. The first step in software creation is to gather requirements. Notations like UML allow us to articulate complex ideas succinctly and precisely. Designing software requires using certain industry-standard design tools, and mastery of them is essential to becoming a capable software engineer.

          This unit will introduce you to UML, a standardized general-purpose modeling language for creating visual models of object-oriented software. This unit aims to give you a comprehensive understanding of UML, the five fundamental artifacts of UML, and modeling concepts, as well as the modeling concepts' relationships to the terms system, model, and view.

          Completing this unit should take you approximately 4 hours.

        • Unit 4: Software Requirements Gathering

          Requirements gathering requires the software engineer (in this case, a business analyst) to interact with the stakeholders, including customers and users, to gather/collect information about what the software system being developed needs to do. There is also the situation where vendors are subcontracted to develop all or some components of the software systems or the hardware on which the software will run. In this case, the vendors bid on the subcontract by providing a proposal in response to a proposal request. In this unit, you will learn the data/information types, data collection techniques, and data collection and application types.

          Requirements data elicitation and gathering tools are manual, for example, interviews, questionnaires, brainstorming meetings, and reviews. Automation potential consists of tools that help develop diagrams for modeling data, creating relevant UML data diagrams, such as entity relation diagrams and class diagrams, and process diagrams, such as collaboration and sequence diagrams. Since requirements data originates in the user application domain, requirements data encompasses spoken and written stories. Since requirements analysis transitions to the solution domains (the "what" and "how" domains), opportunities for software tool automation lie in support of the development of use cases, the identification of abstractions, tracing forward from related existing requirements and related problem domain elements, tracing backward from related products of the SDLC phases, from analysis of problem domain and solution domain data and processes, such as related software trouble reports and change requests, and tools that automate estimation and prediction, decision making, correlation of data, and inference of "new" data. Many of these tools will come from AI search, analysis, and learning tools.

          Completing this unit should take you approximately 3 hours.

        • Unit 5: Fundamentals of Requirements Analysis

          Requirements elicitation is when software engineers interact with the stakeholders, including users, to gather information about what the software system needs to do. In this unit, we examine what the software engineer does to elicit, analyze (or translate), validate, and manage this life cycle phase. Each step requires working with the customer to achieve a common understanding of the customer's goals. This set of activities is called "analysis" and focuses on what the application will do, whereas "design" describes how the application will work.

          There are many ways to elicit and analyze customer requirements. The three most commonly used methodologies are data-oriented, process-oriented, and object-oriented. We will examine the conceptual foundations, activities, and deliverables in each of these methodologies. As you review this unit, focus on the object-oriented methodology and how it applies to software requirements and analysis. You will put it all together later in this course as part of a case study.

          Completing this unit should take you approximately 4 hours.

        • Unit 6: Software Design

          After requirements and analysis, a software engineer must transform the analysis model into a design model that can be implemented in a specific hardware and software environment. In this unit, we will discuss design and architecture design principles. Just as there are various methodologies for requirements analysis, we will look at three corresponding methodologies of the design model (data-oriented, process-oriented, and object-oriented). As you review this unit, focus on the object-oriented methodology and how it applies to software design. You will put it all together later in this course as part of a case study. However, in addition, start putting it all together now by applying what we have covered to this course. View this course as a system – having requirements, a design, an implementation, and verifications and validations. The application domain for this course is education, and the terminology used differs from that of software engineering. For example, the requirements for this system are called learning objectives; the design is called a syllabus. As we continue this course, consider how you would apply the software engineering models to this course: the CS302 system.

          Completing this unit should take you approximately 9 hours.

        • Unit 7: Object-Oriented Implementations

          Implementation, also known as programming or coding, is the process of using a programming language to convert specified requirements into software source code and later into compiled code for execution. Programmers can use automated tools to convert design requirements into code. Sometimes, vendors are subcontracted to develop all or part of the software and even the hardware it will run on, according to specified requirements. In these situations, vendors will bid on the subcontract by providing a proposal.

          Completing this unit should take you approximately 2 hours.

        • Unit 8: Software Testing

          The SDLC phases are not necessarily sequential and often overlap, which is the case with software tests. Software testing is the execution of code to find errors and to verify requirements are satisfied. The code executed can be part of the developed code or test code that enables the test itself, for example, code that calls the code under test or demonstrates behavior. Test activity can occur in any phase but typically in implementation and construction. Types of testing include unit testing, integration testing, system testing, and acceptance testing. Each is performed according to a test plan identifying the test strategy and procedures used.

          Testing is an SDLC activity that may occur at any SDLC activity level: requirements, design, construction, test, deployment, and delivery. Software testing is an example of development and maintenance activities used in every phase of the SDLC and, thus, are affected by technological change that affects components at any level, from small components of code to large integrated code components to design and architecture components and to requirements. Software testing methodologies have evolved in parallel with the evolution of software development methodologies. For example, there are testing methodologies for agile, waterfall, incremental, evolutionary, spiral, and OO development methodologies. The long history of the evolution of software testing has resulted in an extensive testing vocabulary, testing strategies, quality features, processes, procedures, practices and techniques, compatible methods (methodologies), and automated testing tools. The software testing support tools listed at the end of this unit no longer exist, are limited to code products, or need to be well known. However, the testing functions they provided continue to evolve and are provided by newer tools, which also support the testing of products of every SDLC phase, support new testing methodologies, models, and languages, focus on satisfying needed quality goals, and utilize AI, large scale data analysis, cloud resources.

          Completing this unit should take you approximately 3 hours.

        • Unit 9: Project Management

          There are different principles necessary to practice software engineering. In this unit, you will use these principles and main software engineering concepts to practice professional issues that a software engineer might face. This includes identifying input and output and main stakeholders, developing a timeline with checkpoints for delivery of key deliverables, creating the main UML diagrams, and using different testing strategies and system quality evaluation methods.

          Completing this unit should take you approximately 4 hours.

        • Unit 10: Design Modification and Quality Control

          There are different principles necessary to practice software engineering. In this unit, you will use these principles and main software engineering concepts to practice professional issues that a software engineer might face. This includes identifying input and output and main stakeholders, developing a timeline with checkpoints for delivery of key deliverables, creating the main UML diagrams, and using different testing strategies and system quality evaluation methods.

          Completing this unit should take you approximately 5 hours.

        • Study Guide

          This study guide will help you get ready for the final exam. It discusses the key topics in each unit, walks through the learning outcomes, and lists important vocabulary. It is not meant to replace the course materials!

        • Course Feedback Survey

          Please take a few minutes to give us feedback about this course. We appreciate your feedback, whether you completed the whole course or even just a few resources. Your feedback will help us make our courses better, and we use your feedback each time we make updates to our courses.

          If you come across any urgent problems, email contact@saylor.org.

        • Certificate Final Exam

          Take this exam if you want to earn a free Course Completion Certificate.

          To receive a free Course Completion Certificate, you will need to earn a grade of 70% or higher on this final exam. Your grade for the exam will be calculated as soon as you complete it. If you do not pass the exam on your first try, you can take it again as many times as you want, with a 7-day waiting period between each attempt.

          Once you pass this final exam, you will be awarded a free Course Completion Certificate.

        • Saylor Direct Credit

          Take this exam if you want to earn college credit for this course. This course is eligible for college credit through Saylor Academy's Saylor Direct Credit Program.

          The Saylor Direct Credit Final Exam requires a proctoring fee of $5. To pass this course and earn a Proctor-Verified Course Certificate and official transcript, you will need to earn a grade of 70% or higher on the Saylor Direct Credit Final Exam. Your grade for this exam will be calculated as soon as you complete it. If you do not pass the exam on your first try, you can take it again a maximum of 3 times, with a 14-day waiting period between each attempt.

          We are partnering with SmarterProctoring to help make the proctoring fee more affordable. We will be recording you, your screen, and the audio in your room during the exam. This is an automated proctoring service, but no decisions are automated; recordings are only viewed by our staff with the purpose of making sure it is you taking the exam and verifying any questions about exam integrity. We understand that there are challenges with learning at home - we won't invalidate your exam just because your child ran into the room!

          Requirements:

          1. Desktop Computer
          2. Chrome (v74+)
          3. Webcam + Microphone
          4. 1mbps+ Internet Connection

          Once you pass this final exam, you will be awarded a Credit-Recommended Course Completion Certificate and can request an official transcript.