CIS 322    

    Intro to Software Engineering    

Course Description

Welcome! CIS 322 is an introduction to software engineering, the subfield of computer science concerned with the fact that software is constructed by people. People have limited ability to remember details, work at a limited pace, and make mistakes, so they must find ways to construct software systems piece by piece, collaborating with others, testing as they go. We will approach these fundamental problems through concrete application in a series of weekly mini-projects leading up to one substantial software system. In this sophomore/junior level course (which should be taken after CIS 212 but before most 400-level courses) you will build a web-based software system and become familiar with a variety of issues that arise as we move beyond building individual programs into building more complex systems that exist in a larger software ecosystem.

Instructor

Prof. Ram Durairajan, ram AT cs DOT uoregon DOT edu (remote office hours: Mondays from 2pm to 3pm, and by appointment. See Canvas for Zoom URL.)

GE-T: Nate Balmain, balmain AT uoregon DOT edu (remote office hours: Wednesdays from 2pm to 3pm, and by appointment. See Canvas for details.)

Lectures

Two lectures are delivered "in person" each week: Tuesday and Thursday, 2:00pm to 3:20pm. Location: 140 TYKE. Labs are on Fridays from 2:00pm to 2:50pm (106 FR) and 3:00pm to 3:50pm (303 GER).

Prerequisites

The pre-requisitive for CIS 322 is CIS 212 or equivalent. You may take CIS 322 concurrently with CIS 314 or CIS 313. It is preferable to take CIS 322 before CIS 330 and CIS 415, although it is not a pre-requisite. Students at the 400 level may take CIS 322, but you should be aware that the course is designed primarily for students at the 300 level.

Textbooks and Readings

There is no required text for CIS 322, but you will be expected to find and read a variety of technical documents required for your project. The following text is recommended, particularly for students who are unfamiliar with Linux or other Unix systems (including the Unix subsystem of Mac OS and the Ubuntu subsystem of Windows 10).

This is the textbook used in the Spring 2020 section of CIS 212. The book is constantly being updated from term to term, so you should download this version for your use even if you have an older version from when you took CIS 212. A laptop computer will be useful for this class, though not required. If you have one, I suggest bringing it to class to use *only* for programming exercises and demonstrations. Usage of mobile phones in class is *not* allowed.

A printable version of lecture slides will generally be available online (in Canvas) 24 hours after each lecture. Often the slides will not include all the information we discuss in class, so the printed slides are not a substitute for attending and participating.

Every week or so, there will be a quiz with 4-5 questions (based on lectures from the previous week). The total time per quiz is 5 minutes. I will allocate a window of time (which, typically, will be 10-20 hours) within which you have to take the quiz. You can take the quiz anytime in that window but once you start, you cannot pause/stop the quiz; your answers will be submitted after 5 minutes. As long as you follow the lectures and are on top of the concepts covered in class, it should be easy.

Major Topics

Week Description
1 (Mar 31) Introduction, Git and Linux basics, and Web Architecture
2 (Apr 07) Reviews, Dependence, Introduction to Docker
3 (Apr 14) Introduction to Flask, Packaging Software, and Shipping
4 (Apr 21) Testing
5 (Apr 28) Introduction to Databases, NoSQL, and MongoDB
6 (May 05) User Interface, and REST API
Midterm exam; 05/07/2024 at 2:05pm (till 3:05pm)
7 (May 12) Session Management
8 (May 19) Introduction to Security
9 (May 26) Authentication, Forms, and Login
10 (Jun 02) Software Integration, and Wrap up
11 (Jun 09) Final exam; 06/13/2024 at 12:30pm (till 1:30pm)

Projects are more challenging than the ones in other courses.

Due date Project Description
04/12 Project 0 Familiarize with Git and install docker
04/19 Project 1 Simple page server
04/26 Project 2 Docker + Flask
05/10 Project 3 Docker + Flask + Javascript
05/17 Project 4 Docker + Flask + Javascript + AJAX
05/24 Project 5 Docker + Flask + Javascript + AJAX + MongoDB
05/31 Project 6 Docker + Flask + Javascript + AJAX + MongoDB + REST

Expected Learning Outcomes

The primary learning objective of this course is to enhance student's understanding of basic concepts and practices of software engineering, familiarity with the tools and techniques, followed by an in-depth understanding of various design and implementation aspects.

Upon successful completion of the course, students will be able to:

Acquired Skills

Upon successful completion of the course, students will have acquired the following skills:

Course Requirements and Grading

Lectures will be taught in person and labs will be remote/virtual.

Grading will be based on the following criteria:

Percentage Component
50Projects
20Midterm
20Final
10Quizzes

Grading Scale

  A    A+ 96.67-100.00   A 93.34-96.66   A- 90.00-93.33 
  B    B+ 86.67-89.99   B 83.34-86.66   B- 80.00-83.33 
  C    C+ 76.67-79.99   C 73.34-76.66   C- 70.00-73.33 
  D    D+ 66.67-69.99   D 63.34-66.66   D- 60.00-63.33 
  F    F 0.00-59.99     

Barriers and Accommodations

My goal is a fully inclusive class, accessible to everyone. If you encounter or anticipate barriers to full participation and fair evaluation due to a disability, please communicate your needs to the instructor so that we can find a suitable accommodation. If you encounter or observe other impediments to full participation, for yourself or others, please share your concerns with the instructor.

It is particularly important that you inform the instructor in the first week of the quarter if you require accommodation. Delayed notification of such a requirement may make it impossible to provide the accommodation.

Academic Honesty