A collection of material for ISP.

For current ISP course may cover different topics and not in this order!

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 graduate, 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.
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 git repo as a graph.
Use SSH Keys for secure authentication instead of a password.
Git for Development Using Github and slides.
Github Flow, branches, issues, & pull requests.
Github Flow is a workflow using Git effectively on a project, esp. a team project. Importance of descriptive commit messages.
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. Refactoring.guru is a great resource.
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 Save database table data to a text file and import it again. This can be used to provide “starter” data so 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
Django Logging
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 Creating a Project Development Plan with a schedule and key milestones.
Project Inception 1. Writing a good Vision & Scope statement
2. Defining Goals and Milestones
3. Key planning concepts from the U.P. framework
4. Prioritizing development. The UP prioritizes based on a) value to customer, b) addressing risk, c) importance to the 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 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 blindly write “GNU” which is incomplete (should be “GNU GPL v3” or similar) and inappropriate for many projects. The GPL can be very 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 - track your rate of progress
Project wiki - good location for project documents
Information Radiator One place that quickly conveys all useful info about your project.
When project info (test results, tasks, design, communication) are spread across many places, people don’t use them!
An information radiator is one place that links to everything you need. Some teams use Slack, Discord, or the Project Board as information radiator.
Web hooks, integrations, and badges can be used to connect tools and notifications.
Task Board Task board should be part of your workflow. Good choices are:
Asana
Github Project Boards
Trello
7 Scrum Software Tools สำหรับใช้บริหารจัดการโปรเจค (Thai)
Note: your 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. ReStructured Text (ReST) is another good, popular markup language.
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: