Course Descriptions

Created by faculty from the Computer Science and Engineering Department and by industry experts, the MSSE curriculum delivers a powerful blend of software engineering theory and practice. Expect program content that is consistently cutting-edge, rigorous, and relevant. Topics include requirements engineering, project management, quality assurance, and database management systems.

The curriculum is fixed for the first three semesters. The fourth semester offers electives, including an optional independent project. A total of 30 semester credits and satisfactory performance on either an independent project or at least 3 class projects is required for graduation. Following is a brief semester-by-semester outline of the curriculum:

Semester 1:

  • SENG 5707: Data Modeling

    Hands-on course in database systems, including modeling and querying. Fundamental concepts, data models, data manipulation languages, extending data types, database design, and security and integrity policy. Application techniques for the use of database systems. Concepts practiced in design and development of database applications. (3 credits)

  • SENG 5801: Software Engineering I: Overview, Requirements, and Modeling

    Broad introduction of software engineering as a discipline and a preview of topics to be covered in subsequent courses in the Master of Science in Software Engineering Program; in depth study of Requirements Engineering; and an overview of various modeling techniques applicable to requirements and specification, including UML and formal modeling. (3 credits)

  • SENG 5899: Industrial Seminar Series

    Four half-day tutorials on a variety of topics. (1 credit) Here are a few samples of past seminar topics. Seminars are generally scheduled on Saturdays, and are open to the public.

    Professional ethics for software engineers
    Software re-engineering and maintenance
    ISO and SEI CMM process evaluation
    Legal and intellectual property issues
    Configuration management
    Internet commerce
    System management & computer security
    Safety-critical systems engineering
    Software engineering in a start-up environment

Semester 2:

  • SEng 5852: Quality Assurance and Process Improvement

    Theory and application of the capability maturity model: process assessment, modeling, and improvement techniques. Life cycle issues related to development and maintenance, quality, safety, and security assurance, project management, and automated support environments. Students participate in group projects and case studies. (3 credits)

  • SENG 5802: Software Engineering II: Software Design

    Develop fluency in object-oriented design. We study semantics of object-oriented languages, strengths and limitations of the object-oriented approach, processes that can lead to good design outcomes, graphical and textual representations for design including UML, common problems and some of the patterns that can solve them, and refactoring. Students develop an ability to read and critique designs, and to clearly present and advocate design ideas. Students work in teams to complete a multi-phase design project.(3 credits)

  • SENG 5811: Software Testing and Verification

    Theoretical and practical aspects of testing software. Students participate in the entire range of test activities, from analyzing a requirements document for test conditions through executing test cases and writing a test report. In addition there will much discussion on the types of testing that should be done, who should do it, and why it should be done at all. At course completion, the student should confidently be able to organize and carry out the software testing phase for any small or medium-size software project. (2 credits)

Semester 3:

  • SENG 5861: Introduction to Software Architecture

    Software architecture is primarily concerned with partitioning large systems into smaller ones that can be created separately, that individually have business value, and that can be straightforwardly integrated with one another and with existing systems. The goal of this course is to master skills that support this partitioning. At the end of the course, a proficient student should be able to:
    • Work from stakeholder requirements to create system interfaces that support partitioning.
    • Use different viewpoints to organize partitioning to support deployment, maintenance and functional extension.
    • Document system commonalities and variabilities and utilize this document to create interfaces that support expected system evolution
    • Apply architectural patterns to quickly generate architectural alternatives and choose between them.

    We will discuss the purpose and role of architecture in the overall process of software development, both as a process (the process of architecting a system) and an artifact (the architecture of a system). We will also examine and debate the similarities and differences between "design" and "architecture". We will examine notations and tools designed to assist software architects and processes that can lead to good architectural outcomes, and architectural refactoring. Throughout the course, we will read and critique architectures, and be able to clearly present and advocate architectural ideas

  • SENG 5851: Software Project Management

    Team building and motivation, team organization. Issues faced in the management of large software development projects: cost estimation, scheduling, planning, execution, monitoring, evaluation, and refinement. Students participate in group projects and case studies. (3 credits)

  • SENG 5899: Industrial Seminar Series

    Four half-day tutorials on a variety of topics. (1 credit) Here are a few samples of past seminar topics. Seminars are generally scheduled on Saturdays, and are open to the public.

    Professional ethics for software engineers
    Software re-engineering and maintenance
    ISO and SEI CMM process evaluation
    Legal and intellectual property issues
    Configuration management
    Internet commerce
    System management & computer security
    Safety-critical systems engineering
    Software engineering in a start-up environment

Semester 4:

  • SENG 5115: Graphical User Interface Design and Evaluation

    Design and evaluation of interactive application interfaces, user- and task-centered approaches to design, guidelines for graphical design, a variety of interface evaluation techniques, and an overview of current interface trends including web interfaces and information visualization. Students work in groups on a course-long project that includes designing, prototyping, and evaluating an application interface. (3 credits)

  • SENG 5199-9: Agile Software Development

    Kelly Weyrauch: kelly [dot] weyrauch [at] medtronic [dot] com

    This class provides a detailed understanding of Agile Software Development, a highly-iterative, customer-focused, team-based, test-driven method for developing software. Beginning with the Agile Manifesto (www.agilemanifesto.org), we will explore the principles and fundamental concepts that drive Agile. Borrowing from many of the Agile variations (Scrum, Extreme Programming, etc.) we will explore the tangible practices that make Agile work. Since Agile's nature is to be dynamic and adaptable to the context at hand, much of the detailed learning will come from class discussions about how the principles and practices have been or could be applied in our own organizations.

    Topics to cover include:

    Product Definition using Backlogs and Stories
    Estimation, Planning, and Tracking mechanisms
    Incremental / Evolutionary Lifecycle
    Team Structure and Roles
    Test Driven Development
    Culture Change
    Other topics relevant to the class's own current experiences

    Grading will be based on class participation in discussion topics and written papers and/or presentations on topics of relevance to the student's experience or interests.

    About the professor

    Kelly Weyrauch is a Senior Principal Software Engineer in the Cardiac Rhythm Disease Management organization of Medtronic, Inc. With more than 20 years of software development experience and 10 years of focus on software process, he now has responsibility for various elements of the software and system development processes. As a leader of the Agile movement at Medtronic, he works with project teams to evolve Agile Principles and Practices in the context of a robust Quality System. He has a BS degree in Mechanical Engineering from the University of Minnesota, and a MS degree in Software Design and Development from the University of St. Thomas (Minnesota).

  • SENG 5199-10: Web Application Development

    Mike Calvo: mike [at] citronellasoftware [dot] com
    Mike Hugo: mike [at] piragua [dot] com

    This is a hands-on, project-oriented course where students will learn about numerous aspects of developing modern web-based applications by actually developing systems during the course of the semester. The course will cover topics such as object-relational mapping, transactions, model view controller architectures, web services, integration, sending email, security, deployment, and web presentation layer technologies. The course will demonstrate these topics using the programming language Groovy (a dynamic version of the Java programming language) and Grails (a rapid web application development framework based on Groovy). The course will also cover agile development practices such as unit testing. Students will be expected to submit multiple assignments which are functioning web applications that they develop with a teammate. In addition to functionally working web applications, the assignments are also required to contain passing unit tests with a specified amount of code coverage. In addition to Groovy and Grails, other web technologies will be covered such as HTML, CSS, JavaScript, and jQuery amongst others.

    Course Objectives:
    This course is an in-depth discussion of the challenges and complexities
    involved in designing and implementing modern business web
    applications. Students will gain experience designing and implementing a
    project during in the course of the semester. This process will give
    students experience with the following concepts:
    -Domain-driven design
    -Persistence techniques
    -Transactions
    -Component-based design
    -Service-oriented design
    -Model-View-Controller UI Frameworks
    -Web 2.0 concepts
    -System integration with HTTP, XML, Messaging, and Web
    -Services
    -Agile development frameworks
    -Unit testing, Integration testing, Automated acceptance testing

    We will discuss these topics both from theoretical and practical
    perspectives. Throughout the course we will also discuss agile
    development best practices and have an opportunity to implement many
    as we complete projects. Discussions will focus on best practices
    highlighted with relevant, industry accepted approaches. The vast
    majority of frameworks and tools featured will come from best-of-breed
    open source projects. We will look at these projects not only to
    understand how they can be successfully used, but also critically on how
    they fail to address the core challenges of modern business application
    development.

    Prerequisites:
    This course assumes existing knowledge of and experience with modern
    development practices such as integrated development environments
    (IDEs), debugging, source code compilation, and build tools (such as
    build scripts, make, Ant, etc). The course will be taught using Javarelated
    technologies, but does not require any prior experience with Java
    or Groovy. Students not already familiar with Java can expect to spend
    more time coming up to speed with tools and concepts.

    Reference Material Grails User Guide: http://grails.org/doc/2.0.x/guide
    Textbook Groovy in Action, Dierk Koenig

    Course Website:
    The course website will contain up-to-date material, including the topic
    outline and schedule, reading assignments, homework assignments,
    contact information, class notes, announcements, references, and links to
    supplemental reading material. Please check the site on at least a weekly
    basis for announcements, schedule changes, and new materials.

    Programming Assignments:
    The course is designed around 4 programming assignments which are to
    be completed throughout the semester. Topics will be covered in a
    sequence which aligns with the due dates of the programming
    assignments.

    The programming assignments will be completed in two person teams.
    Each assignment will be focused on a core set of application
    development concepts (such as data, UI, integration, etc). Each
    assignment will require successful implementation of core requirements
    with functioning code and in some cases usable application.
    Requirements must be confirmed via unit tests to receive full credit.
    Assignments will be due and must be submitted via email to Instructor
    before midnight on the due date. The each submitted assignment must be
    an archive (zip) file of project source code, unit test, and build script
    which can be built and run on the instructor's computer.

    Class Format:
    The class will be conducted in a lecture - discussion format. Lectures will
    serve to introduce, clarify, and extend the reading materials, but will not
    necessarily cover all the material in the assigned reading. Much of the inclass
    lecture time will be spent reviewing code examples and writing
    code related to the discussed topic. Students with access to a laptop
    computer will find it useful to bring their laptop to class and attempt
    reviewed techniques for themselves in class.

    Grading:
    The final grade will be determined based entirely on the programmng
    assignments. Each assignment will carry equal weight (25%).
    Students are required to submit all four programming assignments to pass
    the course.

    Assignments can be turned in late. For each week that an assignment is
    late, the total possible grade will be lowered by a full letter (for example
    an assignment turned in 1 week late can receive a maximum score of a
    "B"). Lateness is based on a full week basis. For example, any
    assignment turned in after the due date/time but before 7 days after the
    due date and time will be considered 1 week late.

    Programming assignments will be graded on their successful
    implementation of assignment requirements. A grade of "A" will be
    earned only if all requirements are implemented and verified (by unit
    tests for non UI) requirements. Simply having compiling code or
    working code will not suffice for full credit.

    The class is not graded on a curve.

    Collaboration and Cheating All assignments will be group assignments, with individual peer
    assessments. You may discuss the assignments in general terms among
    yourselves or on the class forum, but you must not share specific
    assignment deliverables outside the group that is to be credited with the
    work.

    Programming assignments require involvement and effort by both team
    members. Ideally, work will be divided as equally as possible.
    Incompletes Incompletes will only be given on request, and then only if you have
    substantially completed the class. For example, if you were seriously ill
    during the final exam period, you could request an incomplete.
    Incompletes must be made up before the middle of the following
    semester, and as a practical matter, the longer you wait to clear an
    incomplete, the less likely it is that you would succeed.
    Expected Workload You can expect to spend on average 4-6 hours/week outside of class on
    reading and assignments.

    You may find that weeks when projects are due may require spikes of
    increased time and effort.

  • SENG 5199-3: Data and Network Security: Theory and Practice

    Course Description

    Security is a enabler for nearly every service offered by a software system or a hardware device. Security mechanisms mitigate attacks that aim to disrupt normal service. In the last 30 years, we have seen significant improvement in research on cryptography and security. However, as witnessed in numerous security incidents, there still exist large gaps between theory and practice in building secure systems. Existing practical security solutions often do not meet theoretical security requirements and theoretical solutions are infeasible and/or unusable in practical systems. In this course, we try to 1) understand and 2) narrow the gap between the state-of-art cryptographic and security solutions and existing practical security solutions, and 3) understand the trade-offs that exist in building secure systems. The first half of the course will focus on learning what kind of security primitives exist, how to use them securely, and how to analyze security of your system. The second part of the course will focus on case studies of various systems that have been broken, trying to understand what went wrong, what could have been done to prevent such problems, and how to fix them. Topics include security issues of software and hardware systems such as implantable devices such as pacemaker, storage systems, botnet, voting machines, voice over IP, and cellular networks. Through a team project, students will gain practical experience in designing, analyzing, and implementing secure software systems.

    Texts and Readings

    Readings include a textbook available from the Internet, research papers, and several other materials available from the Internet.

    About the professor

    Prof. Yongdae Kim is an associate professor in the Computer Science and Engineering department at the University of Minnesota, Twin Cities. He received BS and MS from Yonsei University, Korea in 1991 and 1993, and his PhD from University of Southern California in 2002. He has been at the University of Minnesota since 2002. His main research areas have been in the area of data and communication security systems. He has received an NSF CAREER award on storage security in 2005, and a McKnight Land-Grant Professorship from University of Minnesota. His major research interests focus on security issues for distributed system such as P2P systems, storage systems, sensor network and ad hoc networks.

  • SENG 5199-aa: A Survey of Graphic Card Programming Techniques

    Gary Meyer: meyer [at] cs [dot] umn [dot] edu
    Information on Gary (http://www-users.cs.umn.edu/~meyer/)

    Course Description

    The purpose of this course is to expose you to a range of programming techniques that will allow you, as a software engineer, to take full advantage of the graphics processors that are available today on most desktop workstations, laptops, tablet computers and smart phones. Graphics processors produce and display the images that are shown on these devices, and their processing power and memory have increased dramatically over the last ten years. Applications that make heavy use of this computational capability include computer aided design, painting and drawing, image manipulation, scientific computation, and video games. Today even the user interface for the operating system makes use of the graphics processing capability that is available on every type of computer manufactured today.

    The goal of this course is to make you aware of the variety of different ways in which you can harness the power of a graphics card when you develop software for a computer. We will survey four different types of application programmer interfaces (API) that have been created to exploit the capabilities of contemporary graphics processors. This will not be a computer graphics class per se, but you will learn enough about graphics to understand what each function in the API is intended to accomplish. As software engineers you will have sufficient knowledge to be consumers of the software package but not developers of the next generation of this type of API. The following are the four categories of graphics card software that we will survey in this class:

    basic graphics
    - This is the traditional graphics API that allows you to generate and interact with pictures of two and three dimensional objects. By making calls to these types of routines one can model the shape and color appearance of an object, establish the position and characteristics of a camera, and create a perspective projection. Examples of this type of API include OpenGL 2.0 and Direct3D.
    graphics engine
    - This is a layer of software that sits above the basic graphics API described above and allows the programmer to quickly create applications that include the movement and interaction of complex three dimensional objects. This is the API that is commonly used in conjunction with a physics engine to create contemporary video games. Examples of this type of API include OGRE, G3D, Irrlicht Engine, Unity, Source, Unreal Engine, and id Tech.
    pixel shaders
    - This is a layer of software which sits below the basic graphics API and provides the capability to write a small inner loop program which executes very quickly on the graphics card every time a pixel is drawn. The original goal was to allow complex surface reflection effects, but shaders have been creatively used to accomplish a wide variety of new computer graphics effects. Examples of this type of API include GLSL, Cg, and HLSL.
    parallel programming
    - This is a non-graphics API which was developed to exploit the parallel processing capability of a graphics card. While not originally intended to provide this type of computing to the end user, graphics cards must operate in parallel to update all regions of the screen fast enough to provide continuous motion. Applications that require significant computer horsepower, such as scientific and engineering simulations, are being written using this API. Examples of this type of API include CUDA, OpenCL, and DirectCompute.

    As you study each type of graphics card API you will write a computer program that makes use of a representative public domain example of that type of API. There will also be a final project for the course in which you can delve deeper into the type of graphics card API that is of the most interest to you.

  • SENG 5199-bb: Mobile Application Development

    Bekki Freeman: bekki [at] tinymission [dot] com
    Andy Selvig: andy [at] tinymission [dot] com

    Course Description

    This elective will be based around a mobile development project and will require
    programming. Students will be asked to choose a mobile platform and work through an
    application throughout the semester. The mobile application project will completed
    individually or in teams of two. Students can select their own application (of appropriate
    scope) or work through a project proposed by the instructors.

    The progression of the students’ project will follow the lecture topics of the week,
    including programming time in class. Class time will be divided between 50% lecture
    and 50% programming time, where the instructors will be available to offer help and
    suggestions for the project.

    We will work through a typical iterative project lifecycle, with the primary focus being
    challenges with the mobile platforms. While we will focus on a few of the currently
    popular mobile platforms, the student can choose the platform of their preference to
    develop on. Please note that iOS development requires a Mac OSX computer.

    Some example topics for the project include:

    Mobile application planning
    User interface design for a smartphone screen
    Making user interfaces flexible for phone and tablet screens
    Memory usage
    Connecting to web services and online databases
    Using local databases within the application
    Testing a mobile application
    Iterative development in the mobile environment

Electives

Each year, second-year students vote for a set of elective offerings, and may register for 1 or 2 electives in the fourth semester. Examples of electives offered in recent years include:

  • SENG 5511: Artificial Intelligence and Software Agents

    Problems in search, logic, and game playing, first order predicate logic, inference, and knowledge representation. Definitions of "intelligent" or "autonomous" agents, agent classifications, agent architectures, and various application areas, such as electronic commerce and robotics. Includes a semester project, which may be done individually or in teams.

  • SENG 5708: Data Analytics

    Data Analytics is the collection of technologies that enable an enterprise to analyze its entire collection of data to extract knowledge that can help it in its day-today functions as well as strategic directions. Practically every function of the enterprise, including marketing, customer service, operations, security, purchase, etc., can benefit from it. This course provides a detailed introduction of the technologies that comprise data analytics, including data warehousing, data mining, and reporting, with a strong emphasis on applications.

  • SENG 5831: Software Development for Real-Time systems

    Real-time systems are systems in which a timely response by a computer to external stimuli is vital to the performance of the system's objective. We begin with basic computer architecture and hardware elements relevant to the study of real-time issues, including low-level input/output devices, interrupt controllers, and CPU cores. Next we study software design and specification methods such as flowcharts, state transition diagrams (finite state automata), and petri nets. Finally, we move on to real-time kernels, including task scheduling, interrupt latency, and communication and synchronization of tasks.

  • SENG 8891: Independent Project

    Students will work individually or in teams with an advisor on an advanced software or research project. (2 or 3 credits)

  • SENG 5131: Distributed Application Design and Development

    Coverage of common approaches to building applications using the internet and relational databases as well as integrating these applications with other systems. Students will work in teams to build a functional web application in a series of projects throughout the semester. Topics covered include transactions, object-relational mapping, model-view-controller architectures, web services, and asynchronous messaging.

  • SENG 5199-9: Agile Software Development

    Kelly Weyrauch: kelly [dot] weyrauch [at] medtronic [dot] com

    This class provides a detailed understanding of Agile Software Development, a highly-iterative, customer-focused, team-based, test-driven method for developing software. Beginning with the Agile Manifesto (www.agilemanifesto.org), we will explore the principles and fundamental concepts that drive Agile. Borrowing from many of the Agile variations (Scrum, Extreme Programming, etc.) we will explore the tangible practices that make Agile work. Since Agile's nature is to be dynamic and adaptable to the context at hand, much of the detailed learning will come from class discussions about how the principles and practices have been or could be applied in our own organizations.

    Topics to cover include:

    Product Definition using Backlogs and Stories
    Estimation, Planning, and Tracking mechanisms
    Incremental / Evolutionary Lifecycle
    Team Structure and Roles
    Test Driven Development
    Culture Change
    Other topics relevant to the class's own current experiences

    Grading will be based on class participation in discussion topics and written papers and/or presentations on topics of relevance to the student's experience or interests.

    About the professor

    Kelly Weyrauch is a Senior Principal Software Engineer in the Cardiac Rhythm Disease Management organization of Medtronic, Inc. With more than 20 years of software development experience and 10 years of focus on software process, he now has responsibility for various elements of the software and system development processes. As a leader of the Agile movement at Medtronic, he works with project teams to evolve Agile Principles and Practices in the context of a robust Quality System. He has a BS degree in Mechanical Engineering from the University of Minnesota, and a MS degree in Software Design and Development from the University of St. Thomas (Minnesota).

  • SENG 5199-5: Exploring Dynamic Languages

    This course will take a look at the most popular of the dynamic languages and discuss the impact they are having on the development community. We'll examine the strengths and weaknesses of each language and discuss where they might fit within an organization. Most of these languages are several years old yet only now are they enjoying any popularity - we'll talk about why.

  • SENG 5199-8: Business Analysis

    Business analysis expertise includes a combination of knowledge, skills and abilities related to both business and to technology in order to select and use the correct tools to communicate well with both business and technology personnel. Business analysts, software engineers working with business analysts, software engineers performing analysis, business architects, system architects, data architects, project managers, and technology and business leaders must all have an understanding of business analysis, its importance, and the criteria by which various methodologies are applied in the context of a particular project or environment. Mastery of business analysis methodologies and knowledge of the principles behind these methodologies is essential for those performing these functions and to the success of software engineering. All roles in the software engineering field should have a base understanding of business analysis, or as Forrester Research puts it, they will become obsolescent.

  • SENG 5199-2: Web Application Development

     

  • SENG 5199-1: Mobile Application Development

     

  • SENG 5199-3: Data and Network Security: Theory and Practice

    Course Description

    Security is a enabler for nearly every service offered by a software system or a hardware device. Security mechanisms mitigate attacks that aim to disrupt normal service. In the last 30 years, we have seen significant improvement in research on cryptography and security. However, as witnessed in numerous security incidents, there still exist large gaps between theory and practice in building secure systems. Existing practical security solutions often do not meet theoretical security requirements and theoretical solutions are infeasible and/or unusable in practical systems. In this course, we try to 1) understand and 2) narrow the gap between the state-of-art cryptographic and security solutions and existing practical security solutions, and 3) understand the trade-offs that exist in building secure systems. The first half of the course will focus on learning what kind of security primitives exist, how to use them securely, and how to analyze security of your system. The second part of the course will focus on case studies of various systems that have been broken, trying to understand what went wrong, what could have been done to prevent such problems, and how to fix them. Topics include security issues of software and hardware systems such as implantable devices such as pacemaker, storage systems, botnet, voting machines, voice over IP, and cellular networks. Through a team project, students will gain practical experience in designing, analyzing, and implementing secure software systems.

    Texts and Readings

    Readings include a textbook available from the Internet, research papers, and several other materials available from the Internet.

    About the professor

    Prof. Yongdae Kim is an associate professor in the Computer Science and Engineering department at the University of Minnesota, Twin Cities. He received BS and MS from Yonsei University, Korea in 1991 and 1993, and his PhD from University of Southern California in 2002. He has been at the University of Minnesota since 2002. His main research areas have been in the area of data and communication security systems. He has received an NSF CAREER award on storage security in 2005, and a McKnight Land-Grant Professorship from University of Minnesota. His major research interests focus on security issues for distributed system such as P2P systems, storage systems, sensor network and ad hoc networks.

  • SENG 5199-aa: A Survey of Graphic Card Programming Techniques

    Gary Meyer: meyer [at] cs [dot] umn [dot] edu
    Information on Gary (http://www-users.cs.umn.edu/~meyer/)

    Course Description

    The purpose of this course is to expose you to a range of programming techniques that will allow you, as a software engineer, to take full advantage of the graphics processors that are available today on most desktop workstations, laptops, tablet computers and smart phones. Graphics processors produce and display the images that are shown on these devices, and their processing power and memory have increased dramatically over the last ten years. Applications that make heavy use of this computational capability include computer aided design, painting and drawing, image manipulation, scientific computation, and video games. Today even the user interface for the operating system makes use of the graphics processing capability that is available on every type of computer manufactured today.

    The goal of this course is to make you aware of the variety of different ways in which you can harness the power of a graphics card when you develop software for a computer. We will survey four different types of application programmer interfaces (API) that have been created to exploit the capabilities of contemporary graphics processors. This will not be a computer graphics class per se, but you will learn enough about graphics to understand what each function in the API is intended to accomplish. As software engineers you will have sufficient knowledge to be consumers of the software package but not developers of the next generation of this type of API. The following are the four categories of graphics card software that we will survey in this class:

    basic graphics
    - This is the traditional graphics API that allows you to generate and interact with pictures of two and three dimensional objects. By making calls to these types of routines one can model the shape and color appearance of an object, establish the position and characteristics of a camera, and create a perspective projection. Examples of this type of API include OpenGL 2.0 and Direct3D.
    graphics engine
    - This is a layer of software that sits above the basic graphics API described above and allows the programmer to quickly create applications that include the movement and interaction of complex three dimensional objects. This is the API that is commonly used in conjunction with a physics engine to create contemporary video games. Examples of this type of API include OGRE, G3D, Irrlicht Engine, Unity, Source, Unreal Engine, and id Tech.
    pixel shaders
    - This is a layer of software which sits below the basic graphics API and provides the capability to write a small inner loop program which executes very quickly on the graphics card every time a pixel is drawn. The original goal was to allow complex surface reflection effects, but shaders have been creatively used to accomplish a wide variety of new computer graphics effects. Examples of this type of API include GLSL, Cg, and HLSL.
    parallel programming
    - This is a non-graphics API which was developed to exploit the parallel processing capability of a graphics card. While not originally intended to provide this type of computing to the end user, graphics cards must operate in parallel to update all regions of the screen fast enough to provide continuous motion. Applications that require significant computer horsepower, such as scientific and engineering simulations, are being written using this API. Examples of this type of API include CUDA, OpenCL, and DirectCompute.

    As you study each type of graphics card API you will write a computer program that makes use of a representative public domain example of that type of API. There will also be a final project for the course in which you can delve deeper into the type of graphics card API that is of the most interest to you.

  • SENG 5199-bb: Mobile Application Development

    Bekki Freeman: bekki [at] tinymission [dot] com
    Andy Selvig: andy [at] tinymission [dot] com

    Course Description

    This elective will be based around a mobile development project and will require
    programming. Students will be asked to choose a mobile platform and work through an
    application throughout the semester. The mobile application project will completed
    individually or in teams of two. Students can select their own application (of appropriate
    scope) or work through a project proposed by the instructors.

    The progression of the students’ project will follow the lecture topics of the week,
    including programming time in class. Class time will be divided between 50% lecture
    and 50% programming time, where the instructors will be available to offer help and
    suggestions for the project.

    We will work through a typical iterative project lifecycle, with the primary focus being
    challenges with the mobile platforms. While we will focus on a few of the currently
    popular mobile platforms, the student can choose the platform of their preference to
    develop on. Please note that iOS development requires a Mac OSX computer.

    Some example topics for the project include:

    Mobile application planning
    User interface design for a smartphone screen
    Making user interfaces flexible for phone and tablet screens
    Memory usage
    Connecting to web services and online databases
    Using local databases within the application
    Testing a mobile application
    Iterative development in the mobile environment

  • SENG 5199-4: Enterprise Application Development