MSTRD Algorithm To prioritize Bugs — 2020

Sam Shamsan
10 min readFeb 16, 2020

--

Resources are limited, bugs keep piling and time need to managed efficiently to address the most important bugs. QA engineers should be able to identify what should be tackled next and categorize the bugs according to their urgency. This is one of the most complicated process to achieve sense you need to have a good knowledge for the business logic, product features, developers availability sheet and many more aspects.

In this algorithm i tried to come up with automatic process to determine the level of urgency of certain bug, considering all critical factors that influence the decision and use a mathematical equation to assign a proper weight to every factor.

The algorithm had help me initiate bug priority that i use as a basic knowledge, a further modifications are needed to achieve a higher accuracy level of prioritization. I incorporate 5 parameters in this algorithm as follow:

1- Main Flow: This parameter will measure whether the bug occurs in major flow or in a side flow, it required the QA engineer to be able to identify the main skeleton flows that meet the core requirement of the software product.

It take a Boolean value (0 if the bug in a side flow–1 in a Main flow).

2- Bug type: The type of defect is essential factor to assign the bug to specific priority level, you can’t treat all type of different bugs the same way. The algorithm introduce four type of bugs, functional that include any related to functionality in the software, Visual which include bugs related to the layout and how thing should be displayed, performance that focus on how efficient is the software under pressure considering memory and CPU management and finally, Content bugs that occurs on the content level.

The algorithm will take integer values from 1 to 4 representing the type of bug as follow: [4 — functional , 3 —visual, 2 — performance, 4 — content]

3- Resources: This parameter will require an insight of a general ideas on developer work load, if the developers are overwhelmed with work load or if they are at the end of development cycle and have a lot of time in their hands, both cases need to be consider as a factor on your prioritization process.

The algorithm define three level of being busy (High, Medium and Low), that reflect busy and kind of busy and not that busy respectively. The given weight for this parameter is not as high as the rest it range from 0.56 (Busy)to 1.0 (Not that busy)

5- Dependency level: Catching a bug in the root level of the application doe not have the same weight as having a bug at the leave level, Most of the root bugs will cause the collapse of the whole system, When your website main page crush is not the same when one the sub flow pages collapse, the whole website is depending on that page. So the algorithm consider this parameter and divide it into 3 levels of dependency as follow:

  • High Dependency: When other part of the system depend on another part that contain bug the algorithm take an integer value of 3.
  • Medium Dependency: The part with bug has some other part depend on it but not as much or the dependable part are not part of a major flow. in this case the algorithm expect an integer value of 2.
  • Low Dependency: or no dependency at all, you can assign this parameter to 1 in this case.

4– Scoop: Every sprint of the software development has a scoop that help the team narrow their effort to one specific area of the software, if the bug appears outside the current scoop of the team, it should not be prioritize with the same value, The algorithm consider the factor, however it has less weight than the rest of the factors, it range from 0.85 (Not in the scoop)to 1.0 (In the scoop).

Equation:

MSRDT Algorithm take all factors and send them this the following mathematical equation to evaluate.

f(n) = (4M +D+ (S*T))*R/2

Where M is the main flow, D refer to Dependency level, S refer to the Scoop pointer, T as the Type of Bug and R refer the Resources or developer availability.

Python code:

Here is the code, Hopefully it would help you create methodological category so you can enhance and modify, If you find more efficient way to optimize the result please comment below and lets have fun with it :)

Results:

(‘In Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Low dependency’, ‘Content’)
3.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Medium dependency’, ‘Content’)
3.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘High dependency’, ‘Content’)
2.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘High dependency’, ‘Functional’)
3.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Medium dependency’, ‘Functional’)
4.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Medium dependency’, ‘Content’)
1.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Low dependency’, ‘Functional’)
3.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Low dependency’, ‘Functional’)
2.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘High dependency’, ‘Content’)
3.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘High dependency’, ‘Content’)
1.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘High dependency’, ‘Functional’)
4.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Low dependency’, ‘Content’)
2.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Low dependency’, ‘Content’)
3.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Medium dependency’, ‘Content’)
1.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘High dependency’, ‘Content’)
1.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Low dependency’, ‘Content’)
2.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Low dependency’, ‘Functional’)
2.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Medium dependency’, ‘Functional’)
2.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Low dependency’, ‘Functional’)
3.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘High dependency’, ‘Content’)
3.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘High dependency’, ‘Content’)
2.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘High dependency’, ‘Content’)
1.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Low dependency’, ‘Content’)
1.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Medium dependency’, ‘Functional’)
3.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘High dependency’, ‘Functional’)
4.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Medium dependency’, ‘Content’)
3.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Low dependency’, ‘Functional’)
4.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘High dependency’, ‘Content’)
2.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘High dependency’, ‘Content’)
1.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Medium dependency’, ‘Content’)
1.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘High dependency’, ‘Functional’)
3.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Low dependency’, ‘Content’)
1.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Low dependency’, ‘Content’)
1.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Medium dependency’, ‘Functional’)
4.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Medium dependency’, ‘Functional’)
3.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Medium dependency’, ‘Content’)
1.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Medium dependency’, ‘Functional’)
3.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Low dependency’, ‘Content’)
1.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Medium dependency’, ‘Content’)
1.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Low dependency’, ‘Content’)
1.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘High dependency’, ‘Functional’)
2.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Low dependency’, ‘Functional’)
4.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Medium dependency’, ‘Functional’)
2.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Low dependency’, ‘Functional’)
3.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Low dependency’, ‘Content’)
1.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Medium dependency’, ‘Functional’)
2.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Medium dependency’, ‘Functional’)
3.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Low dependency’, ‘Functional’)
4.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Medium dependency’, ‘Functional’)
3.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘High dependency’, ‘Content’)
2.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘High dependency’, ‘Functional’)
3.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘High dependency’, ‘Content’)
2.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘High dependency’, ‘Functional’)
2.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Medium dependency’, ‘Functional’)
3.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘High dependency’, ‘Content’)
2.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘High dependency’, ‘Functional’)
3.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘High dependency’, ‘Functional’)
3.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Low dependency’, ‘Functional’)
2.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Low dependency’, ‘Content’)
3.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Medium dependency’, ‘Functional’)
2.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Low dependency’, ‘Functional’)
2.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Low dependency’, ‘Content’)
2.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘High dependency’, ‘Content’)
3.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Low dependency’, ‘Content’)
1.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘High dependency’, ‘Content’)
4.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Low dependency’, ‘Content’)
2.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Low dependency’, ‘Content’)
1.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘High dependency’, ‘Content’)
2.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Low dependency’, ‘Content’)
3.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Medium dependency’, ‘Content’)
3.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Low dependency’, ‘Content’)
2.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Medium dependency’, ‘Functional’)
3.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘High dependency’, ‘Content’)
2.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Low dependency’, ‘Content’)
3.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘High dependency’, ‘Functional’)
3.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘High dependency’, ‘Functional’)
5.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Medium dependency’, ‘Functional’)
2.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Medium dependency’, ‘Content’)
1.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Low dependency’, ‘Functional’)
2.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘High dependency’, ‘Functional’)
4.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Low dependency’, ‘Content’)
1.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘High dependency’, ‘Content’)
3.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘High dependency’, ‘Content’)
3.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘High dependency’, ‘Content’)
3.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘High dependency’, ‘Functional’)
3.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Medium dependency’, ‘Content’)
3.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Medium dependency’, ‘Functional’)
4.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Medium dependency’, ‘Content’)
3.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Medium dependency’, ‘Functional’)
2.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Medium dependency’, ‘Functional’)
4.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘High dependency’, ‘Content’)
4.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Medium dependency’, ‘Content’)
1.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Medium dependency’, ‘Functional’)
4.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Medium dependency’, ‘Content’)
1.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Low dependency’, ‘Functional’)
2.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘Low dependency’, ‘Functional’)
3.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Medium dependency’, ‘Functional’)
3.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘High dependency’, ‘Content’)
3.0
(‘Not in Major Flow’, ‘Not in the scoop’, ‘Developers kind of busy’, ‘Low dependency’, ‘Content’)
1.0
(‘In Major Flow’, ‘Not in the scoop’, ‘Developers are busy’, ‘High dependency’, ‘Content’)
3.0

If you work the Right to left design or languages, or you know someone who do, then buying my book will be great way to gain RTL end to end knowledge and support me to keep writing book at the same time.

https://www.amazon.com/RTL-Foundations-Sam-Shamsan/dp/1656300087

--

--

No responses yet