CSCI 338: Fall 2024

Software Engineering

CSCI 338: Fall 2024

Topic 4. Package & Dependency Management

When developing software, it is common to rely on dependencies -- code that has been developed by other people. However, your code isn't the only code that changes. Dependencies (and their dependencies, and their dependencies' dependencies) also evolve over time as new features are added and bugs are patched. Given this, in this unit we will examine some tools, approaches, and considerations for managing code dependencies. We will also experiment with a few different dependency management tools, such as npm, poetry, and apt.

Tuesday, 9/17

Slides & Activities

Readings

Thursday, 9/19

Slides & Activities

  • Lab 5: Understanding Package Managers

Study Questions

  1. What do we mean by "dependency management"?
  2. What happened in the "leftpad" debacle? What happened in the "everything" debacle? Why should we care?
  3. What are the trade-offs associated with relying on dependencies?
  4. What should you consider before adding a new dependency to your software project?
  5. What are some challenges with upgrading dependencies?
  6. What are some dependencies that we have used in this class?
  7. What are some common features of a good dependency management system?
  8. What is the purpose of the Poetry lock file and the package.json lock file?
  9. Different dependency management systems are used for different parts of the software stack. What are some examples of dependency managers that are used for: operating systems, software languages (e.g., python, node.js, ruby, etc., server configuration?