Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jurajkubelka/fogbugzanalyzer
FogBugz activity analysis support for Pharo http://fogbugz.com http://pharo.org
https://github.com/jurajkubelka/fogbugzanalyzer
analysis client fogbugz pharo pharo-smalltalk
Last synced: 6 days ago
JSON representation
FogBugz activity analysis support for Pharo http://fogbugz.com http://pharo.org
- Host: GitHub
- URL: https://github.com/jurajkubelka/fogbugzanalyzer
- Owner: JurajKubelka
- License: mit
- Created: 2017-03-06T15:45:55.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2017-03-20T17:42:33.000Z (almost 8 years ago)
- Last Synced: 2024-10-31T13:46:10.464Z (about 2 months ago)
- Topics: analysis, client, fogbugz, pharo, pharo-smalltalk
- Language: Smalltalk
- Size: 3.11 MB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# FogBugzAnalyzer
FogBugz activity analysis support for Pharo http://fogbugz.com http://pharo.org
## Installation
```
Metacello new
baseline: #FogBugzAnalyzer;
repository: 'github://JurajKubelka/FogBugzAnalyzer/src';
load.
```## Usage
```
client := FBAClient new.
client login: '[email protected]' password: 'your password'.
client openedBetween: '01-Jan-2015' asDateAndTime and: DateAndTime tomorrow.
client fixCasesOfEvents "events should keep real cases, let's fix it".
```The following figures represent data from ** January 1st 2015 to March
9 2017**. By *event* we usually refer to an action done in the issue
tracker. A *case* is a one specific entry (bug). By a *real case* we
understand a cases that is not an introduction case. An *introduction
case* is a case created automatically by the issue tracker system for
new users.The up-to-date scripts for each diagram are available in
`FBARoassalExport` class.## Results Per Day
### Number of All User Events of Real Cases Per Day
![all-events-per-day.png](assets/img/all-events-per-day.png)
```
(FBARoassalGrapher client: client)
computeEventsPerDay;
beStatic;
addLegend: 'All developer events (actions) per day';
timelineEventsPerDay.
```### Number of All Real Cases Per Day
![all-cases-interacted-per-day.png](assets/img/all-cases-interacted-per-day.png)
```
(FBARoassalGrapher client: client)
computeEventsPerDay;
beStatic;
addLegend: 'All cases interacted with per day';
timelineCasesInteractedWithPerDay.
```### Number of Active Developers Per Day
![active-developers-per-day.png](assets/img/active-developers-per-day.png)
```
(FBARoassalGrapher client: client)
computeEventsPerDay;
beStatic;
addLegend: 'Active developers per day';
timelineActiveDevelopesPerDay.
```### Number of Different Event Types Per Day
There are several events (actions) that can be done for each case
tracker, e.g., open a new case, edit an existing case, resolve (fix)
an existing case, close a case.![event-types-per-day.png](assets/img/event-types-per-day.png)
```
(FBARoassalGrapher client: client)
computeEventsPerDay;
beStatic;
addLegend: 'Number of event (action) types per day';
timelineEventActionsPerDay.
```### Number of Some Specific Events Per Day
![specific-events-per-day.png](assets/img/specific-events-per-day.png)
```
(FBARoassalGrapher client: client)
computeEventsPerDay;
beStatic;
addLegend: 'Open/Closed/Fixed/Resolved events per day';
addImportantDates;
addImportantDatesOnAxisX;
timelineDataSelector: #newTimelineDataConnectedDotShapeColored:;
addOpenedEventsPerDay;
addClosedEventsPerDay;
"addReactivatedEventsPerDay;"
"addReopenedEventsPerDay;"
addResolvedEventsPerDay;
addResolvedFixReviewNeededEventsPerDay;
"addAssignedEventsPerDay;"
"addEditedEventsPerDay;"
configureAxisXAndYForEvents;
build
```## Results Per Event (Time Interval)
The previous graphs display results for each day which we consider too
detailed. It is hard to notice any interesating behavior pattern.We thus introduce two concepts: `FBAEvent` and `FBAActivity`.
- `FBAEvent` knows starting and ending date af an event, e.g., Pharo Sprint, ESUG Conference, Pharo Release Day.
- `FBAActivity` holds a `FBAEvent` and a collection of `FogBugzEvent` objects (events).
- `FogBugzEvent` is an action triggered on a case (issue) that we already discussed above, e.g., opening, editing, resolving, closing.```
activities := client activitiesWithUserEventsOfRealCases.
```### Number of Active Developers During Each Time Interval
Here, we could all active developers during each time
interval. More longer time intervals, more active developers.![developers-per-activity.png](assets/img/developers-per-activity.png)
```
(FBARoassalActivities activities: activities)
beStatic;
addImportantDates;
addImportantDatesOnAxisX;
timelineDataSelector: #newTimelineDataConnectedDotShapeColored:;
addActiveDevelopers;
addLegend;
configureAxisXAndY: 'Number of Developers per Activity';
build.
```### Number of Events Per Developer Per Day During Each Time Interval
Here, we count number of events (action on the issue tracker) for each
developer divided by number of days of a particular time interval.We can notice more events during Pharo Sprints (green color) comparing to
normal days (grey color). Well, with lot of out-layers.We exclude the two specific days (Apr 27 and March 3), because there were many automatic
case tagging. We could exclude such events in order to visualize those
specific Pharo Sprint days.![developers-per-activity-without-2017.png](assets/img/developers-per-activity-without-2017.png)
```
(FBARoassalActivities activities: (activities
reject: [ :activity |
(activity includesDate: '2017-01-27' asDateAndTime) or: [
activity includesDate: '2017-03-03' asDateAndTime ] ]))
beStatic;
addDeveloperEventsPerActivityWithoutTimeline;
addDatesOnAxisXWithoutTimeline;
configureAxisXAndY: 'Developer Events per Activity without Apr 27 and March 3 2017';
build.
```## Introduction Cases
Introduction cases are created whenever a user sign-ups to the issue tracker.
### Number of Introduction Cases Per Day
![intro-cases-per-day.png](assets/img/intro-cases-per-day.png)
```
(FBARoassalClient client: client)
computeUserEventsOfRealCasesPerDay;
beStatic;
addLegend: 'Introduction Cases For New Sign-up Users per Day';
addImportantDates;
addImportantDatesOnAxisX;
addIntroCases;
configureAxisXAndY: 'Number of Intro Cases In One Day';
build.
```### Number of Introduction Cases During Time Interval
![intro-cases-per-activity.png](assets/img/intro-cases-per-activity.png)
```
(FBARoassalActivities activities: client activitiesWithAllEvents)
beStatic;
addImportantDates;
addImportantDatesOnAxisX;
timelineDataSelector: #newTimelineDataConnectedDotShapeColored:;
addIntroCases;
addLegend;
configureAxisXAndY: 'Number of Intro Cases During Activity';
build.
```### Number of Introduction Cases Per Day During Time Interval
![intro-cases-per-activity-mean.png](assets/img/intro-cases-per-activity-mean.png)
```
(FBARoassalActivities activities: client activitiesWithAllEvents)
beStatic;
addImportantDates;
addImportantDatesOnAxisX;
timelineDataSelector: #newTimelineDataConnectedDotShapeColored:;
addIntroCasesMeanPerDay;
configureAxisXAndY: 'Number of Introduction Cases During Activity';
addLegend;
build.
```## Blueprint
Here we display a blueprint for each Pharo Sprint and Release.
![sprint-release-blueprint.png](assets/img/sprint-release-blueprint.png)
![sprint-release-blueprint-legend.png](assets/img/sprint-release-blueprint-legend.png)
```
(FBASprintBlueprint activities: client activitiesWithUserEventsOfRealCases)
buildSuch: [ :activity | activity isSprint or: [ activity isRelease ] ].
```