title |
---|
Schedule |
Please do this before the course starts. Otherwise, do it in Week 1.
- Sign-up and Install Required Software
- Read About the course for essential class resources & how to contact TAs.
- Introduction to the course
- Introduction to software process
- Exercise: Software Process Basics (Google Form)
- Exercise: Write a Process Description for an Everyday Project
- Code Quality, Coding Style, and Coding Standards
- Python Coding Style: How to Write Beautiful Python Code with PEP8 on Real Python
- PEP257 Docstrings - only one page
- Sphinx style docstrings good for documenting parameters, returns, and exceptions
- Exercise: apply the Python style guidelines
- Programming 2 Review, basic Python and O-O concepts.
- Git concepts, Git commits as a graph, managing files and using Git history.
- Exercise: Git practice (submit on Github)
- Exercise: use the Git Visualizer to see a git graph
- Exercise: use
gitk
tool that is included with git - Exercise: complete parts 1-2 of Learn Git Interactive. Section on Moving Work Around is recommended.
- Using Github & Github Classroom.
- Exercise: practice using Github Classroom (not done in 2022)
- Quiz: Programming Skill Assessment
- Software Process Homework reading assignment
- Software Process Questions based on the reading
- Git commands "cheat sheet" on Github
- Scrum
- Watch Scrum in Under 10 Minutes on Youtube
- Introduction to Scrum with links you should read
- Read Scrum Guide. Anything in the Scrum Guide may be on a quiz.
- Git branch and merge
- Exercise: practice merge and conflict resolution
- Git remotes
- Feedback on Week 1 assignments
- Github Flow and Pull Requests - Github's Intro
- Exercise: Github Flow questions (Google form)
- Exercise: KU Cafe
- Reading Assignment:
- Complete at least parts 1 & 2 of this tutorial: https://learngitbranching.js.org/
- Add Remote Commands to your Git "cheat sheet" from Week 1, using remotes.md in starter code.
- Introduction to Testing
- Python Unit Testing my slides
- unittest in the official Python docs
- Exercise: unit testing practice (simple exercise)
- Quiz on week 1 and 2 material
- Review Github Flow
- Coding Standard and Code Quality
- Docstring Comments. Three conventions and the one we recommend.
- for parameters and return values use type hints instead of writing the data type in comments
- Exercise: add docstring comments to code
- Exercise: improve a code using Pylint
- Unit Tests for a Bank Account code
- Homework: Read "Documenting Python Code" https://realpython.com/documenting-python-code/. Really read it.
- Homework: Finish Unit Tests for Bank Account
- Create a Burn-down chart for a Sprint. Not assigned this year:
- Command Line Basics you should know (nothing to submit)
- Preparation: install ncat on your computer and TEST IT: https://nmap.org/ncat/.
- Intro to TCP/IP and HTTP Protocol, presentation
- Exercise: HTTP in Action. Manually enter HTTP requests and responses using ncat.
- Intro to Django
- KU Polls Project Inception
- Create a Vision, Requirements, and a Roadmap for the project (Project Plan)
- Initialize a Github repository, add essential docs to a Wiki, and start a Project
- Description of KU Polls first iteration (Django Polls tutorial)
- Domain Model for Polls app -
Question
andChoice
classes - You will be implementing features according to the tutorial, so goods tasks are "Implement Tutorial part 1", "Implement Tutorial part 2", etc.
- As you do each part of the tutorial add a long description to each task, using Markdown.
- Development work on a git branch named
iteration1
. Push this branch to Github. Merge to master/main when done.
- Domain Model for Polls app -
- KU Polls Iteration 1 (Django Tutorial)
- submit work in your own
ku-polls
repo on Github. - use correct repo structure! No extra layer of directories.
- submit work in your own
- Review progress on KU Polls iteration 1.
- Web app and web framework overview and presentation
- was week 4 in prior years
- How Django handles requests (with graphic) on MDN
- Did anyone read this?
- Django Review
- Improvements to KU Polls for Iteration 2
- add an
end_date
to polls, - add methods
is_published
,can_vote
- improve navigation by adding links to home page - should never need to use "Back" button
- add default landing page (redirect)
- externalize configuration data and secrets
- add an
- Quiz: Unit Testing
- Separate configuration from code & how to externalize configuration
- Presentation
- a 12-Factor App recommended practice, also called "externalize configuration"
- Exercise: Externalize Configuration https://github.com/ISP21/decouple-example
- Start background work and proposal for course team project
- KU Polls Iteration 2
- Introduce the Team Projects.
- Brief Introduction to Databases
- Database Exercise: https://cpske.github.io/ISP/assignment/week6/database-exercise
- Use a database browser to view & describe the KU Polls database schema
- Converting a software model to database model
- Basics of Object-Relational Mapping
- Persistence in Django: how Django provides the CRUD operatons
- Overview of KU Polls Iteration 3
- Homework (due before Thursday lab): Revise KU Polls domain model
- Authentication
- Lab: Intro to Authentication in Django
- Lab: Refactor KU Polls for Iteration 3 (1-user-1-vote)
- Django Review Questions (answer online): https://forms.gle/zPuPzzt76QWboFZXA
- (Not assigned in 2021, but a good thing to do) Test another student's KU Polls
Submit a project proposal using the Project Spreadsheet
- Project Guidelines: http://bit.ly/ISP-project-description
- Proposal Template: http://bit.ly/ISP-project-template
- Project Proposals:
- http://bit.ly/ISP2021-projects to submit your team and proposal
- http://bit.ly/ISP2020-projects last year's proposals
- Review some previous material and assignments
- Why spend so much time on KU Polls?
- UML Class & Sequence Diagrams (added in 2022)
- Class Diagram exercise
- Sequence Diagram exercise
- Lab: Smoke Testing of another student's KU Polls (post issues)
- Virtual Environments for Python
Not covered in 2022:
- Code Coverage tools for Python
- Exercise: apply code coverage
- Testing in Django - how to test models, views, url dispatcher, and templates
- ORM modeling practice (optional) write Django models for a sales application
- Github Classroom Assignment: https://classroom.github.com/a/UOcT0BOr
- Instructions: https://cpske.github.io/ISP/assignment/orm/Modeling-Practice.pdf
-
Exam is 27 September. Time and Location TBA.
-
Covers everything so far.
-
Recommended OBS Video Settings: https://drive.google.com/open?id=1xiDH6NImH0PAAZp5AUNWtJeLzlRSYoqiAOFE8wFS1vM&authuser=1
- We may not need this is 2021 if we can use KU's Exam application.
-
Coding Part at a Later Date
-
Coding emphasize unit testing and code quality.
-
Coding will also cover refactoring and maybe design patterns.
- Logging
- Logging practice
- User Stories
- Milestones to show progress toward completion of a project
- Domain Modeling and Category List to help discover domain classes
- Lab: User Stories. Construct User Stories, then use them to discover Domain Classes.
- Add Logging to KU Polls
- Write User Stories for your project. Add them to the project wiki.
- Add a domain class diagram to your project docs
- Use the User Stories to identify domain classes and help you create a domain model
- Automation and Continuous Integration
- Exercise using CI - add Travis-CI and Codecov to demo-pyci project
- Instructions https://cpske.github.io/ISP/automation/travis-demo-project
- Starter code (to be added)
- Code Coverage & Coverage Tool for Python
- Exercise: add code coverage to demo-pyci project, use Codecov.io to display the report, and add badges to the project README
- Lab: Adding badges to your Github repo, to indicate status. Badges provide a quick visual indicator of project health.
- Add CI to KU Polls
- Use CI to run unit tests and run code coverage
- Add "badges" to your KU Polls README.md for Travis and CodeCov status
- Reading on terminology & concepts for refactoring and design patterns
- Next week you will be asked to explain these terms and concepts, and identify them in code.
- Read https://refactoring.guru/refactoring
- Movie Rental Refactoring, Part 1
- Starter Code on Github: https://classroom.github.com/a/_qGEboUn
-
What is "good code"? How can we improve the quality of code?
- Goals, problems, and forces on software that motivate the defination of "good code" and why it's important.
- Visible metrics and characteristics of good and poor code
- Principles and practices for writing good code
-
Refactoring Signs (aka "Code Smells") on refactoring.guru
-
Refactoring Exercise: Pizzashop refactoring https://github.com/ISP2022/pizzashop
-
Anything on https://refactoring.guru/refactoring may be on a quiz!
-
Static Typing, Static Analysis, and Type Hints
-
Static Type Checking Exercise: scorecard.py
-
Type Hints and Introduction by Mai Noripong
-
Another Type Hints Introduction on FastAPI; really good, simple examples.
-
Type Hints Practice on Google Docs
IDEs have refactoring actions that perform refactoring faster and reduce errors. But, in Python the refactoring tools work poorly unless the code has accurate type hints. Type Hints also improve static analysis so that tools can find more problems and potential errors. Please pay special attention to the type hints for Collections, return types, and optional values.
- Homework: Learn the Refactorings on Refactoring.Guru. Details on Google Classroom.
- Homework: Movie Rental refactoring, Part 1.
- Review common refactorings - submit your answers on Google Classroom (Google Form)
- More Refactoring - refactor structure of classes, creating objects (Not done in 2022)
- Refactoring Patterns
- Intro to Design Patterns
- Singleton & Factory Method Patterns - other patterns are covered in Prog2 and SS&D
- Type Hints Practice (see link in Week 10)
- Lab: Organizing Django code. Replace "models.py", "tests.py", and "views.py" with directories (packages) containing multiple files.
- Lab: CookieCutter Django and documentation have examples and good advice for structuring Django projects. Discover and describe some of them.
- Movie Rental Refactoring, Part 2
- Team Projects: prepare to demo your work soon
-
Agile - Agile values, principles, and practices.
-
Exercise: Agile Practice Review Questions
-
Introduction to OAuth
-
Exercise: OAuth Playground and questions on Google Classroom (form)
-
Lab: perform a short code review and then start on your team's code refview script and checklist.
-
Read Reviews chapter from book by Stellman and Greene.
-
Read 3 Code Review Best Practices articles in Code Review Assignment
-
Create a Code Review Script and Checklist and then do a walk-through of project code
-
(not in 2022) Homework: Read the Learn More articles in Agile. They are fundamental.
-
Optional: Agile Crossword Puzzle
- answers available online
-
(not in 2022) Read the articles in Agile Practices (there will be quiz on this)
-
Read tips from Practices of an Agile Developer ("Tips" sections in assignment)
- Refactoring Review (again)
- Review Movie Rental refactoring
- Testing Pyramid and End-to-End Testing in Web Testing
- Selenium for testing web applications. Some slides in Web Testing
- Selenium Exercise scrape search results from DuckDuckGo
- Lab: Project Demos
- Reading on Agile Practices (tba)
- Link Scanner write an app to scan and test all links on a web page using Selenium, and reports bad links.
- Remaining project demos.
- Review Agile Practices (week 10 assignment), including comments in code.
- The 12-Factor App - 7 factors that apply to your projects
- Robot Framework - a great tool for automation and E2E testing.
- Team assignment:
- create installation instructions for your project
- use a virtualenv for local installation
- Team Assignment: deploy your application to a cloud service
- Review
- Bug Hunting - find problems in other teams' software
-
Individual assignment: install and run another team's project
- Post issues for any problems in their installation instructions.
- Goal is to find problems with installation and setup, not in the application itself (that is next week's Bug Bounty assignment).
-
Bug Bounty - try to find bugs in deployed projects of other teams
- URLs of deployed projects are shown in Google Sheet for Project Testing
- Top bug hunters will earn extra assignment points