mirror of
https://github.com/jackyzha0/quartz.git
synced 2025-12-24 13:24:05 -06:00
auto update
This commit is contained in:
parent
5b9d712738
commit
5aaf035160
18
content/notes/07-testing.md
Normal file
18
content/notes/07-testing.md
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
title: "07-testing"
|
||||||
|
tags:
|
||||||
|
- cosc202
|
||||||
|
---
|
||||||
|
|
||||||
|
# 07-testing
|
||||||
|
|
||||||
|
- [[testing]]
|
||||||
|
- [[test-driven-development]]
|
||||||
|
- [[unit-testing]]
|
||||||
|
|
||||||
|
- undnerstand that testing is useful for detecting bugs
|
||||||
|
- contrast different types of testting
|
||||||
|
- descrive the principle of test driven development
|
||||||
|
- explain how unit tests ar developed
|
||||||
|
- indicate how languages integreate unit test support
|
||||||
|
- apppreiciate limitation of software testing
|
||||||
9
content/notes/08-debugging.md
Normal file
9
content/notes/08-debugging.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
title: "08-debugging"
|
||||||
|
tags:
|
||||||
|
- cosc202
|
||||||
|
---
|
||||||
|
|
||||||
|
# 08-debugging
|
||||||
|
|
||||||
|
[[debugging]]
|
||||||
9
content/notes/09-documentation.md
Normal file
9
content/notes/09-documentation.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
title: "09-documentation"
|
||||||
|
tags:
|
||||||
|
- cosc202
|
||||||
|
---
|
||||||
|
|
||||||
|
# 09-documentation
|
||||||
|
|
||||||
|
[[documentation]]
|
||||||
16
content/notes/10-continuous-integration-1.md
Normal file
16
content/notes/10-continuous-integration-1.md
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
title: "10-continuous-integration-1"
|
||||||
|
tags:
|
||||||
|
---
|
||||||
|
|
||||||
|
# 10-continuous-integration-1
|
||||||
|
|
||||||
|
[[continuous-integration]]
|
||||||
|
|
||||||
|
1. explain the term continuous integration
|
||||||
|
2. describe different purposes for CI
|
||||||
|
3. indicate how CI jobs are usually triggered
|
||||||
|
4. understand implications of CI running asynchronously
|
||||||
|
5. Exlplain how to manage output from CI jobs
|
||||||
|
6. describe role of stages and jobs within gitlab pipelines
|
||||||
|
7. indicate how CI specifications are stored
|
||||||
81
content/notes/11-continuous-integration-2.md
Normal file
81
content/notes/11-continuous-integration-2.md
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
---
|
||||||
|
title: "11-continuous-integration-2"
|
||||||
|
tags:
|
||||||
|
- cosc202
|
||||||
|
---
|
||||||
|
|
||||||
|
1. apprecitae that gitlab is a xomplex software
|
||||||
|
2. Understand where CI jobs scripts get run
|
||||||
|
3. explain why reposityory servers can host websites
|
||||||
|
4. Understandhow gitblab dternmimines awhen a CI script failed
|
||||||
|
5. Describe a way in which CI scrupts scan handle secrets
|
||||||
|
6. OUtline uses of local git hook scripts
|
||||||
|
|
||||||
|
# 11-continuous-integration-2
|
||||||
|
|
||||||
|
CI runs pipellines defined in .gitlab-ci.yaml asynchronously
|
||||||
|
|
||||||
|
CI usually tets abd buiolds your prokects
|
||||||
|
|
||||||
|
runs on a repo server. Usuially persistent, internet accessible
|
||||||
|
|
||||||
|
## 1 Gitlab overall architecture
|
||||||
|
 : not in exam
|
||||||
|
- many different services used
|
||||||
|
|
||||||
|
## 2 Gitlab runners
|
||||||
|
run CI scripts
|
||||||
|
|
||||||
|
- gitlab.com is a cloud computing service
|
||||||
|
- allows elf hosting which is what CS does
|
||||||
|
- altitude is a gitlab instance at CS
|
||||||
|
- servers to host runners that run CI scripts
|
||||||
|
- servers that host websites, e.g., cspages.otago.nz
|
||||||
|
- Gitlab can invoke runners that you host
|
||||||
|
- e.g., to use a particular GPU, or other hardware you have
|
||||||
|
- GItlab runner itself is a small program written in Go
|
||||||
|
|
||||||
|
### 2.1 Runner architecture
|
||||||
|
|
||||||
|
- runs jobs
|
||||||
|
- on isolated infrastructure
|
||||||
|
- ... to maintain secrity
|
||||||
|
- that is set up on demand
|
||||||
|
- ... handle load variation
|
||||||
|
- suits cloud computing
|
||||||
|
|
||||||
|
RHS shows GitLab.com's CI hosting: uses google cloud
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
 : not in exam
|
||||||
|
|
||||||
|
## 3 How CI chagned website hosting
|
||||||
|
|
||||||
|
- need to share stifacts produced by CI jobs
|
||||||
|
- using the web to share artefacts is ideal
|
||||||
|
- so now most repo servers also host websites
|
||||||
|
- these are static websites: all content is fixed
|
||||||
|
- CI can run static website generators (SSGs)
|
||||||
|
- git repo contains source code of website
|
||||||
|
- CI pipelines transforms souce code into HTML fiels
|
||||||
|
- HTML files then hosted as a website by repo sever
|
||||||
|
|
||||||
|
e.g., https://cosc202.cspages.otago.ac.nz
|
||||||
|
|
||||||
|
## 4 Debugging CI scripts
|
||||||
|
|
||||||
|
- first ensure config files YAML is valid
|
||||||
|
- vuilt in gitlab editor checks YAML as you type
|
||||||
|
- commands runfrom shell that fail return an exit code
|
||||||
|
- most unix shells sotre exit code of previous commands in $
|
||||||
|
- So if variable $? (return code of prevous command) is non-zero, the previous command failed
|
||||||
|
- Git lab considers CI job as failed if any command fails
|
||||||
|
- your shell scripting can choose to hide this exit code
|
||||||
|
- e.g., `if command supposed to fail; then true; else true; fi`
|
||||||
|
- Complex scripting? Beste to put script in a file and run it from CI
|
||||||
|
|
||||||
|
## 5 Secrets used by CI scripts
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
@ -6,4 +6,77 @@ tags:
|
|||||||
|
|
||||||
# continuous-integration
|
# continuous-integration
|
||||||
|
|
||||||
|
## 1 What is it
|
||||||
|
continuous --> is always happening
|
||||||
|
integration --> connecting software components
|
||||||
|
|
||||||
|
- in contrast to ad hoc, occasional integration:
|
||||||
|
- diverging component developmetnamy break integration
|
||||||
|
- repaiing software may be expensive
|
||||||
|
|
||||||
|
- supports 'aglile' software dev
|
||||||
|
- like test driven development, help catch issues early
|
||||||
|
|
||||||
|
- usually automated
|
||||||
|
|
||||||
|
## 2 Purposes
|
||||||
|
- checking code syntax
|
||||||
|
- e.g., have CI compile the code and report errors
|
||||||
|
- (local devs compilaer may be different from remote)
|
||||||
|
- checking semantics of code
|
||||||
|
- building docs
|
||||||
|
- e.g., auto run javadoc
|
||||||
|
- running projects code tests
|
||||||
|
- auto run JUnit, and report fails
|
||||||
|
|
||||||
|
## 3 Starting CI jobs
|
||||||
|
- from version control
|
||||||
|
- e.g., every commit triggered CI jobs to run
|
||||||
|
- starts on a push to server
|
||||||
|
- manually
|
||||||
|
- on a schedule
|
||||||
|
|
||||||
|
## 4 Runs asnychronously
|
||||||
|
- dont require devs to wait for completion
|
||||||
|
- common to run locally as well as on consistent standard environment
|
||||||
|
|
||||||
|
- other timescales
|
||||||
|
- local checks as you commit
|
||||||
|
- checks as you type
|
||||||
|
- checks as you save
|
||||||
|
|
||||||
|
## 5 Output
|
||||||
|
since CI is asynchronous, its feedback is also
|
||||||
|
|
||||||
|
- e.g.,
|
||||||
|
- web badges showing status
|
||||||
|
- can send emails
|
||||||
|
- messaging platform
|
||||||
|
- e.g., slack, discord, teams
|
||||||
|
- webhooks etc
|
||||||
|
|
||||||
|
git project websites usually provide logging interface,. They will watch scripts in virtual terminal and capture output from CI scripts
|
||||||
|
|
||||||
|
## 6 Github piplines
|
||||||
|
|
||||||
|
- a pipeline has multiple _stages_
|
||||||
|
- e.g., test, build, deploy
|
||||||
|
|
||||||
|
- each stages has multiple _jobs_
|
||||||
|
- e.g., JUnit, custom tests, etc
|
||||||
|
|
||||||
|
## 7 Yaml
|
||||||
|
|
||||||
|
- most Ci frameworks use YAML for their configuration
|
||||||
|
- structured text based formats
|
||||||
|
- python-like format or ≈JSON
|
||||||
|
|
||||||
|
## 8 configurationg from git repo
|
||||||
|
|
||||||
|
- CI config often via file in git top-level directory
|
||||||
|
- CI is version managed
|
||||||
|
|
||||||
|
- Gitlab pipeline specs go into .gitlab-ci.yaml:
|
||||||
|
- shows command sequece to run for a jon, within a stage
|
||||||
|
- output from commands is stored for a subsequent viewing
|
||||||
|
- indicates what files 'artifacts' should be kept from jobs
|
||||||
|
|||||||
70
content/notes/debugging.md
Normal file
70
content/notes/debugging.md
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
---
|
||||||
|
title: "debugging"
|
||||||
|
tags:
|
||||||
|
- cosc202
|
||||||
|
---
|
||||||
|
|
||||||
|
# debugging
|
||||||
|
|
||||||
|
removing technical faults
|
||||||
|
isolaing and remove technical faults
|
||||||
|
a human process
|
||||||
|
- requires creativity/disipline/knowledge
|
||||||
|
- deepr understanding of code
|
||||||
|
|
||||||
|
debuggers are tools to help debugging
|
||||||
|
|
||||||
|
## 1 common approaches
|
||||||
|
temporarily add output of diagnostic info
|
||||||
|
- "printf" debugging
|
||||||
|
permanently include calls to logging system
|
||||||
|
- route to terminal, log files etc
|
||||||
|
|
||||||
|
## 2 debugging machine code
|
||||||
|
- cpu runs code instruction by instruction
|
||||||
|
- thus debugger can intervene between instructions
|
||||||
|
- most cpus help debugger interrupt and resume programs
|
||||||
|
- cpu reached current code via a sequence on callers
|
||||||
|
- called **stack trace** , aka back frame, stack frame etc
|
||||||
|
- may reach point where it cannot continue
|
||||||
|
- e.g., integer division by zero, program execution must stop
|
||||||
|
- stack trace of stopped program can be analysed
|
||||||
|
|
||||||
|
## 3 Imperative languages
|
||||||
|
These are language that are executed in a step-wise, sequentail manner.
|
||||||
|
|
||||||
|
- debug symbols
|
||||||
|
- e.g., method named, variable named
|
||||||
|
- source code context
|
||||||
|
- line numbers
|
||||||
|
- variable name
|
||||||
|
- function method names
|
||||||
|
|
||||||
|
## 4 doing debugging
|
||||||
|
### 4.1 stepping skipping running
|
||||||
|
- step into --> steps one statement and steps into function calls
|
||||||
|
- step over --> a step that treats function calls as statement
|
||||||
|
- step out --> return to the instruction after the function call you're in
|
||||||
|
- continue --> go back to running code continuously
|
||||||
|
|
||||||
|
### 4.2 controlling debugger execution
|
||||||
|
|
||||||
|
Can run normally --> debugger wil run when program crashes
|
||||||
|
|
||||||
|
Set Breakpoint --> debugger will stop program when/if that line is reached
|
||||||
|
- conditional breakpoints only suspend if a condition is true
|
||||||
|
|
||||||
|
Watch point --> program is suspended when some data changes (e.g., variables)
|
||||||
|
|
||||||
|
## 5 debugging non imperative languages
|
||||||
|
|
||||||
|
e.g, spreadsheet (Dataflow programming)
|
||||||
|
- no breakpoints
|
||||||
|
- must step through _iterations of computations_
|
||||||
|
|
||||||
|
e.g., Equation
|
||||||
|
- break into smaller parts
|
||||||
|
- try 'compile' it in multiple ways
|
||||||
|
|
||||||
|
e.g., Data base query (declarative programming)
|
||||||
|
- -reexpressign the query and comaring can be useful
|
||||||
68
content/notes/documentation.md
Normal file
68
content/notes/documentation.md
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
---
|
||||||
|
title: "documentation"
|
||||||
|
tags:
|
||||||
|
- cosc202
|
||||||
|
---
|
||||||
|
|
||||||
|
# documentation
|
||||||
|
|
||||||
|
## 1 Who, what where
|
||||||
|
- Audience
|
||||||
|
- users
|
||||||
|
- other devs
|
||||||
|
- your team members
|
||||||
|
- anyone trying to understand you software
|
||||||
|
- your future self
|
||||||
|
- Locations
|
||||||
|
- source code
|
||||||
|
- project repo
|
||||||
|
- emebedding in program
|
||||||
|
- hosted separately
|
||||||
|
- User expectations
|
||||||
|
- evolving towards software that _facilitates experimentation_
|
||||||
|
- No help docs => everything is self-explanatory
|
||||||
|
- high usability
|
||||||
|
- users familar with many abstractions
|
||||||
|
- e.g., touchscreens, menus, links
|
||||||
|
- API's
|
||||||
|
- for devs writing code to interact with your code
|
||||||
|
- typically coupled with docs
|
||||||
|
- entirely technical audience --> tool generated docs are okay
|
||||||
|
- not self explanatory
|
||||||
|
- used by devs unfamiliar with code base
|
||||||
|
- Project Docs
|
||||||
|
- meaningful commit msgs
|
||||||
|
- extra mangement with e.g., github
|
||||||
|
- issue tracking
|
||||||
|
- ensures relevant material is cross linked where possible
|
||||||
|
- can easily refer to source code
|
||||||
|
- Source code docs
|
||||||
|
- header comments
|
||||||
|
- software licencing
|
||||||
|
- support devs
|
||||||
|
- indicate code ownership
|
||||||
|
- in code comments on fields methods etc
|
||||||
|
- keep in sync with code changes
|
||||||
|
- descriptive variable/class/other names
|
||||||
|
|
||||||
|
## 2 Built in language support
|
||||||
|
- basic
|
||||||
|
- syntax for code comments
|
||||||
|
- indicate that the compiler should ingnore
|
||||||
|
- also more advanced like python "doc strings"
|
||||||
|
- Structured comments and docs
|
||||||
|
- machine parseable comments
|
||||||
|
- e.g., javadocs, perl plain old docs
|
||||||
|
- creates a doc website
|
||||||
|
- uses annotations e.g., @author, @returns, @param
|
||||||
|
- Literate programming
|
||||||
|
- donald knuth suggestions (1984)
|
||||||
|
- source code should be primarily natural language documentation
|
||||||
|
- executable code snippetrs are included within the description
|
||||||
|
- tools are used to:
|
||||||
|
- tangle the code snippets
|
||||||
|
- weave out the documentation
|
||||||
|
- Modern implementations
|
||||||
|
- jupyter notebooks
|
||||||
|
- swift playgrounds
|
||||||
|
- r markdown
|
||||||
17
content/notes/test-driven-development.md
Normal file
17
content/notes/test-driven-development.md
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
title: "test-driven-development"
|
||||||
|
tags:
|
||||||
|
- cosc202
|
||||||
|
---
|
||||||
|
|
||||||
|
# test-driven-development
|
||||||
|
|
||||||
|
tests are developed before the code
|
||||||
|
|
||||||
|
are a spec of what the code should do
|
||||||
|
|
||||||
|
first they fail ⇒ as you develop, they pass
|
||||||
|
|
||||||
|
+ quantifiable progress of code
|
||||||
|
|
||||||
|
> tests are not always bug free
|
||||||
28
content/notes/testing.md
Normal file
28
content/notes/testing.md
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
---
|
||||||
|
title: "testing"
|
||||||
|
tags:
|
||||||
|
- cosc202
|
||||||
|
---
|
||||||
|
|
||||||
|
# testing
|
||||||
|
|
||||||
|
- most software will contain bugs
|
||||||
|
- bug severity if not always equivalent to bug priority
|
||||||
|
- testing is seeking out bugs
|
||||||
|
- some test types
|
||||||
|
- unit tests
|
||||||
|
- integration tests ⇒ check units work together
|
||||||
|
- end-to-end tests ⇒ check behaviour of whole program
|
||||||
|
|
||||||
|
## 1 Limitations
|
||||||
|
- testing every code path is impossible
|
||||||
|
- halting problem - cant fully analyse code using code
|
||||||
|
- proved by alan turing in 1936
|
||||||
|
|
||||||
|
- good test design focuses on _key cases_ to pass and fail
|
||||||
|
- not probe interaction between units
|
||||||
|
- this should be done by integration testing
|
||||||
|
|
||||||
|
- testing may afffect behaviour of code
|
||||||
|
- testing framework may affect the order of esecution
|
||||||
|
- testing framework may change execution speed
|
||||||
89
content/notes/unit-testing.md
Normal file
89
content/notes/unit-testing.md
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
---
|
||||||
|
title: "unit-testing"
|
||||||
|
tags:
|
||||||
|
- cosc202
|
||||||
|
---
|
||||||
|
|
||||||
|
# unit-testing
|
||||||
|
|
||||||
|
- divide code into units ⇒ test those units
|
||||||
|
|
||||||
|
- consider appropriate scale
|
||||||
|
- depends on type of code project as well as language
|
||||||
|
- object oriented: classes? methods?
|
||||||
|
- procedural: functions? modules?
|
||||||
|
|
||||||
|
- test each unit independently
|
||||||
|
- frequently
|
||||||
|
- often after each commit/push
|
||||||
|
- can run tests if parallel
|
||||||
|
- may need to build environment in which tests run
|
||||||
|
|
||||||
|
### 0.1 supports useful principles
|
||||||
|
can support complementary work by team members
|
||||||
|
early discovery of problems
|
||||||
|
can help with documentation and specification
|
||||||
|
- unit tests can be a form of executable specification
|
||||||
|
- helps team members understand requirements
|
||||||
|
|
||||||
|
### 0.2 Test environment
|
||||||
|
consider code that interacts with a database
|
||||||
|
- you cant let that code write to a real database
|
||||||
|
- but you want to check that writes were performed
|
||||||
|
|
||||||
|
common solution is to create a fake database
|
||||||
|
- class that mocs database operations
|
||||||
|
- can also test error handling by returning error codes
|
||||||
|
|
||||||
|
mock up the database with a pretend model that returns fixed results to query
|
||||||
|
- be careful not to mock up data base incorrectly
|
||||||
|
|
||||||
|
can be a pre-recorded interaction
|
||||||
|
|
||||||
|
### 0.3 Test life cycle
|
||||||
|
- set up test environment
|
||||||
|
- run test code
|
||||||
|
- check results
|
||||||
|
- aggregate results into test summary
|
||||||
|
|
||||||
|
simple test: run method ⇒ check value
|
||||||
|
tests may chack that code fails appropriately
|
||||||
|
- crash when expected
|
||||||
|
- exceptions are generated
|
||||||
|
|
||||||
|
### 0.4 Language support
|
||||||
|
language may have bilt in testing support
|
||||||
|
- e.g., Go and Rust have command line tools to run tests
|
||||||
|
|
||||||
|
External tools can often work well too
|
||||||
|
- e.g., java code annotations can mark tests
|
||||||
|
- java ignores most annotations, but testing tools (JUnit) can use them
|
||||||
|
- annotations are symbols that begin with @ in source code
|
||||||
|
|
||||||
|
we want to distinguish between tests and normal code
|
||||||
|
- also should support for sqapping in/out mocking code
|
||||||
|
|
||||||
|
### 0.5 JUnit
|
||||||
|
test classes have a particular filename pattern
|
||||||
|
|
||||||
|
annotate test methods with @Test
|
||||||
|
|
||||||
|
other annotations
|
||||||
|
|
||||||
|
- @BeforeAll and @BeforeEach (and after)
|
||||||
|
- @RepeatedTest
|
||||||
|
|
||||||
|
JUnit 5 also supports dynamically generated tests
|
||||||
|
|
||||||
|
### 0.6 TestNG
|
||||||
|
|
||||||
|
based off JUnit and fixes some it it's problems
|
||||||
|
|
||||||
|
- provides control over threading
|
||||||
|
- run tests in parallel
|
||||||
|
- also tests for parallelism bugs
|
||||||
|
- multithreaded code i hard to debug
|
||||||
|
- data driven testing
|
||||||
|
- also
|
||||||
|
- integration testing
|
||||||
|
- end to end testing
|
||||||
Loading…
Reference in New Issue
Block a user