Skip to content

swent-epfl/public

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

69 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EPFL CS-311: The Software Enterprise

Caution

This document can change from time to time, so please check it often. The last time it was updated was 24.09.2024.

Table of Contents

Course Description

Welcome to "The Software Enterprise: From Ideas to Products". The goal of this course is to teach you how to use software to turn ideas into solutions that work in the real world. The course has two phases:

  1. Fundamentals (weeks 1–3): The basics of software development that were not covered in previous courses, using both theory (lectures) and practice (bootcamp). The goal is to enable all students to start developing a software product that brings one or more ideas to life.

  2. Project (weeks 4–14): You develop, in teams, an Android app that brings your own idea to life. The course staff guides you in this journey from idea to product. The project has three milestones during the semester.

Staff

Instructor: Prof. George Candea

Head TA: Yonghao Zou
TAs: Sara Anejjar, Ugo Balducci, Jérémy Chaverot, Gaël Conde Losada, Florian Déjean, Albert Fares, Alexandre Goumaz, Lea Grieder, Jérémy Hugentobler, David Kalajdzic, Andrew Limond, Ludovic Mermod, Alexandre Messmer, Edouard Michelin, Lorenzo Padrini, Yuchen Qian, Cléo Renaud, David Schroeter, John Taylor

The staff is reachable at [email protected] for all private issues. For questions whose answers could benefit other students, use the Ed forum (accessed via Moodle).

Schedule

Lectures

  • Monday 10:15—12:00 in the CM1 auditorium on 9.09 and 23.09 (16.09 is a holiday)
  • Friday 9:15—11:00 in the CE2 auditorium on 13.09, 20.09, and 27.09

Recitations

  • For 1h immediately after each lecture. During recitations, the course staff answer your questions about the lecture materials and assist you with the bootcamp. Most of your work on the bootcamp is to be done independently, outside the recitations.

Coaching

Each student team will be assigned 1-2 coaches, who will guide and support the team throughout the semester, providing expertise and feedback to help students achieve their project goals.

The team meets with their coach(es) once a week on Friday, for 1h in the 9:15–13:00 interval (TBD together with the coaches), in one of the following rooms (TBA): INF 019, ELG 116, ELE 111, ELG 120, BC 04, DIA 005, MED 2 2423, or MA A1 10

Week-by-week Schedule

Week Topics Deliverable
Wk1 Requirements and User Stories [slides | videos]
The Mobile Platform [slides | videos]
Milestone B1 +
Team composition
Wk2 Testing Fundamentals: Concepts, Metrics, TDD, BDD [slides | videos]
Advanced Testing: Mocks, Dependency Injection, UI Testing [slides | videos]
Milestone B2 +
App description
Wk3 Agile development processes, collaboration workflows, CI/CD
[slides | videos | Scrum podcast (AI-generated)]
Milestone B3
Wk4-Wk5 Project
Wk6 Project Milestone M1 +
Feedback survey #1
Wk7-Wk8 Project
Wk9 Project Milestone M2
Wk10-Wk13 Project
Wk14 Project Milestone M3 +
Feedback survey #2

All project deliverables are due at the end of that week's sprint, before the start of the Sprint ceremonies: M1 on 18-Oct, M2 on 15-Nov, and M3 on 20-Dec. The bootcamp deliverables (B1, B2, B3) are due at 23:59 on the Monday following the week shown above.

We use the two surveys to collect systematic student feedback that is statistically significant. We use it as input to improving the course. The surveys are not graded, but are a required part of the deliverable, so a submission is incomplete until the survey has been filled in. Budget 15 minutes per survey.

Important

CS-300 (Modèles stochastiques) students: Beware that the CS-300 midterm is in the afternoon on Friday 15.11, a few hours after the deadline for the SwEnt milestone M2. We tried to negotiate a different date, but were unable to find a solution. Please plan accordingly ahead of time.

Bootcamp

In order to do the bootcamp, you must have submitted to us your GitHub ID, as explained here. Unless you complete this step, you will not be able to start your bootcamp. After we receive your GitHub ID, we will set up a private repo for you (this might take up to a day). Once that is set up, you will be able to start your bootcamp by following the instructions at https://github.com/swent-epfl/bootcamp-f24-<your GitHubID>/README.md.

Battle of the Apps (BOTA)

This is a special event at the end of the semester, in which you can present and demo your app to an audience consisting of your class mates, the teaching staff, and other attendees from outside SwEnt. The top-three teams win substantial prizes. Participation is entirely optional, and it does not affect your course grade.

The BOTA will take place on Thursday, 19.12.2024 from 10:15—13:00 in STCC - Cloud C.

Attendance Policy

In-person attendance of the coaching meetings is mandatory, and is a crucial part of the learning process and of the evaluation. The first such meeting will take place in week 4, after the last bootcamp deliverable.

You have two joker passes: The big joker pass allows you to entirely miss one coaching meeting during the semester penalty-free, no questions asked. The little joker pass allows you to attend one such meeting over videoconference instead of in-person, penalty-free and no questions asked. Once you've used your joker passes, no further absences are accepted, except as outlined in the corresponding FAQ.

Attendance of lectures and bootcamp sessions (recitations) is not mandatory, but nevertheless is essential to learning the material. We find that students who do not attend lectures and exercises in-person routinely end up spending much more time on the bootcamp and the project than students who do attend diligently, and in the end perform less well in SwEnt.

Prerequisites

SwEnt has several strict prerequisites that we build upon; we move fast and do not have time to recap material from this prerequisite courses:

  • CS-202 Computer systems (BA4)
  • CS-214 Software construction (BA3)
  • CS-173 Fundamentals of Digital Systems (BA2)

For example, we assume you already master the following material from CS-214:

App Requirements

Note

You are responsible for forming 7-student teams and then submitting your team's composition with deliverable B1. As a team, you decide on the problem you want to solve and the description of the app, both of which you must submit with deliverable B2. If you wish, check out these app examples for inspiration.

All apps must meet the basic requirements of functionality and resilience: apps must accomplish compelling tasks for clear use cases, in a way that is easy to use and consistent with the Android experience; and apps must work in the face of user errors, malice, and external issues such as a lack of Internet connectivity, with a test suite to demonstrate this.

To ensure that students encounter real-world challenges, and to provide fair grading conditions across teams, all apps must also meet the following requirements:

  • Split app model: the app must use a public cloud service, such as Google Firebase
  • User support: the app must have a concept of authentication, for instance using Android’s built-in Google authentication
  • Sensor use: the app must use at least one phone sensor, such as GPS, camera, or microphone, as part of a core feature of the app
  • Offline mode: the app must be usable without Internet connectivity, by paring down features compared to the normal experience

Teams are not allowed to write their own backend unless they have a good reason approved in writing by the instructor. This is to ensure (a) the app will still work in the future without someone to set up and maintain a backend, and (b) the project scope is restricted enough to be feasible within the course. Security, privacy, and vendor lock-in are valid concerns but outside the scope of this course.

Sensor usage should drive some behavior in the app, such as finding nearby points of interest with the GPS, or augmenting reality by drawing over a video feed. Merely getting sensor data and storing it in a field shown to users is too simple and not enough.

Note

By default, the apps should be developed using the Android SDK and Kotlin. If you wish to use a different framework/language, we might be able to make an exception if the case is well argued and the entire team wants this. Please get in touch with the staff.

Grading

The bootcamp spans the first 3 weeks and has weekly deliverables (B1, B2, B3)—these are all entirely individual work. Each deliverable is equally weighted in computing the Bootcamp grade = ⅓ B1 + ⅓ B2 + ⅓ B3. See your bootcamp documentation for more details.

The project spans the remaining 11 weeks and has 3 milestones (M1, M2, M3) with concrete deliverables. For each milestone, students receive separate grades for individual and team performance. The overall individual Projectindiv grade and team Projectteam grade are computed as 20% M1 + 30% M2 + 50% M3.

Normally, the overall course grade = 45% Projectindiv + 50% Projectteam + 5% Bootcamp. In other words, half the course grade is based on your team's performance and half on your individual performance.

However, if Projectindiv < 4, then the course grade = 90% Projectindiv + 10% Bootcamp.

Late submissions will be penalized 2% per hour of lateness (e.g., a 1-day late submission will carry a ~50% penalty). Early submissions are encouraged but cannot receive bonus points, as per EPFL policy.

Workload

This is an 8-credit course; the EPFL guidelines indicate that you should expect to spend a total of 8x30=240 hours of work over the course of the semester. For a 14-week semester, this averages to a little over 17 hours/week. You will likely experience variations in the weekly rhythm, especially around deadlines.

The average 17 hours/week workload might appear inconsistent with the course description, which shows 2h lecture + 10h project + 1h exercises per week (thus a total of 13h per week). This is because total student workload includes both timetabled time and non-timetabled work (see EPFL guidelines). The average student in SwEnt will need to spend the full 17 hours/week to pass the course—13 hours/week is not enough.

Collaboration Policy

Members of a team are of course allowed to discuss the project and share code for it. Members of different teams can discuss their project and programming issues, but not share code without prior written permission of the course instructor (not the coaches!). Bootcamp code, however, shall not be shared with anyone else.

Collaboration can also take place on the class forum, visible to the entire class. You can ask questions about the course, programming difficulties, tooling issues, and so on. You are also welcome to answer questions from your fellow students as well, since you will most likely have solved similar problems in your team’s project.

You are allowed to use AI assistants and other sources (Stack Overflow, public GitHub repos with free licenses, etc.), as long as you understand what you are doing and you acknowledge them as contributors to your codebase. Understanding what you're doing means that you can answer detailed questions about the code you turn in: why did you make that particular design decision, why did you use that particular library, etc. In a comment at the top of your source file you must acknowledge the sources of inspiration that contributed to the code. Use of any outside sources without fulfilling the above conditions is considered plagiarism.

Cheating, plagiarism, and any form of dishonesty will be handled with the maximum severity permitted under EPFL rules. If you are in doubt whether an action on your part is acceptable, please ask the course staff privately via the staff e-mail list before proceeding. Asking afterward is too late.

Hardware Requirements

Students will develop, test, and execute the bootcamp and project on their own laptops. We strongly recommend a minimum of 16GB of RAM (to run Android Studio), 50GB of available storage (Android Studio, Android SDK, emulator system images, course project files, etc.) on SSD or better, and WiFi. You can probably manage with a lesser configuration, but it can be slow.

We provide Windows and Linux virtual machines in the EPFL VDI infrastructure in case your laptop breaks down or you do not have the recommended configuration. See this tutorial for how to get started.

Ideally, each team should have at least one Android phone capable of demo-ing the team's application.

Further Questions

For answers to a list of frequently asked questions, please see the SwEnt FAQ. If your question is not addressed there either, please email [email protected].