|
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:
- learn how a particular class of distributed system works (a web application, with a server side and a client side), and more generally how we construct overall systems that extend beyond a single program, machine, or operating system;
- build software that is divided into components written in different programming languages, with shared data in three forms: the internal form on the server, the internal form in the client, and the “on the wire” form to communicate between them; and
- write documentation of your own code and design adequate for other programmers to use, maintain, and extend your software.
Acquired Skills
Upon successful completion of the course, students will have acquired the
following skills:
- be able to use a persistent database store for some of the data;
- be able to create Application Program Interface (API) services to learn how to interface with them, and you will make small experiments to explore those APIs and test your understanding;
- be able to learn to manage versions and deployment of your evolving system using a distributed version control system, and you will develop automated tests to prevent bugs from festering too long; and
- be able to expand your repertoire of programming approaches with some functional and reactive idioms.
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 |
50 | Projects |
20 | Midterm |
20 | Final |
10 | Quizzes |
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
-
All projects turned in for the course must be your own work. Copying from other class members or other sources is not acceptable. If you collaborate with someone else on any assignment, you must indicate such on the work you turn in. Collaboration that is not explicitly credited is plagiarism.
- Academic honesty is expected and cases of suspected dishonesty will be handled according to university policy. In particular, copying someone else's work (including material found on the web) will not be tolerated. If solutions to assignments are obtained from outside sources, the source must be cited.
- You are also responsible for protecting your work. That is, you must take reasonable precautions to prevent your work from being copied. This means that if you store your assignment solutions on a shared server, the file permissions must be set to keep others from accessing your files. If you are working on assignments in the lab, you must remove any of your files on the lab machine before you leave.
-
Turning in someone else's code is collusion, and is a particularly
heinous form of plagiarism; if collusion is detected, all individuals involved
(i.e., the copyee and all copyers) will be given a grade of F in the course.