Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: docs: Add high-level QA framework #9303

Draft
wants to merge 272 commits into
base: main
Choose a base branch
from
Draft

WIP: docs: Add high-level QA framework #9303

wants to merge 272 commits into from

Conversation

thanethomson
Copy link
Contributor

Closes #9020

📖 Rendered

@josef-widder and @sergio-mena, this is my first attempt at trying to codify Josef's QA framework in a way that's relevant to Tendermint.

Where I need some assistance at present is in answering the following questions and filling in some missing information:

  • Have we adequately captured all of the high-level concerns?
  • Have we captured all logical protocols that Tendermint implements?
  • Have we captured all protocol-specific concerns? (i.e. are all of the tables complete for each logical protocol?)
  • @josef-widder does the QA Log section adequately address the "correctness log" idea that you mentioned to me?

What's left to be done here before this PR can be considered "ready for review":

  • Fill out the remaining specific concerns for all high-level concerns
  • Fill out the tables indicating the level of completion for all relevant approaches for each concern
  • Fill out the tables with the level of confidence that each approach gives relative to the specific concern

PR checklist

  • Tests written/updated, or no tests needed
  • CHANGELOG_PENDING.md updated, or no changelog entry needed
  • Updated relevant documentation (docs/) and code comments, or no
    documentation updates needed

milosevic and others added 30 commits December 11, 2019 15:20
…ent_algo

# Conflicts:
#	spec/consensus/light-client.md
Move light specs to their own dir, add readme and diagram
Update specification of light client algorithm to align with the code
./light -> ./light-client
* Update the secret connection spec with the use of merlin to eliminte handshake malleability

* Update spec/p2p/peer.md

Co-Authored-By: Anton Kaliaev <anton.kalyaev@gmail.com>

* Update spec/p2p/peer.md

Co-Authored-By: Anton Kaliaev <anton.kalyaev@gmail.com>

* Update spec/p2p/peer.md

Co-Authored-By: Anton Kaliaev <anton.kalyaev@gmail.com>

Co-authored-by: Anton Kaliaev <anton.kalyaev@gmail.com>
- cmn was remvoed in favor of sub pkgs. cmn.kvpair is now kv.pair

Signed-off-by: Marko Baricevic <marbar3778@yahoo.com>
* evidence: Add time to evidence params

- this pr is grouped together with #4254, once that PR is merged then this one can be as well.

Signed-off-by: Marko Baricevic <marbar3778@yahoo.com>

* remove note

Signed-off-by: Marko Baricevic <marbar3778@yahoo.com>

* Apply suggestions from code review

Co-Authored-By: Anton Kaliaev <anton.kalyaev@gmail.com>

Co-authored-by: Anton Kaliaev <anton.kalyaev@gmail.com>
sergio-mena and others added 22 commits August 12, 2022 15:55
* Typo fix in README.md (#350)

* Updated Apalache type annotations (#395)

Co-authored-by: Prajjwol Gautam <prajjwol@gmail.com>
Co-authored-by: Kukovec <jure.kukovec@gmail.com>
This RFC lays out a proposed set of changes for consolidating the set of information that may be included in the block structure.

{{ [rendered](https://github.com/tendermint/tendermint/blob/wb/rfc-block-structure/docs/rfc/rfc-020-block-structure-consolidation.md) }}
…lity (#9263)

* update Apalache type annotations and split evidence into 3 variables

* remove the duplicate of AllPrevotes, due to merge
* Remove set option for abci
This is largely a cherry pick of #6755 with some additional fixups added where detected. 
This change moves the blockchain package to a package called blocksync. Additionally, it renames the relevant uses of the term `fastsync` to `blocksync`.

closes: #9227 

#### PR checklist

- [ ] Tests written/updated, or no tests needed
- [x] `CHANGELOG_PENDING.md` updated, or no changelog entry needed
- [x] Updated relevant documentation (`docs/`) and code comments, or no
      documentation updates needed
* [cherrypicked] abci-cli: added `PrepareProposal` command to cli (#8656)

* Prepare prosal cli

* [cherrypicked + fixes] abci-cli: Add `process_proposal` command to abci-cli (#8901)

* Add `process_proposal` command to abci-cli

* Added process proposal to the 'tutorial' examples

* Added entry in CHANGELOG_PENDING.md

* Allow empty blocks in PrepareProposal, ProcessProposal, and FinalizeBlock

* Fix minimum arguments

* Add tests for empty block

* Updated abci-cli doc

Co-authored-by: Sergio Mena <sergio@informal.systems>
Co-authored-by: Jasmina Malicevic <jasmina.dustinac@gmail.com>

* Addressed @williambanfield's comment

Co-authored-by: Jasmina Malicevic <jasmina.dustinac@gmail.com>
Co-authored-by: Hernán Vanzetto <hernan.vanzetto@gmail.com>
)

This changes the ResponsePrepareProposal type, substituting the []TxRecord for just []bytes. This change is made in the .proto file and in all necessary additional places in the code.
Signed-off-by: Thane Thomson <connect@thanethomson.com>

Signed-off-by: Thane Thomson <connect@thanethomson.com>
* Update docs references from master to main

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Update DOCS_README to reflect current reality

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Update vuepress config with current versions and updated discussions link

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Update generated docs versions

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Update docs build to use temp folder instead of home

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Document build-docs Makefile target

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Add serve-docs Makefile target to serve local build of docs

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Ensure 404 page is copied during docs build

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Redirect /master/ to /main/

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Attempt to resolve #7908

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Update OpenAPI references from master to main

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Update CHANGELOG references from master to main

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Update Docker readme references from master to main

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Update UPGRADING references from master to main

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Update package-specific documentation references from master to main

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Update spec references from master to main

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Update all code comment references to docs site from master to main

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Build v0.34.x as "latest"

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Explicitly mark v0.34 docs as latest in version selector

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Update all links from docs.tendermint.com/main to docs.tendermint.com/latest

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* ci: Redeploy docs on pushes to v0.34.x

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Temporarily copy spec directory into docs while building

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Add nav link to main and clearly mark as unstable

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Revert to only publishing docs in nav for v0.34 and v0.33 with no latest

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Link to docs.tendermint.com/v0.34 from RFCs

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Rather just use main for all docs.tendermint.com references on main branch

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Rename GitHub tree links from master to main

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Update link for ABCI Rust client

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Update github links from master to main

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Update badges in root readme

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Remove codecov badge since we do not use it any more

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Remove Java and Kotlin tutorials

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Remove specs from docs build

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Migrate spec links to GitHub repo from docs site

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Remove references to non-existent PEX reactor spec

Signed-off-by: Thane Thomson <connect@thanethomson.com>

* Fix linting badge in README

Signed-off-by: Thane Thomson <connect@thanethomson.com>

Signed-off-by: Thane Thomson <connect@thanethomson.com>
* Backport of sam/abci-responses (#9090) (#9159)

Signed-off-by: Thane Thomson <connect@thanethomson.com>
Co-authored-by: William Banfield <4561443+williambanfield@users.noreply.github.com>
Co-authored-by: Thane Thomson <connect@thanethomson.com>
Signed-off-by: Thane Thomson <connect@thanethomson.com>
Signed-off-by: Thane Thomson <connect@thanethomson.com>
Signed-off-by: Thane Thomson <connect@thanethomson.com>
Comment on lines +63 to +64
| - Grammar | | | | | | | | |
| - Parameters of API functions | | | | | | | | |
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These two are quite specific for ABCI++. I would replace them in all tables by "Implementation ensures safety and liveness as given in the specification". Or perhaps something more catchy.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have the impression that this suggestion can be merged with "Robustness" below

Comment on lines +50 to +54
| Security | | | | | | |
| Memory leaks | | | | | | |
| Storage leaks | | | | | | |
| Error handling | | | | | | |
| Serialization / deserialization | | | | | | |
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know that this view of the problem leads to an effective prioritization of methodology, or gives us particular confidence in any of these dimensions.

While I think the best approach to this would be to start from stability/operational/performance requirements and work backwards from that, I think it'd be useful to frame the components that are the highest priority (e.g. memory leaks in testnet/e2e testing, error handling in static analysis, etc.) rather than divide our time attempting to cover everything at every level.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The point is not to cover every concern with every method but to eventually figure out what is the most favorable methods for what concern.

In the beginning, let's just record what methods we are using and what concerns we believe we can address with them.

Eventually, we should also identify bottlenecks. E.g., if the only method we are using to find memory leaks are testnets (which seem super expensive), it might make sense to figure out whether a different (cheaper) methods will give us similar confidence. Such an overview allows us to identify such bottlenecks.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While I think the best approach to this would be to start from stability/operational/performance requirements and work backwards from that

This is implicit in the correctness evaluation for all of the specific protocols that Tendermint implements.

Copy link
Contributor

@sergio-mena sergio-mena left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @thanethomson for this.

| End-to-end (E2E) testing | High | Low |
| Testnet testing | High | Moderate/High |
| Protocol audits | | High |

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider adding an entry here with something like "Protocol/Interfate Specification" (setup cost high, "per-execution cost" empty). Or, if you don't consider it an "approach", this info should be somewhere in this document.

This is needed for, at least, MBT and protocol audits mentioned above. Although, theoretically, it would also be needed to be able to say is a test (at whatever level) is passing or not.

- A description of the QA effort.
- References:
- [Link 1]
- [Link 2]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add a field to this template with the outcome: "PASS, FAIL, INCONCLUSIVE".
The "INCONCLUSIVE" field is typically used when you try to run a test case (e.g. using a complex testnet script), and the test cannot be run because of problems outside the scope of the UUT.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the "outcome" idea. I am not sure whether we should give a list to choose from. For instance, if the item describes an audit, then we could say "We opened the following issues"

Comment on lines +63 to +64
| - Grammar | | | | | | | | |
| - Parameters of API functions | | | | | | | | |
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have the impression that this suggestion can be merged with "Robustness" below

- [Crash/recovery](#crash-recovery)
- [Upgrading](#upgrading)

### Correct software engineering
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Clarifying question: what is the "type" of the cells? Is it a boolean to say we're already doing it? Is it something like {"N/A", "planned", "done", "in progress", "nice to have"}?

@thanethomson thanethomson added the S:wip Work in progress (prevents stalebot from automatically closing) label Sep 2, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S:wip Work in progress (prevents stalebot from automatically closing)
Projects
Status: In Progress
Development

Successfully merging this pull request may close these issues.

docs: Capturing QA processes, results and artifacts