Policies » Historie » Verze 30
Jan Pašek, 2021-03-31 16:27
1 | 27 | Jan Pašek | h1. Project guidelines |
---|---|---|---|
2 | 1 | Jan Pašek | |
3 | h2. Git |
||
4 | 6 | Jan Pašek | |
5 | 13 | Jan Pašek | *Commits* |
6 | |||
7 | 12 | Jan Pašek | Commit message shall have the following format: |
8 | <pre> |
||
9 | 24 | Jan Pašek | Re #<id> - <short description> <details> |
10 | 12 | Jan Pašek | </pre> |
11 | |||
12 | * *id* issue ID from the Redmine |
||
13 | * *short description* brief description of the change |
||
14 | * *details* detailed list of changes (added classes, changed interfaces, ...) |
||
15 | 13 | Jan Pašek | |
16 | Each commit shall have a reasonable size to make the reviews as simple as possible. |
||
17 | |||
18 | *Branches* |
||
19 | |||
20 | 20 | Jan Pašek | The name of the branch shall follow the following format: |
21 | |||
22 | <pre> |
||
23 | 28 | Jan Pašek | <id>_<description> |
24 | 20 | Jan Pašek | </pre> |
25 | |||
26 | 21 | Jan Pašek | * *id* RedMine issue ID |
27 | * *description* short description of the change based issue name - without special characters, words separated by underscores |
||
28 | 20 | Jan Pašek | |
29 | # For each issue, a new branch shall be created. |
||
30 | 13 | Jan Pašek | # When the work on a branch is finished by the *issue owner*, the work is posted for a code review. |
31 | # After that, the code can be merged to master by the *reviewer*. |
||
32 | # After the merge, the *reviewer* is responsible for verifying software integrity. |
||
33 | 14 | Jan Pašek | # _In case the integrity of the software is seriously broken, the task can be returned to the *issue owner*._ |
34 | |||
35 | *Code review* |
||
36 | |||
37 | * Reviewer walks through the code and checks the coding convention, code readability, stability, etc... |
||
38 | * Reviewer is responsible for basic functionality testing |
||
39 | 17 | Jan Pašek | * Code review is tracked in GitLab via merge request |
40 | 11 | Jan Pašek | |
41 | 1 | Jan Pašek | h2. RedMine |
42 | 2 | Jan Pašek | |
43 | 16 | Jan Pašek | * Everyone can create an issue |
44 | 25 | Jan Pašek | * New issues must have the following fields filled in: Type, Title, Description, State = New |
45 | 19 | Jan Pašek | * Optionally one can set parent issue or watchers |
46 | * One has to update the spent time periodically |
||
47 | |||
48 | +Description:+ |
||
49 | * Administrative: What has to be done, possible Wiki page references, what are the work products (where to store them - eg. in DMS), what shall the work products contain |
||
50 | * Functional: Description of the change, possible references to the requirement |
||
51 | |||
52 | 22 | Jan Pašek | h3. Issue life cycle |
53 | 1 | Jan Pašek | |
54 | 23 | Jan Pašek | * When the issue is created it starts in the state @New@ |
55 | * During iteration planning the issue effort is estimated with the team, iteration reference is set and the issue is set to state @Accepted@ |
||
56 | * After effort planning is done for all issue, the issue is assigned to a team member and the issue moves to @Assigned@ |
||
57 | * After the assignee finishes his work, the issue is moved to @Resolved@ |
||
58 | * When work products are checked/reviewed, the issue is moved to @Verified@ |
||
59 | * During retrospective the issues are evaluated and moved to @Closed@ |
||
60 | 16 | Jan Pašek | |
61 | 26 | Jan Pašek | h3. Issue types |
62 | |||
63 | * *Bug* - fix of software error found during testing or review |
||
64 | * *Enhancement* - Improvement (that is not specified in requirement specification) of an already implemented feature based on feedback from the customer or a team. |
||
65 | * *Feature* - Implementation of a new functionality based on requirement specification document. |
||
66 | * *Task* - Any non-implementation/administrative task such as administrative or analysis. |
||
67 | |||
68 | 29 | Jan Pašek | h3. Issue category (relevant for @Feature@ only) |
69 | 30 | Jan Pašek | |
70 | 29 | Jan Pašek | * *Implementation* - implementing new functionality, unittest |
71 | * *Testing* - implementing automated functional tests |
||
72 | |||
73 | 4 | Jan Pašek | h2. Code |
74 | 5 | Jan Pašek | |
75 | h3. General |
||
76 | |||
77 | * Code and all comments shall be written in English |
||
78 | 9 | Jan Pašek | * Code review is done for all code changes |
79 | * Unit tests are done for all business logic parts |
||
80 | 5 | Jan Pašek | * Python docstrings (bellow function header) shall be created for all functions describing the purpose, inputs and outputs |
81 | * Avoid using names that are too general or too wordy. Strike a good balance between the two |
||
82 | * When using CamelCase names, capitalize all letters of an abbreviation (e.g. HTTPServer) |
||
83 | |||
84 | h3. Packages |
||
85 | |||
86 | * Package names should be all lower case |
||
87 | * When multiple words are needed, an underscore should separate them |
||
88 | * It is usually preferable to stick to 1-word names |
||
89 | |||
90 | h3. Modules |
||
91 | |||
92 | * Module names should be all lower case |
||
93 | * When multiple words are needed, an underscore should separate them |
||
94 | * It is usually preferable to stick to 1 word names |
||
95 | |||
96 | h3. Classes |
||
97 | |||
98 | * Class names should follow the UpperCaseCamelCase convention |
||
99 | * Exception classes should end in “Error” |
||
100 | |||
101 | h3. Global Variables |
||
102 | |||
103 | * Global variables should be all lowercase |
||
104 | * Words in a global variable name should be separated by an underscore |
||
105 | |||
106 | h3. Instance Variables |
||
107 | |||
108 | * Instance variable names should be all lower case |
||
109 | * Words in an instance variable name should be separated by an underscore |
||
110 | 10 | Jan Pašek | * Non-public instance variables should begin with a double underscore |
111 | * If a protected attribute is necessary to be used, the variable name shall start with a single underscore |
||
112 | 5 | Jan Pašek | * If an instance name needs to be mangled (interpreter rewrites the name in order to avoid name conflicts in subclasses), two underscores may begin its name |
113 | |||
114 | h3. Methods |
||
115 | |||
116 | * Method names should be all lower case |
||
117 | * Words in a method name should be separated by an underscore |
||
118 | * Non-public method should begin with a single underscore |
||
119 | * If a method name needs to be mangled, two underscores may begin its name |
||
120 | |||
121 | h3. Method Arguments |
||
122 | |||
123 | * Instance methods should have their first argument named ‘self’. |
||
124 | * Class methods should have their first argument named ‘cls’ |
||
125 | |||
126 | h3. Functions |
||
127 | |||
128 | * Function names should be all lower case |
||
129 | * Words in a function name should be separated by an underscore |
||
130 | |||
131 | h3. Constants |
||
132 | |||
133 | * Constant names must be fully capitalized |
||
134 | * Words in a constant name should be separated by an underscore |