Projekt

Obecné

Profil

Policies » Historie » Verze 33

Jan Pašek, 2021-04-03 14:23

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
* 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
135 33 Jan Pašek
136
h2. Design
137
138
This section describes guidelines of how to treat design changes in during issue implementation
139
140
# 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.
141
# If a change must be done, take a mutex in @Design Mutex@ channel in MS Teams
142
# Do the necessary change and do a commit immediately
143
# Free the taken mutex in @Design Mutex@ channel in MS Teams. Append a short change message while freeing the mutex.