Software Engineering

Close up of a microscope

Software Engineering

Course Code: SE200

Course Type: Undergraduate

Department: Computer Science, Mathematics

Faculty: Engineering

Accreditation: BEng

Course Duration: 2 Year

Course Location: Los Angeles

Starting Dates: February, March, October

Course Contact:

Course overview

Our bachelor's degree program provides students with the knowledge and skills to deliver robust, advanced, on-time, and in-budget software systems for their organization.

The program’s curriculum provides students with the ability to better analyze and design software systems through course offerings such as software requirements, architectural design, verification and validation, as well as security networks and the technology utilized to enhance these software engineering systems.

Entry Requirements
  • Conditional admission may be possible with less than a 3.0 GPA
  • A minimum of 18 months of industry experience
Course Schedule

EE 382C Introduction to Software Engineering Processes - 3 credit hrs
This course is an introduction to software engineering with an emphasis on the methods, techniques and technology to build and evolve software systems. The emphasis is on software engineering principles.

EE 379K Requirements Engineering: Acquisition and Modeling - 3 credit hrs
This course will address theoretical and practical methods for acquiring and modeling requirements for various systems stakeholders. Topics will include methods and techniques for managing the acquisition process among distributed team members and distributed stakeholders, eliciting and verifying requirements as a function of the type of stakeholder, the types of requirements, and system development maturity, managing the requirements artifacts, constructing model-based representations of requirements, synthesizing requirements for various stakeholders, and analyzing and evolving model-based requirements.

EE 382C Software Architectures - 3 credit hrs
The course will teach students about software architectures, architectural model specification techniques and analysis techniques offered by the research community as well as those architectures, model specifications and analytical methods commonly used in industry.

EE 382C.3 Verification and Validation - 3 credit hrs
This course covers various traditional and state-of-the-art techniques for software validation, a process that includes reasoning about (the correctness of) programs and testing programs. The course content will include both techniques for dynamic analysis, such as glass-box and black-box testing, equivalence partitioning, test strategy and automation, regression testing and debugging, and techniques for static analysis, such as symbolic execution, and also techniques for software model checking including those that employ artificial intelligence based heuristics.

EE 382C Empirical Studies in Software Engineering - 3 credit hrs
Software Engineering is of necessity an empirical enterprise. This course looks at different kinds of empirical evaluation from related fields such as behavioral sciences to see how one can adapt those techniques to the service of software engineering.

EE 382V: Formal Methods in Distributed Systems - 3 credit hrs
This course gives an introduction to the use of formal methods within the software design process. Specifically, this class will cover the application of models to distributed and concurrent systems. Modern software systems are commonly highly distributed, and this added sophistication further complicates software design. The rigor offered by formal methods aims to make the process more precise.

EE 382V: Software Engineering Lifecycle - 3 credit hrs
This course addresses five major topics in the Software Engineering Lifecycle: requirements, design, construction, measurement & evaluation, and maintenance & evolution.

EE 382V Advanced Programming Tools - 3 credit hrs
Programming is difficult - some of the problem developers face include.

  1. How can a project be structured so that developers can work on it concurrently?
  2. How can the building of a project be automated?
  3. How can a program be written to make it portable?
  4. How can a program be prototyped efficiently?
  5. How can a program be tested and debugged efficiently?
  6. How can the performance of a program be increased?

Using the right tools can solve these problems. Examples include tools for version control, documentation, program building and configuration, automatic testing, program analysis, and integrated development.

Our approach will be to introduce a specific problem, show how a tool can solve the problem, and then develop the technical principles underlying the tool. We will have written homework problems as well as coding exercises for each concept. The class will have a major design project that will begin at the start of the term. Use of the tools will be a required part of the project. We will use open-source tools to illustrate these concepts. The specific tool stack is described in the lectures section of this document. I selected these tools based on my experience at Google; they also power many state-of-the-art commercial projects.

Course Tutors
  • Jean C. Rau
  • Jon T. Fraley
  • Patricia J. Griffin
Learning Outcomes

After completing the course attendees will be able to:

  • Appreciate the wider engineering issues that form the background to developing complex and evolving software-intensive systems.
  • Plan and deliver an effective software engineering process, based on knowledge of widely used development lifecycle models.
  • Employ group working skills including general organization, planning and time management and inter-group negotiation.
  • Capture, document and analyse requirements.
  • Translate a requirements specification into an implementable design, following a structured and organised process.
  • Make effective use of UML, along with design strategies such as defining a software architecture, separation of concerns and design patterns.
  • Formulate a testing strategy for a software system, employing techniques such as unit testing, test driven development and functional testing.
  • Evaluate the quality of the requirements, analysis and design work done during the module.
  • $34,000 Total program tuition for students enrolling Fall & Spring

Upon admission, a $1000 non-refundable deposit is required to hold your place. This deposit is applied toward your initial tuition payment.

92% of our students find employment within 6 months of graduation

Typical skills breakdown for this course

Course search