Skip to main content

Foundations of Software Engineering

 https://cmu-313.github.io/

 

Questions

  • When is a program good enough to ship? Have you built what the customer wanted?
  • Why (and how) does Netflix deliberately and randomly take down its own servers?
  • What can we learn from the Boeing 737 disaster?
  • How did Twitter eradicate the Fail Whale? And what does it have to do with Ruby?
  • How do you get a patch accepted into an open-source project?
  • You can write code. Can you build software?

Overview

Successful software projects require more than just technical expertise. Figuring out what the client wants, collaborating in a team, managing complexity, mitigating risks, staying on time and budget, and determining under various constraints when a product is good enough to be shipped are at least equally important topics that often have a significant human component. 17-313 explores these issues broadly covering the fundamentals of modern software engineering.

Quality and feature conflict Assuming reasonably solid programming skills (including unit testing and code-level design), we will explore the following topics:

  • Process consideration for software development
    (How do avoid problems early? When and how much to design? When and how much to test? When and how to involve the customers? Agile methods...)
  • Requirements elicitation, documentation, and evaluation
    (How to figure out what the customer really wants? Who else has an interest? How can we measure success objectively? How can we reliably document expectations? ...)
  • Design for quality attributes Architecture
    (How can we design a system to be able to scale to millions of users? How can we design security into a system? ...)
  • Strategies for quality assurance, including measurement, inspection, and static and dynamic analysis
    (What quality assurance strategy is best for a given system? What can we automate and when should we keep humans in the loop? How much testing and what kind of testing should we do? What qualities are important to assure beyond functional correctness? Can we evaluate usability, scalability, reliability, performance? How can we statically guarantee the absence of certain security issues? ...)
  • Empirical methods in software engineering xkcd 552
    (How can we measure quality attributes such as performance, security, and reliability? How can we measure how users interact with the system? How can we know whether the difference matters? ...)
  • Time and team management Network plan
    (How to estimate the duration and costs of a project? How to monitor progress and risks to recognize issues early? How to coordinate developers in a team? How to form and develop teams? How to select and motivate team members? How to deal with team dynamics such as social loafing? ...)
  • Economics of software development
    (business models, outsourcing, open source, ...)

This course has a strong technical focus, and includes assignments with and without programming. Assignments also include written components. Students will get experience with team management and modern software-engineering tools. The course puts students on a fast track toward project management positions.

Assignments (mostly done in groups) include:

    FreeCol screenshot
  • An introduction assignment where individual students will learn to engage with an existing code base.
  • A requirements assignment in which each team will interview stakeholders to elicit and document requirements for a software system.
  • An architecture assignment in which teams will train and deploy an ML model using microservices.
  • A project in which each team contributes to an open source project of their choice. This involves identifying an issue in the existing project, understanding the development process of that project and how to contribute, and actually making a contribution such as fixing a bug or adding a feature. Extra credit will be awarded if the contribution is merged into the project.

Logistics and People

Fall 2020, this course is designated as a hybrid offerring.

  • All lectures will take place over zoom.
  • Two recitations are assigned classrooms, when undergraduate in-person instruction is permitted; two are remote-only. Note that only individuals registered for a given in-person recitation may attend that in-person recitation. This is due to strict classroom capacity requirements.
  • If you are assigned to Sections A or B, but know for sure you do not want to attend in person, please contact us to discuss the best way we can accommodate you.

Lectures:

  • Tue/Thu 3:20-4:40 p.m. ET on Zoom
Recitations:
  • Wed 1:20-2:10 p.m. ET in WEH 5403 (Section A)
  • Wed 2:40-3:30 p.m. ET in WEH 5409 (Section B)
  • Fri 1:20-2:10 p.m. ET on Zoom (Section C)
  • Fri 2:40-3:30 p.m. ET on Zoom (Section D)

 

 

Comments

Popular posts from this blog

The Difference Between LEGO MINDSTORMS EV3 Home Edition (#31313) and LEGO MINDSTORMS Education EV3 (#45544)

http://robotsquare.com/2013/11/25/difference-between-ev3-home-edition-and-education-ev3/ This article covers the difference between the LEGO MINDSTORMS EV3 Home Edition and LEGO MINDSTORMS Education EV3 products. Other articles in the ‘difference between’ series: * The difference and compatibility between EV3 and NXT ( link ) * The difference between NXT Home Edition and NXT Education products ( link ) One robotics platform, two targets The LEGO MINDSTORMS EV3 robotics platform has been developed for two different target audiences. We have home users (children and hobbyists) and educational users (students and teachers). LEGO has designed a base set for each group, as well as several add on sets. There isn’t a clear line between home users and educational users, though. It’s fine to use the Education set at home, and it’s fine to use the Home Edition set at school. This article aims to clarify the differences between the two product lines so you can decide which...

Let’s ban PowerPoint in lectures – it makes students more stupid and professors more boring

https://theconversation.com/lets-ban-powerpoint-in-lectures-it-makes-students-more-stupid-and-professors-more-boring-36183 Reading bullet points off a screen doesn't teach anyone anything. Author Bent Meier Sørensen Professor in Philosophy and Business at Copenhagen Business School Disclosure Statement Bent Meier Sørensen does not work for, consult to, own shares in or receive funding from any company or organisation that would benefit from this article, and has no relevant affiliations. The Conversation is funded by CSIRO, Melbourne, Monash, RMIT, UTS, UWA, ACU, ANU, ASB, Baker IDI, Canberra, CDU, Curtin, Deakin, ECU, Flinders, Griffith, the Harry Perkins Institute, JCU, La Trobe, Massey, Murdoch, Newcastle, UQ, QUT, SAHMRI, Swinburne, Sydney, UNDA, UNE, UniSA, UNSW, USC, USQ, UTAS, UWS, VU and Wollongong. ...

Logic Analyzer with STM32 Boards

https://sysprogs.com/w/how-we-turned-8-popular-stm32-boards-into-powerful-logic-analyzers/ How We Turned 8 Popular STM32 Boards into Powerful Logic Analyzers March 23, 2017 Ivan Shcherbakov The idea of making a “soft logic analyzer” that will run on top of popular prototyping boards has been crossing my mind since we first got acquainted with the STM32 Discovery and Nucleo boards. The STM32 GPIO is blazingly fast and the built-in DMA controller looks powerful enough to handle high bandwidths. So having that in mind, we spent several months perfecting both software and firmware side and here is what we got in the end. Capturing the signals The main challenge when using a microcontroller like STM32 as a core of a logic analyzer is dealing with sampling irregularities. Unlike FPGA-based analyzers, the microcontroller has to share the same resources to load instructions from memory, read/write th...