Software Engineering

Encompasses technical issues affecting software architecture, design, and implementation as well as process issues that address project management, planning, quality assurance, and product maintenance.

As software becomes ever more common in everything from airplanes to appliances, there is an increasing demand for engineering professionals who can develop high-quality, cost-effective software systems. The BS in software engineering combines traditional computer science and engineering with specialized course work in software engineering. The software engineering degree encompasses technical issues affecting software architecture, design, and implementation as well as process issues that address project management, planning, quality assurance, and product maintenance. Students are prepared for immediate employment and long-term professional growth in a range of software development organizations.

Students learn principles, methods, and techniques for the construction of complex and evolving software systems. The major encompasses technical issues affecting software architecture, design, and implementation as well as process issues that address project management, planning, quality assurance, and product maintenance. Upon graduation, students are prepared for immediate employment and long-term professional growth in software development organizations.

We offer a challenging undergraduate program that prepares students for the demands and challenges of the software industry. The undergraduate degree consists of both core and elective courses that focus on the software engineering lifecycle. In addition, each student must complete a senior project on a team of four or five students.

Plan Of Study

The software engineering program has four key elements: engineering design, software product development, teamwork, and communication. The curriculum ensures that the student’s coursework balances between software design principles and software process practices. In every course, teamwork is emphasized with a significant part of the final grade being based on team project activities. By the time our students start their senior project, they will have worked on 20 to 25 different student teams in their software engineering courses. Software engineering students also develop their communication skills. In every course, they will be preparing engineering documentation, such as requirements documents, design documents, project plans, burndown charts, and software test plans. Also, at the end of each project cycle, the students make oral presentations on their work and receive critique from the instructor and other students in the class.

The software engineering program focuses on developing skills to:

  1. Model and analyze proposed and existing software systems, especially through the use of discrete mathematics and statistics.
  2. Apply quality principles to the definition of software systems and processes.
  3. Analyze and design complex software systems using contemporary principles such as cohesion and coupling, abstraction and encapsulation, design patterns, frameworks, and architectural styles.
  4. Apply contemporary software engineering methods to planning, management, and development of software systems.
  5. Accurately communicate technical material related to all phases of the software life cycle via concise and correct documents, graphics and oral presentations.
  6. Work in small teams to develop a software system. This includes the ability to assume distinct operational roles (e.g., configuration management, quality assurance) in addition to design and implementation.
  7. Assess the social, environmental, and cultural factors arising from existing software systems as well as potential risks of proposed systems with a clear understanding of the ethical and professional responsibilities necessary for different software product lines.
  8. Relate principles of software engineering to at least one application domain where those principles can be applied.
  9. Explore new topics in software engineering or related application domains with limited oversight and input from faculty or mentors.
  10. Rapidly learn, assess, and adapt to new languages, environments, and paradigms for software development.

With the skills obtained in our program, software engineering students will be able to design and build quality software solutions that meet the customer’s requirements, are delivered on time, without defects, and within budget.

An important component of the curriculum is the complementary course work in related disciplines. As with other engineering fields, mathematics and the natural sciences are fundamental. In addition, students must complete courses in related fields of engineering, business, or science. Two engineering electives, plus a three-course sequence in an application domain, enable students to connect software engineering principles to application areas. A required course in economics or finance bridges software engineering with the realities of the business environment.

Students also complete general education courses in the liberal arts to develop a sense of professionalism and social responsibility in the technical world.


Engineering electives

Students may choose engineering electives from software engineering, computer science, or majors in the  Faculty  of Engineering. Additional rules and restrictions are listed on the department website.

Application domain courses

An application domain is a set of three courses that expose students to an area in which software engineering is often applied. There are standard predefined application domains and students are free to suggest a customized domain. Example application domain areas include artificial intelligence, bioinformatics, business applications, computational mathematics, computer engineering, computing security, economics, entrepreneurship, industrial and systems engineering, interactive entertainment, public policy, scientific and engineering computing, statistics, or usability.

Senior design project

A two-course senior design project helps students synthesize and apply the knowledge and experience they have gained in classes and on co-op assignments to an industry-sponsored project. Organizations with challenging technical problems frequently contact faculty seeking assistance in defining a solution. Many of these issues find their resolution via the work of the Software Engineering senior project teams.

In the first course, students organize themselves into teams, based on the number and complexity of the projects available. The bulk of the semester is devoted to requirements elicitation and architectural design, but also may include detailed design, prototyping, and even production, depending on the nature of the project. In addition, teams are responsible for assigning specific roles to team members and developing a project plan that includes scheduled concrete milestones. In the second course, students work on the tactical issues of development and deployment. Teams complete the construction and integration of their project, conduct testing, and demonstrate the final outcome to faculty and the sponsoring organization

Other Industries

Typical Job Titles

Software Engineer Software Developer
Software Quality Assurance Engineer Web Applications Developer
Data Analyst Software Tester
Database Developer Software Design Engineer
Software Requirements Engineer Web Developer

Career Opportunities

Graduates of the Software Engineering Program are equipped with the skills demanded by the sector. Designing, implementing, testing, deploying and maintaining large scale complex software systems necessitates knowledge and skills of a software engineer. Given that the world today depends so much on large scale complex software systems, it is not a surprise that qualified software engineers are in big demand, and well compensated financially. Employers of software engineers include banks, large International companies with information technology departments, the public sector and universities. Graduates of the program can also pursue graduate studies in a software related area