Skip to content

Latest commit

 

History

History
538 lines (485 loc) · 16.8 KB

index.md

File metadata and controls

538 lines (485 loc) · 16.8 KB
title navigation_order
Topics
1

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/index) [Introduction to course and goals](introduction/index), prerequisites, required work, project, and grading. [Advice from an SKE graduate, scholar & entrepeneur](introduction/Jomzap-Recommendations.pdf).
[Software Processes](software-process)
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/agile) [Agile values, principles, and practices](agile/agile) for software development. Agile values and practices can be incorporated into any development process.
[Scrum](agile/scrum) Scrum for managing development work and iterations.
[Git](git) Git commands and common tasks, structure of a git repo, branches, merging, and remote repos. [Visualize][GitVisualizer] a git repo as a graph. [Use SSH Keys](https://help.github.com/articles/connecting-to-github-with-ssh/) for secure authentication instead of a password.
Git for Development [Using Github](git/Using-Github) and [slides](git/Using-Github.pdf). [Github Flow](git/index#github-flow), branches, issues, & [pull requests](git/Pull-Requests.pdf). Github Flow is a workflow using Git effectively on a project, esp. a team project. Importance of descriptive commit messages.
[Unit Testing](testing) [Intro to Unit Testing](testing/Intro-to-Unit-Testing.pdf). Test behavior, not just methods. [Unit test in Python](testing/Python-Unit-Testing.pdf) and [Code Coverage](testing/code-coverage) [JUnit for Java](testing/Intro-to-Unit-Testing.pdf)
Mock Objects Mock Objects for testing.
Static Typing [Intro to Types and Type Checking](code-quality/Type-Checking.pdf) (slides) and [Python Type Hinting](type-hints/introduction) by Mai. Python docs [Typing support][python-typing] and [Collections base classes][python-abc-collections] are excellent. Add type hints to detect errors: [scorecard.py](type-hints/scorecard.py) Mai's [Type Hint Practice](type-hints/type-hints-practice.pdf).
[Code Quality](code-quality) Principles, guides, tips, and [tools](code-quality/code-quality-tools) for writing good quality "clean" code. Coding standard, [docstring comments](code-quality/docstrings) and [code checkers](code-quality/code-quality-tools). Essential for all developers!
[Refactoring](refactoring) Improve code by restructuring it without changing the external functionality. [Refactoring.guru](https://refactoring.guru) is a great resource. [Common refactoring situations](refactoring/Refactoring-Patterns.pdf) and how to do them using an IDE.
[Assertions](code-quality/assertion) "Asserts" are tests of what should be true at some point in code. Assertions reduce errors and document code-level assumptions.
[Code Review](code-review) [Software Review](code-review/Reviews.pdf) slides and [Overview](code-review) [Code Review Best Practices](code-review/code-review-best-practices) from experts [Reviews chapter from Stellman & Greene](code-review/Reviews-Stellman-and-Greene.pdf) [Review Checklists](code-review#checklists) examples and guidance Assignment: Code Review Checklist and Procedure (script)
Web App Testing End-to-End Testing [Web App Testing](testing/WebTesting.pdf) how to test web apps, includes E2E with Selenium. [Intro to Selenium](testing/Selenium-intro) and [Page Scraping](testing/Selenium-scraping).
[Automation and CI](automation) [Continuous Integration](https://docs.travis-ci.com/user/for-beginners) [Ant](automation/Ant.pdf), [Make](automation/Make.pdf), and other build tools
[Authentication](authentication) Techniques for authenticating users and software clients (apps), including OAuth. Django's [authentication](django/authentication) and [authorization](django/authorization) modules.
[UML](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](web/index) HTTP is the communication protocol used by web apps and web services. [Introduction to HTTP](web/HTTP.pdf) [HTTP in Action](web/HTTP-in-Action.pdf) class exercises using HTTP, requires ncat or netcat.
[Web Servers and Frameworks](web/index#web-frameworks) [Introduction](web/Web-Apps-and-Web-Servers.pdf) 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](web/wsgi-servers) standard for connecting Python web apps to web app servers.
[Django](django/django) [Introduction to Django](django/Intro-to-Django.pdf) and MVC design pattern.
[KU Polls Project](assignment/ku-polls/) 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](database/Database-Basics.pdf) 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](database/orm) 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](web/12FactorApp.pdf) Recommendations for maintainable cloud-based applications, by Heroku.
[Separate Configuration from Code](refactoring/separate-configuration) [Separate configuration from code](refactoring/Separate-config-from-code.pdf) is a good practice for all software, not just web apps. How to [Externalize Configuration](django/external-configuration) in Django.
[Import and Export Data](django/data-import-export) 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](django/virtualenv) [Virtualenv Quickstart](django/virtualenv-quickstart) and [Using Virtualenv](django/virtualenv) - how to run apps in a virtual environment for portability, reliability, and security.
[Messages Framework](django/messages-framework) Easily pass messages from a view to a template.
[Organize Django Code](django/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/) [Logging](logging/Logging.pdf) is an essential part of a web application. [Logging Practice](logging/logging-practice) and [demo_log.py](logging/demo_log.py) code [Django Logging](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](https://choosealicense.com) 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](https://asana.com) [Github Project Boards](https://docs.github.com/en/github/managing-your-work-on-github/about-project-boards) [Trello](https://trello.com) [7 Scrum Software Tools สำหรับใช้บริหารจัดการโปรเจค](https://www.borntodev.com/2020/02/20/scrum-software-tools/) (Thai) Note: your task board must to viewable by TAs and instructor!
[Markdown](documentation/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](estimation/Estimation.pdf) and [Prof. Jittat's Slides](estimation/06a-estimation.pdf)
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](http://www.construx.com/Resources/Presentation/Agile_Estimation__Key_Principlies_and_Practices_for_Successful_Agile_Practices/) talk by Construx (Steve McConnell's company)
Self-improvement - Importance of continual learning and reading
- Advise from [SKE grad @ TaskWorld](introduction/taskworld-advise)
- _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](https://www.infoworld.com/article/2615765/application-development/10-practices-of-highly-ineffective-software-developers.html) 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: