CSCI.2600 Principles of Software -- Spring 2021
Instructor: Carlos Varela
Office: Lally 308 (x 6912)
WebEx Personal Room: https://rensselaer.webex.com/meet/varelc
Office Hours: Mondays and Thursdays, 1:15-2:15pm; or by appointment
Meeting Place: WebEx Meetings
Meeting Hours: Mondays and Thursdays 2:30-4:20pm
Test Time: Thursday 6:55-8:45pm
Co-Instructor: Konstantin Kuzmin
Office: AE 112
TAs: Ankita Bhaumik, Lilian Ngweta, Vipula Rawte, Jiawen Zhang.
TAs' Office: WebEx Teams
TAs' Office Hours: Ankita Bhaumik: Wednesday 12:00-2:00pm, Tuesday 6:30-8:30 pm
Lilian Ngweta: Friday 12:00-4:00pm
Vipula Rawte: Wednesday 2:30-6:30pm
Jiawen Zhang: Tuesday 10:00-12:00pm, Wednesday 10:00-12:00pm
Mentors: Kongmin Cao, Dennis Chau, Rory Eiffe, Robin Hong, Richard Le, Zhangcheng Li, Zachary McDaniel, Ruben McWilliams, Joseph Napolitano, Emma Skantze.
Instructional Support Coordinator: Shianne Hulbert
Home page: http://www.cs.rpi.edu/academics/courses/spring21/csci2600/
Submitty Home Page: https://submitty.cs.rpi.edu/courses/s21/csci2600
Use Submitty to submit your assignments, check your grades, and post/answer course questions in the discussion forum.
To contact the instructors, TAs, and mentors about the course, please email:
psoftstaff AT cs DOT lists DOT rpi DOT edu.
Course Description
A study of important concepts in software design, implementation, and testing. Topics include specification, abstraction with classes, design principles and patterns, testing, refactoring, the software development process, and GUI and event-driven programming. The course also introduces implementation and testing tools, including IDEs, revision control systems, and other frameworks. The overarching goal of the course is for students to learn how to write correct and maintainable software.
Pre-requisites
CSCI 1200 Data Structures and CSCI 2200 Foundations of Computer Science.
Course Themes
Software Development Tools. Reasoning about Code. Inheritance and Polymorphism. Design Patterns. GUI and Event-Driven Programming.
Learning Outcomes
When the students have successfully completed this course, they
will be able to write correct and maintainable software in high-level languages. Concretely, students will be able to:
- apply fundamental principles such as reasoning about code, specification, abstraction, design patterns, testing, refactoring and software process, towards building software systems,
- demonstrate competence with modern software engineering tools such as the Eclipse IDE, the JUnit Framework, revision control, test coverage tools and others, and
- demonstrate competence with the Java programming language and the Java libraries.
Course Contents
- Introduction
- Reasoning about Code
- Hoare logic
- Loop invariants
- Dafny
- Specifications
- Abstract Data Types
- Testing
- Exceptions
- Identity, Equality
- Inheritance and Polymorphism
- Subtype Polymorphism
- Liskov Substitution Principle
- Inheritance
- Parametric Polymorphism
- Design Patterns
- Patterns
- Antipatterns, Refactoring
- Event-Driven, GUI Programming
- Software Process
- Usability
Tentative Course Syllabus
Date |
Topic |
Handouts |
Grade |
01/25 |
Introduction to Principles of Software: syllabus, schedule, tools, Java. |
syllabus
eclipse/git
ppt
pdf
|
|
01/28
|
C++ vs Java, Eclipse, Git, Submitty--Homework 0 Due 02/05 |
ppt
pdf
hw0
|
6.25%
|
02/01
|
Reasoning about Code |
DispatchTest.zip
DynamicBinding.zip
ExceptionTest.zip
JavaVariables.zip
StaticBindingDemo.zip
TestEquals.zip
|
|
02/04
|
Hoare Logic, Loops--Quiz 1 |
ParseNameDemo.zip
TypeConstraintDemo.zip
Reasoning.pdf
Reasoning.pptx
|
|
02/08
|
Loops and Loop Invariants--Homework 1 Due 02/19 |
hw1
|
6.25%
|
02/11 |
Loops and Loop Invariants
|
Loops.pdf
Loops.pptx
|
|
02/18 |
Dafny--Quiz 2 |
Dafny.pdf
Dafny.pptx
|
|
02/22 |
Specifications--Homework 2 Due 03/02
|
Specifications.pdf
Specifications.pptx
gcd_notes.pdf
hw2
|
6.25%
|
02/25 |
Specification Strength
|
UniquefyDemo.zip
|
|
03/01 |
Abstract Data Types (ADT). |
Specifications2.pdf
Specifications2.pptx
BinarySearch.dfy
BinarySearchJavaAlt.dfy
BinarySearchJava.dfy
|
|
03/04 |
Representation Invariants, Abstraction Functions--Homework 3 Due 03/16--Quiz 3 |
ADTs.pdf
ADTs.pptx
hw3
|
6.25%
|
03/08 |
Reasoning about ADTs. |
ADTsRepInvariants.pdf
ADTsRepInvariants.pptx
PointSet.zip
IntSet.zip
Representation exposure.pdf
|
|
03/11 |
Testing, Black Box Testing, White Box Testing--Exam 1 |
Exam1Review.pdf
Exam1Review.ppt
|
12.5%
|
03/15 |
Exceptions--Quiz 4 |
ADTReasoning.pdf
ADTReasoning.pptx
IntEq.zip
IOExcDemo.zip
|
|
03/18
|
Identity, Equality--Homework 4 Due 03/26 |
hw4
|
6.25%
|
03/22 |
Subtype Polymorphism, Liskov Substitution Principle (LSP) |
Testing.pdf
Testing.pptx
|
|
03/25 |
Subclassing in Java, Subtype Polymorphism
|
Identity_equality.pdf
Identity_equality.pptx
BrokenSet.zip
Duration.zip
|
|
03/29 |
Subclassing in Java, Subtype Polymorphism--Homework 5 Due 04/13--Quiz 5
|
SubtypePolymorphism.pdf
SubtypePolymorphism.pptx
hw5
marvel.csv
|
6.25%
|
04/01 |
Parametric Polymorphism--Exam 2.
|
Exam2Review.pdf
Exam2Review.ppt
|
12.5%
|
04/05
|
Design Patterns, Dependencies.
|
|
|
04/08
|
Design Patterns |
Covariant.zip
Contravariance.zip
OverloadVsOverride.zip
|
|
04/12
|
Design Patterns--Quiz 6 |
Generics.pdf
Generics.pptx
Super.zip
GenericMethodDemo.zip
GenericMax.zip
GenericEquals.zip
ListCopyTest.zip
ArraySubtypeTest.zip
WildCardContravariant.zip
WildCardCovariant.zip
WildCardTest2.zip
WildCardTest.zip
|
6.25% |
04/15
|
Antipatterns, Refactoring--Homework 6 Due 04/23 |
DesignPatterns.pdf
DesignPatterns.pptx
SingletonPatternDemo.zip
Bicycle3Demo.zip
Bicycle2Demo.zip
FactoryPattern.zip
PrototypeDemo.zip
Bicycle1Demo.zip
MazeGameDemo1.zip
Injection.zip
Bicycle4Demo.zip
PrototypeDemo2.zip
hw6
|
|
04/19
|
Refactoring
|
DesignPatterns2.pdf
DesignPatterns2.pptx
|
|
04/22
|
Event-Driven, GUI Programming--Quiz 7
|
|
6.25%
|
04/26
|
Software Process--Homework 7 Due 05/04
|
DesignPatterns3.pdf
DesignPatterns3.pptx
BooleanDemo.zip
ObserverDemo.zip
CharConverter.zip
StrategyDemo.zip
CommandDemo.zip
FlyweightDemo.zip
FunCharConverter.zip
SandwichDemo.zip
FlyWeightDemo3.zip
FlyWeightDemo2.zip
FacadeDemo.zip
ProxyDemo.zip
BoolDemo2.zip
AdapterDemo.zip
CommandDemo2.zip
CompositeDemo.zip
hw7
|
|
04/29
|
Usability--Quiz 8 |
Refactoring.pdf
Refactoring.pptx
FunBicycleFactory.zip
FunStrategyDemo.zip
FunTwitterDemo.zip
LambdaDemo.zip
ObjStrategyDemo.zip
|
|
05/03
|
Review |
FinalReview.pdf
FinalReview.ppt
|
|
05/06
|
Final Exam |
|
25% |
Reading Material
- Effective Java, Third Edition, by Joshua Bloch, Addison-Wesley, 2019.
- Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides, Addison-Wesley, 1995
- Refactoring: Improving the Design of Existing Code by Martin Fowler, Addison-Wesley, 2019
- A Philosophy of Software Design by John Ousterhout, Yaknyam Press, 2018
- Program Development in Java: Abstraction, Specification, and Object-Oriented Design by John Guttag, Barbara Liskov, Addison-Wesley, 2000
While none of the books is required, these are all highly
recommended books worth having in your bookshelf.
Java Resources
Grading
There are 8 homework assignments to be completed individually. Do
not show your code to any other student and do not look at any other
student's code. Do not put your code in a public directory or
otherwise make it public. You are encouraged to use the Submitty
Discussion Forum to post questions so that other students can also
answer/see the answers. Assignments are due at 11:59pm on the due
date. You have 7 late days for the entire semester without penalty
with a maximum of 2 late days per assignment.
Project requirements and instructions for submitting assignments
will be made available for each assignment. Projects requiring
programming must include the submission of well-commented source
code. All programming assignments must execute successfully on the
Linux operating system installed on the Submitty system. Documented
source code and separate files containing answers to questions will be
required for each assignment.
There are two partial exams and one final exam, to be completed
individually. All answers must be your own.
There are 8 in-class quizzes, which are to be completed
individually after a brief group discussion.
Homework Assignments | 50% |
Partial Exams | 25% |
Final Exam | 25% |
Final letter grades will be assigned as follows:
Letter |
Grade Range |
A |
[93-100] |
A- |
[90-93) |
B+ |
[87-90) |
B |
[83-87) |
B- |
[80-83) |
C+ |
[77-80) |
C |
[73-77) |
C- |
[70-73) |
D+ |
[67-70) |
D |
[60-67) |
F |
[0-60) |
Academic Integrity
Student-teacher relationships are built on trust. For example, students must trust that
teachers have made appropriate decisions about the structure and content of the courses
they teach, and teachers must trust that the assignments that students turn in are their
own. Acts that violate this trust undermine the educational process. The Rensselaer
Handbook of Student Rights and Responsibilities and The Graduate Student Supplement
define various forms of Academic Dishonesty and you should make yourself familiar
with these. In this class, all assignments that are turned in for a grade must represent the
student’s own work. In cases where help was received, or teamwork was allowed, a
notation on the assignment should indicate your collaboration.
Violations of academic integrity may also be reported to the appropriate Dean (Dean of
Students for undergraduate students or the Dean of Graduate Education for graduate
students, respectively).
If you have any question concerning this policy before submitting an assignment, please
ask for clarification. In addition, you can visit the following site for more information on our Academic Integrity Policy: Student Rights, Responsibilities, and Judicial Affairs..
Disability Services
Rensselaer Polytechnic Institute is committed to providing equal access to our
educational programs and services for students with disabilities. If you anticipate or
experience academic barriers due to a disability, please let me know immediately so that we can discuss your options. To establish reasonable accomodations, please register with THE Office of Disability Servicces for Students. After registration, make arrangements with the Director of Disability Services as soon as possible to discuss your accomodations so that they may be implmented in a timely fashion. DSS contact information: dss@rpi.edu; +1-518-276-8197; 4226 Academy Hall.
Disability Services for Students
Support Services
RPInfo - contains various links for students, academic resources, support services, and safety & emergency preparedness.
Rensselaer IT Services and Support Center
Last modified: Fri Jan 22 15:47:41 EST 2021