COMPSCI W169A Software Engineering
Table of Contents
- Course Description
- Course Objectives
- Instructor Information & Communication
- Course Materials and Technical Requirements
- Learning Activities
- Course Policies
- Course Evaluation
- Course Summary
This course presents ideas and techniques for designing, developing, and modifying large software systems using Agile techniques and tools. Topics include: function-oriented and object-oriented modular design techniques, designing for re-use and maintainability including proper use of design patterns, behavior-driven design, test-driven development, user stories for requirements elicitation & documentation, verification and validation, cost and quality metrics and estimation, project team organization and management, analyzing and refactoring legacy code.
UC Berkeley CS61A & CS61B, or equivalent knowledge: maturity in at least one imperative object-oriented language (Python, Java, etc.), familiarity with both the theoretical underpinnings and implementation of basic data structures (lists, hashes, queues, etc.), understanding of the basics of functional programming and higher-order functions.
After successfully completing this course, you will be able to:
- Articulate the primary differences between Agile and Plan-and-Document methodologies
- Apply the key ideas of learning a new language in order to construct programs in Ruby
- Summarize the key architectural elements of RESTful SaaS applications and microservices
- Apply the key ideas of learning a new framework to construct and deploy simple Rails applications
- Apply behavior-driven development (BDD) to elicit customer needs and express them as user stories that will drive development
- Construct unit- and module-level tests and measure their coverage
- Apply BDD & TDD to identify the main parts of a legacy code base, measure code quality, and refactor code to improve its quality
- Exercise best practices in planning, effort estimation, and coordination of the efforts of small software teams, using appropriate tools to support those practices
- Recognize when an appropriate Design Pattern may improve code quality, and refactor code to apply those Design Patterns
- Identify and repair potential app-level security and performance problems
Instructor Information & Communication
The instructors will oversee all activities and grading, as well as being available to resolve any issues that may arise. Both the instructors and GSIs will interact with the whole class, and will serve as points of contact. The teaching staff will also be responsible for assisting you directly with your questions about assignments and course requirements, along with facilitating ongoing discussion and interaction with you on the major topics in each module.
Ed Discussion Forum
Ed will be used both as a discussion forum and for messages from the instructional staff. You are welcome to post your questions regarding any aspect of the course on this forum, as well. You can access the Ed forum within bCourses by clicking on the "Ed" link in the left-hand course navigation and choose to be alerted via email of new postings. We recommend private posts for questions to the course staff.
You can also contact your GSI and the course instructor via email. Make sure to check your Inbox for messages. In your bCourses account settings, you can arrange for your course mail to be forwarded to your email or cell phone. Contact information is listed on the "Office Hours" page.
Course Materials and Technical Requirements
- Armando Fox, David Patterson, and Samuel Joseph, Engineering Software as a Service: An Agile Approach Using Cloud Computing, 2nd ed. (version 2.0), 2020.
The textbook will be available in Codio (see below), via the links in bCourses. You can also download the PDF for free from www.saasbook.info.
This course uses the Codio IDE for the programming assignments.
- The first time you log into Codio, you will be prompted to pay a $30 fee.
- Make sure you access the programming assignments by signing into bCourses first, then following the link to Codio. If you instead try to sign into Codio directly, your assignment grades won’t be properly recorded and you won’t get credit.
For Codio technical support:
- If you are having trouble logging into Codio, you can either visit the Codio FAQ page and click the icon in the bottom right corner OR email email@example.com.
- Once you have logged into a Codio assignment, you can select Help from the top toolbar and click Support. See the following video for more details: Access In-Product Support.
This course is built on a Learning Management system (LMS) called Canvas and you will need to meet these computer specifications to participate within this online platform.
If you are having technical difficulties please alert one of the GSIs immediately. However, understand that neither the GSIs, nor the professor, can assist you with computer technical problems. You must call or email tech support and make sure you resolve any issues immediately. Be sure to document (save emails and transaction numbers) for all interactions with tech support. Extensions and late submissions will not be accepted due to “technical difficulties.”
For bCourses/Canvas technical support: click the Help button (in global navigation on the far left).
You won't be able to access your course material until you read the page, “How to Have a Bad Experience in This Course,” and take the subsequent Orientation Quiz to test your understanding. As part of the Orientation Quiz, you will be required to write, sign, and upload a pledge to academic integrity.
Recorded lectures support your readings and assignments but also contain additional material that may be included in the exams. Each lecture has been broken into sections. You are expected to take notes while viewing the lectures as you would in a regular classroom.
Each module includes assigned readings from the textbook relevant to each topic covered in that module. Each chapter covers one course module.
Being exceptionally helpful on course question boards and during online discussions, whether with fellow students or with instructional staff, will earn you discretionary points that may be used to decide final grades in borderline cases.
Participation can happen via Ed, attending lectures and weekly sections and office hours.
Each lecture video is followed by one or two self-check questions to sanity-check your understanding of the material. These “micro-quizzes” DO count towards your grade. To get credit, you have to get every question correct, but you have an unlimited number of attempts to do so. However, to earn full points you must complete them by the deadline.
Programming Assignments (24%)
A series of hands-on programming assignments—also known as CHIPS (coding/hands-on integrated projects)—will cement your knowledge of each module's topics. In addition, some assignments involve code reading/code comprehension and questions to check your understanding. There are ten CHIPS in total (not including CHIP 10.5). These assignments are to be completed independently, without collaboration.
Final Project (6%)
CHIP 10.5 Agile Iterations is a heavier programming assignment that will be treated as a final project for this class. This assignment is a group project, and project team formation will be facilitated around week 5 and 6 of the course, a week before the assignment is released.
Module Quizzes (30%)
Twelve short-to-medium-length quizzes (one per module), consisting primarily of short-answer and coding-related questions based largely on the practices and concepts in the programming assignments, will be administered during the course.
Module quizzes will be released in 6 pairs, roughly every two weeks. These quizzes take the place of midterms in the class. Quizzes will be administered from 5:10-6:30pm, though the exact time varies on the length of the quiz. Quizzes will be proctored via Zoom. We will drop the lowest of the 6 quizzes.
If you have a Letter of Accommodation at UC Berkeley, confirm with your GSI that it has been received and accommodations have been made. When you start a quiz or exam, check the timer when you open it to confirm you have the correct time accommodation. This applies to all quizzes and exams in the course.
Final Exam (30%)
The final exam will be administered during the final exam slot assigned by campus. More details will be shared later in the course.
If you miss taking the final or try to take it in a manner for which you have not received permission, you will fail this class automatically.
Your final course grade will be calculated as follows:
|Category||Percentage of Grade|
|Programming Assignments (CHIPS)||24%|
It is important to note that not all components are graded online and included in the online course grade book. Because of this, the online course grade book will not display your overall course grade at any given time or your final grade. It should simply be used to assess your performance on the components that are included within it. Your final letter grade will be mailed to you by the registrar's office or released on CalCentral approximately a week after the end of the course.
Should I take a letter grade or P/NP?
We expect a B+ centered curve, as is typical for upper division EECS.
While past behavior is not a guarantee of future results, historically 30-35% of students (in some cases up to 45%) have received some kind of A, and the number of students receiving lower than a C– has ranged from a minimum of 0 to a maximum of 2 in the last several years, with enrollments ranging from 120 to 240.
What is the minimum performance threshold for receiving a P?
Officially: 50% or more points across all CHIPS; 50% or more (including peer eval scores) on final project, which should be easy to achieve as long as your peers do not say that you were basically absent and not contributing; 30% or more, averaged across all quizzes + final.
While past grading statistics do not a guarantee future results, for the past four offerings, the number of NPs has ranged from 0 to 2, with enrollments ranging from 120-240. The NPs were people who basically did not show up, did not turn in most HWs, were dead weight to their final project team, and barely made any effort on exams. If you are higher than that threshold, you should not be seriously concerned about not passing.
What if I want to take CS169L?
Even for students who switch to P/NP, we will calculate a letter grade for you and then convert it to P/NP for reporting. That letter grade will be used to determine CS169L eligibility.
We will be implementing zoom proctoring for the quizzes and final exam in this class.
Programming assignments and quizzes all have specific final due dates and times. You will not receive full credit if assignments are submitted after the indicated due date.
Further, each online activity must be submitted through the course website by the due date. Students who wait until the final hours prior to a submission deadline risk having problems with their ISP, hardware, software, or various other site access difficulties. Therefore, it is advisable to submit assignments and tests through the course website early. Students should plan accordingly and get into the habit of checking the course website several times each week, and submitting and posting early.
You are given 8 slip days that can be used exclusively for the CHIPS programming assignments. You are only allowed to use up to 3 slip days for any single CHIP. A “slip day” equals an additional 24 hours to complete an assignment. Slip days can NOT be used for the quizzes, final exam, or self-checks.
Self-Check assignments earn 50% credit for up to the last day of the course.
Going over 8 slip days: Results in a 25% penalty on an assignment for each overage. Penalties are calculated per-assignment, and slip days will be applied to the highest value assignment first. Under this policy, it is always advantageous to turn in work even if it is late.
The student community at UC Berkeley has adopted the following Honor Code: "As a member of the UC Berkeley community, I act with honesty, integrity, and respect for others." The expectation is that you will adhere to this code.
Collaboration and Independence
Reviewing lecture and reading materials and studying for exams can be enjoyable and enriching things to do with fellow students. This is recommended. However, unless otherwise instructed, programming assignments, the online quizzes, and the final exam are to be completed independently and materials submitted as homework should be the result of one’s own independent work. For programming assignments, collaboration at the level of discussing general concepts and high level approaches. Sharing code directly is forbidden. Please exercise your best judgment. If you find yourself unsure whether a certain action is permissible, please refer to the Center for Student Conduct guidelines and don’t hesitate to email the teaching staff.
A good lifetime strategy is always to act in such a way that no one would ever imagine that you would even consider cheating. Anyone caught cheating on a quiz or exam in this course will receive a failing grade in the course and will also be reported to the University Center for Student Conduct. The expectation is that you will be honest in the taking of exams. To provide fair warning, we’d like to make it clear that we have strategies in place to detect those who try to circumvent the permitted ways to complete the course.
To copy text or ideas from another source without appropriate reference is plagiarism and will result in a failing grade for your assignment and usually further disciplinary action. For additional information on plagiarism and how to avoid it, explore the resources linked below:
Academic Integrity and Ethics
Complex software is a team effort, and collaboration is welcome on programming assignments and team projects. But you may never take credit for the work of others. If you wholesale copy-paste code without understanding it, you’re taking credit for others’ work. If you copy answers on a quiz or exam, you’re taking credit for others’ work. If you copy-paste code from StackOverflow without understanding it, you’re taking credit for others’ work. If you’re in doubt about whether a particular collaboration is OK, please ask the course staff directly.
If we discover that you’re not doing your own work, whether on a programming assignment, quiz, exam, or any other part of the course, you will fail the class, and if it’s not your first offense at the Student Conduct Office, the course instructors will personally argue for your suspension. We cannot say this strongly enough.
We all have lapses in judgment; if you do something you later decide is inappropriate, and you privately report it to the instructors (John Yang and Srujay Korlakunta) within 24 hours, we can talk together about how you should best take responsibility for your actions.
Please don’t cheat. It’s beneath your stature as a Cal engineer, and it can give the whole practice of software a bad reputation. Software can change the world, but when the people writing it are ethically weak, it will change the world for the worse. Let’s each agree to take seriously our responsibility as software engineers by always acting honorably and in good faith.
Students are also encouraged to pledge adherence to the ACM Code of Ethics and Professional Conduct (https://ethics.acm.org/).
Incomplete Course Grade
Students who have substantially completed the course, but for serious extenuating circumstances are unable to complete the final exam, may request an Incomplete grade. This request must be submitted in writing or by email to the teaching staff. You must provide verifiable documentation for the seriousness of the extenuating circumstances. According to the policy of the university, Incomplete grades must be made up within the first three weeks of the next semester.
Students with Disabilities
If you require course accommodations due to a physical, emotional, or learning disability, contact UC Berkeley’s Disabled Students' Program (DSP). Notify the instructors and GSI through course email of the accommodations you would like to use.
UC Berkeley is committed to providing robust educational experiences for all learners. With this goal in mind, we have activated the ALLY tool for this course. You will now be able to download content in a format that best fits your learning preference. PDF, HTML, EPUB, and MP3 are now available for most content items. For more information visit the alternative formats link or watch the video entitled, "Ally in bCourses."
The syllabus page shows a table-oriented view of the course schedule, and the basics of course grading. You can add any other comments, notes, or thoughts you have about the course structure, course policies or anything else.
To add some comments, click the "Edit" link at the top.