Projekt

Obecné

Profil

Policies » Historie » Verze 36

Jan Pašek, 2021-04-23 13:12

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 32 Jan Pašek
* *Feature* - Implementation of a new functionality based on requirement specification document, implementing functional tests
66 26 Jan Pašek
* *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 31 Jan Pašek
* *Implementation* - implementing new functionality, unittests
71 29 Jan Pašek
* *Testing* - implementing automated functional tests
72
73 4 Jan Pašek
h2. Code
74 5 Jan Pašek
75
h3. General
76
77 36 Jan Pašek
* Code and all comments shall be written in English.
78
* Code review is done for all code changes.
79
* Unit tests are done for all business logic parts. 
80
* 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
* Each method that raises an Exception shall declare the exception in the docstring. This declaration shall be propagated up through the call graph.
84 5 Jan Pašek
85
h3. Packages
86
87
* Package names should be all lower case
88
* When multiple words are needed, an underscore should separate them
89
* It is usually preferable to stick to 1-word names
90
91
h3. Modules
92
93
* Module names should be all lower case
94
* When multiple words are needed, an underscore should separate them
95
* It is usually preferable to stick to 1 word names
96
97
h3. Classes
98
99
* Class names should follow the UpperCaseCamelCase convention
100
* Exception classes should end in “Error”
101
102
h3. Global Variables
103
104
* Global variables should be all lowercase
105
* Words in a global variable name should be separated by an underscore
106
107
h3. Instance Variables
108
109
* Instance variable names should be all lower case
110
* Words in an instance variable name should be separated by an underscore
111 10 Jan Pašek
* Non-public instance variables should begin with a double underscore
112
* If a protected attribute is necessary to be used, the variable name shall start with a single underscore
113 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
114
115
h3. Methods
116
117
* Method names should be all lower case
118
* Words in a method name should be separated by an underscore
119
* Non-public method should begin with a single underscore
120
* If a method name needs to be mangled, two underscores may begin its name
121
122
h3. Method Arguments
123
124
* Instance methods should have their first argument named ‘self’.
125
* Class methods should have their first argument named ‘cls’
126
127
h3. Functions
128
129
* Function names should be all lower case
130
* Words in a function name should be separated by an underscore
131
132
h3. Constants
133
134
* Constant names must be fully capitalized
135
* Words in a constant name should be separated by an underscore
136 33 Jan Pašek
137
h2. Design
138
139 34 Jan Pašek
This section describes guidelines of how to treat design changes during issue implementation.
140
141 35 Jan Pašek
The design changes are always done on the branch: 
142
<pre>
143
design_update_iteration_<iteration #>
144
</pre>
145 33 Jan Pašek
146
# Evaluate if the change must be reflected in the design - helper object doesn't have to be specified in the design, only the most important classes and services must be described down to a level of the public interface.
147
# If a change must be done, take a mutex in @Design Mutex@ channel in MS Teams
148
# Do the necessary change and do a commit immediately
149
# Free the taken mutex in @Design Mutex@ channel in MS Teams. Append a short change message while freeing the mutex.