A collection of historical material from ISP. For current ISP course may cover different topics.

Please see Google Classroom for current topics & material.

Lab Topic Description
ISP Introduction Introduction to course and goals, prerequisites, required work, project, and grading.
Advice from an SKE scholar & entrepeneur.
Software Processes
An introduction to software process concepts and practices. The Waterfall process compared to iterative and incremental development; the Unified Software Develop Process (UP) as a model.
Github features that support SDLC
Agile Agile values, principles, and practices for software development. Agile values and practices can be incorporated into any development process.
Scrum Scrum for managing development work and iterations.
Git Git commands and common tasks, structure of a git repo, branches, merging, and remote repos.
Visualize a repo as a graph.
Use SSH Keys for authentication instead of your Github password.
Git and Development Using Github and slides.
Github Flow, branches, issues, & pull requests.
Github Flow is a workflow for a team to effectively work together using git.
Importance of descriptive commit messages and Pull Requests.
Unit Testing Intro to Unit Testing. Test behavior, not just methods.
Unit test in Python and Code Coverage
JUnit for Java
Mock Objects Mock Objects for testing.
Static Typing Intro to Types and Type Checking (slides) and Python Type Hinting by Mai.
Python docs Typing support and Collections base classes are excellent.
Add type hints to detect errors: scorecard.py
Mai’s Type Hint Practice.
Code Quality Principles, guides, tips, and tools for writing good quality “clean” code.
Coding standard, docstring comments and code checkers. Essential for all developers!
Refactoring Improve code by restructuring it without changing the external functionality.
Common refactoring situations and how to do them using an IDE.
Assertions “Asserts” are tests of what should be true at some point in code. Assertions reduce errors and document code-level assumptions.
Code Review Software Review slides and Overview
Code Review Best Practices from experts
Reviews chapter from Stellman & Greene
Review Checklists examples and guidance
Assignment: Code Review Checklist and Procedure (script)
Web App Testing
End-to-End Testing
Web App Testing how to test web apps, includes E2E with Selenium.
Intro to Selenium and Page Scraping.
Automation and CI
Continuous Integration
Ant, Make, and other build tools
Authentication
Techniques for authenticating users and software clients (apps), including OAuth.
Django’s authentication and authorization modules.
UML The standard for visual software modeling and design.
You should be able to understand common UML diagrams.

Web Applications and Django

Topic Description
HTTP HTTP is the communication protocol used by web apps and web services.
Introduction to HTTP
HTTP in Action class exercises using HTTP, requires ncat or netcat.
Web Servers and Frameworks Introduction to how a web server and web app typically handle requests and responses. This helps make sense of the various components of a web framework.
WSGI standard for connecting Python web apps to web app servers.
Django Introduction to Django and MVC design pattern.
KU Polls Project A polls application based on the Django Polls tutorial, implemented as an iterative and incremental project. Each iteration involves planning, design, implementation, testing, and review.
Database Basics Intro to database concepts and how to use a database in code. Tables, field types, identity fields, relating tables, basic CRUD operations.
Object-Relational Mapping ORM concepts and frameworks. Different domain models and their database table schema. All web frameworks use ORM. Understanding ORM concepts makes it easier to understand and work with Django models.
12-Factor App
Recommendations for maintainable cloud-based applications, by Heroku.
Separate Configuration from Code Separate configuration from code is a good practice for all software, not just web apps.
How to Externalize Configuration in Django.
Import and Export Data How to create “starter” data so that others can easily set-up and use your Django application.
Virtual Environment Virtualenv Quickstart and Using Virtualenv - how to run apps in a virtual environment for portability, reliability, and security.
Messages Framework Easily pass messages from a view to a template.
Organize Django Code Separate your models, tests, and views into individual files (in packages) to reduce conflicts on team projects. The Mozilla Developer Network (MDN) and Cookie Cutter Django project.
Logging Logging is an essential part of a web application.
Logging Practice and demo_log.py code
Deployment How to package and deploy a web application. Manage dependencies and isolate applications in containers.

Other Topics

These may be implicitly covered as part of other topics.

Topic Description
Project Planning 1. Writing a good Vision statement
2. Defining Goals and Milestones
3. Key planning concepts from the RUP framework
4. Prioritizing development (RUP: value to customer, high risk, importance to architecture)
5. Prototyping to reduce risk and uncertainly
Essential Project Documents Vision Statement - describes goal and “vision” of the product
Requirements - features, use cases or user stories (“Software Requirements Specification” in some projects)
Project Plan - overall plan of what to build at each iteration, and the process to use
Iteration Plan - goal, milestones, and tasks for one iteration
Software design - document at least high level design
Project notebook, e.g. wiki, to record: - decisions related to architecture - important design decisions and why you made them (rationale)
- solutions and knowledge
Build & installation instructions - including dependencies
License Understand the different open source licenses like GNU, BSD, MIT, and Creative Commons so you can choose one that matches what you want.
Don’t just blindly write “GNU” which is incomplete (should be “GNU GPL v3” or similar) and inappropriate for many projects. The GPL can be quite restrictive!
Project Tools Project board - a board for whole project and task board for each iteration
Issue tracker - bugs, change requests, and more
Burn-down or Burn-up chart (optional) - track your rate of progress
Project wiki - good location for iteration plans, software design notebook, recording knowledge and solutions
Information Radiator Create one place that quickly conveys all useful info about your project.
When project info (tasks, communication, docs, tools) are spread across many different places, people don’t use them!
The information radiator is one place that links to everything you need. Some teams use Slack, Discord, or the Project Board as info radiator.
Web hooks, integrations, and badges can be used to connect tools and notifications.
Task Boards Task board should be part of your workflow – part of an information radiator. Good choices are:
Trello
Asana
Github Project Boards
7 Scrum Software Tools สำหรับใช้บริหารจัดการโปรเจค (Thai)
Note: task board must to viewable by TAs and instructor!
Markdown Everyone should know how to use Markdown. It’s the lingua franca of online project docs. Much easier and cleaner to write than HTML.
Process Improvement How to discover and implement improvements to your development process
Measuring Progress and Quality Velocity - the team’s rate of task completion
Common software metrics, like LOC, functions, code “units”.
Count and classify defects. Design defects, coding defects, test defects, regression defects.
Estimation Estimation slides and Prof. Jittat’s Slides
Frequent question of managers and customers is “how long will it take?” or “when will be ready?” Planning requires good estimates, but most developers are very poor at estimation.
- How to estimate development time and code size
- Track your effort in order to improve ability to estimate
- Agile Estimation talk by Construx (Steve McConnell’s company)
Self-improvement - Importance of continual learning and reading
- Advise from SKE grad @ TaskWorld
- Pragmatic Programmer Item 5: Your Knowledge Portfolio (p. 37)
- Goal-directed learning instead of comprehensive learning or random videos
- Track your own performance
- Create and improve your own Personal Software Process
Communication One of the main causes of unsuccessful projects is poor communication.
Anti-Patterns for Developers 10 practices of highly ineffective software developers on InfoWorld

Old 2019 ISP index


Project Documentation

Good places for project documentation:

  • Github Wiki - good for all kinds of project docs, plans, designs, reference material, and retrospective summaries
  • Github pages - create a static site from a specified directory or branch of your project repository
  • readthedocs.io
  • swagger.io - mainly for API and programmer docs

Links to test your link scanner: