| #summary Guidelines for testing Melange and the SoC framework |
| #labels Contents-Draft,Phase-Guidelines |
| |
| = Mission = |
| |
| Testing is important to us as a community. The [MelangeIntro Melange] |
| community strives to produce a framework that can be used to build useful |
| and reliable web applications to host programs like |
| [GSoC Google Summer of Code]^TM^. This desire drives our placement of |
| testing as an important part of contributing to the Melange project. |
| Testing is also an important complement to |
| [ContributionReviews#Code_reviews code reviews]. |
| |
| The Melange project aspires to apply testing best-practices to the development |
| of the [SoCOverview SoC framework], always working towards goals such as |
| higher release reliability and increasing test coverage. Improving towards |
| these goals makes development methods such as |
| [http://www.martinfowler.com/articles/continuousIntegration.html continuous integration] |
| possible. To that end, contributors need to adhere to certain testing |
| guidelines. |
| |
| While we feel that software testing is very important, the Melange community |
| does not want to refuse [ContributionReviews#Patches patches] and other |
| contributions from casual developers. To that end, we promise to make |
| the tests themselves |
| [TestingGuidelines#No_nondeterministic_tests reliable] and |
| [TestingGuidelines#Smoke_tests easy to run]. We want to encourage every |
| contributor to help us enhance the quality and reliability of the SoC |
| framework and the open source and free software contribution web sites |
| that is will power. |
| |
| The SoC framework will define some test suites, including smoke tests and |
| golden tests. At this point in time, this document is mostly a TODO list, |
| but it will evolve into the project testing guidelines as these wish list |
| items are implemented. |
| |
| = Test suites = |
| |
| == Smoke tests == |
| |
| The SoC framework will include a set of "smoke tests" that are used as a |
| "first line of defense" before code contributions can be |
| [ContributionReviews#Code_reviews submitted for review by other contributors]. |
| |
| As long as the "golden tests" do not take too long to run, they will be |
| included in the smoke test suite. Once the smoke test suite becomes too |
| large, the more esoteric tests will be migrated to the golden test suite. |
| |
| === Running the smoke tests === |
| |
| Instructions for building and running the smoke test suite will be added here. |
| |
| == Golden Tests == |
| |
| The golden test suite are a proper superset of the shorter-to-build-and-run |
| [TestingGuidelines#Smoke_tests smoke test suite] used as a precondtion for |
| patch code reviews (that is, all of the "smoke tests" are included in the |
| "golden tests" by definition). |
| |
| For some time, the smoke test suite and the golden test suite are likely to |
| identical. See the note in the |
| [TestingGuidelines#Smoke_tests smoke tests section]. |
| |
| === Running the golden tests === |
| |
| Instructions for building and running the golden test suite will be added here. |
| |
| = Policies = |
| |
| == Nontrivial changes need tests == |
| |
| Any non-trivial change requires an accompanying test, in the same patch as |
| the proposed change. These guidelines need to be followed: |
| |
| * There should be always be a test whenever adding new behavior or changing existing behavior in any way (and the test code should be in the same [ContributionReviews#Patches patch] as the code change). |
| * Refactorings do not require new tests, so long as the code being refactored is already covered by tests (and those tests pass after the refactoring). Refactorings should make no non-trivial changes to tests, since the tests are instrumental in validating that the refactoring did not break anything. |
| * Emergency patches (perhaps quick fixes by the release packager) do not require tests immediately, but a test should be included in a new patch accompanying the follow-up [ContributionReviews#Patches code review]. |
| * You need to add tests if changing a section of code that does not currently have them. |
| |
| == All changes should pass smoke tests before review == |
| |
| All patches should pass the [TestingGuidelines#Smoke_tests smoke test suite] |
| before being submitted for review. So as not to waste other contributors' |
| time, please insure that the smoke tests pass before requesting a code |
| review of a patch, and after any `svn update` or `svn merge` that might |
| change the code being |
| [ContributionReviews#Branches reviewed in a development branch]. |
| |
| == Never reduce existing code coverage == |
| |
| Please make a habit of |
| [TestingGuidelines#Code_test_coverage collecting code coverage information] |
| to determine if the new lines of code in a patch have test coverage |
| (though keep in mind that code coverage alone is not sufficient). Code |
| reviewers and "lurkers" on the |
| [MailingListsGuidelines#Developer_list developer mailing list] |
| should actively ask for tests to be included in each patch, in adherence |
| with the guidelines listed above. |
| |
| == No official release if tests are failing == |
| |
| The SoC framework will not be officially released if the continuous build |
| indicates that any of the |
| [TestingGuidelines#Golden_tests "golden tests"] are failing. (Before a |
| continuous build is up and running, this will be checked manually by having |
| the release packager run the test suites explicitly.) |
| |
| == No nondeterministic tests == |
| |
| Please do not allow any non-deterministic tests to be added to the test |
| suites, and please fix any tests that are detected to be non-deterministic |
| by using mocks. Non-deterministic tests are considered second priority only |
| to actual test failures. This is because official releases are gated by |
| passing the [TestingGuidelines#Golden_tests golden test suite], so that |
| suite needs to be trustworthy. Eventually, official releases will be based |
| on a green-light build from the continuous build. A test that later fails |
| represents a scenario that can also be a failure in in the release itself. |
| |
| = User Acceptance Testing = |
| |
| Instructions for pre-release building and running of the sample Program |
| web applications and testing them manually (or with a tool like |
| [http://selenium.openqa.org/ Selenium]) for |
| [http://en.wikipedia.org/wiki/Acceptance_testing User Acceptance Testing (or UAT)] |
| will be added here. |
| |
| = Testing tools = |
| |
| == Continuous build == |
| |
| A medium-term goal is the ability to continuously build and test the `HEAD` |
| revision in `/trunk/` automatically. Tools exist for setting up continuous |
| build and test processes and monitoring those processes. At some point, |
| these will be deployed for the Melange project. |
| |
| == Code test coverage == |
| |
| A long-term goal is the ability to acquire automated test coverage. Tools |
| exist for measuring test coverage of Python code. At some point, these will |
| be incorporated into a Melange continous build. |
| |
| ---- |
| _Copyright 2008 Google Inc._ |
| _This work is licensed under a_ |
| [http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-attribution-2_5.html Creative Commons Attribution 2.5 License]. |
| [http://creativecommons.org/licenses/by/2.5/ http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-2_5-88x31.png] |