- Industry averages, metrics, predictive models. Usually it is 30% of development work, but this is the most tricky estimates, for example developers changed store procedure this is approximately 5-8hrs of work for developer, so QA will be 1.5-2.5hrs. For QA this could mean to do full regression of application because this store procedure is using across application.
- Tester-developer ratio. This technique usually based on organization history. For example 4 developers generate work for 1 QA engineers, so QA time will be 0.25 of full development work.
- Experience (intuition, guess) based estimate.
- Team estimation sessions. Estimates can be more accurate estimates when dev lead and BA participate in estimation sessions, more details can be provided and took into account.
- Test case based technique. This estimates can be used only when test cases created, or you can guess how many test cases you will create.
- Bottom-up approach of estimates. Work is breaking down on tasks, each task can be estimated individually and sum of tasks will be overall project estimates.
Sunday, August 14, 2016
QA: Estimation Techniques
There is bunch of techniques which can be used to estimate QA work.
Saturday, December 5, 2015
StyleCop integration for .NET projects
Why it is important?
Coding conventions serve the following purposes:
- They create a consistent look to the code, so that readers can focus on content, not layout.
- They enable readers to understand the code more quickly by making assumptions based on previous experience.
- They facilitate copying, changing, and maintaining the code.
- They demonstrate C# best practices.
Code style recommendations
As the reference for your coding conventions, please use Microsoft guidelines (https://msdn.microsoft.com/en-us/library/ff926074.aspx). If they will conflict with this document, please use rules from the document.
Naming convention
Entity | Pattern |
---|---|
Types and namespaces | UpperCamelCase |
Interfaces | IUpperCamelCase |
Type parameters | TUpperCamelCase |
Methods, properties and events | UpperCamelCase |
Local variables | lowerCamelCase |
Local constants | lowerCamelCase |
Parameters | lowerCamelCase |
Fields (not private) | UpperCamelCase |
Instance fields (private) | _lowerCamelCase |
Static fields (private) | _lowerCamelCase |
Constants fields (not private) | UpperCamelCase |
Constants fields (private) | UpperCamelCase |
Static read-only (not private) | UpperCamelCase |
Static read-only (private) | UpperCamelCase |
Enum members | UpperCamelCase |
All other entities | UpperCamelCase |
Try to give names for entities without any abbreviations. Name should describe entity’s purposes.
Using statement
1. Please put “using statement” outside of namespace.
using System;
using System.Text;
using System.Web.Mvc;
namespace SampleProject.Controllers
{
}
2. System usings should be placed first, then all others3. Usings should be sorted alphabetically.
Return statement
1. Please separate return statement from other code with single empty line.
public ActionResult DashBoard()
{
DoSomething();
return View();
}
Curved brackets
1. Curved brackets should be places for “foreach”, “if”, “for”, “while”, etc. all the time.
if (someVal)
{
DoSomething();
}
How to implement rules if you are at the beginning of the project?
We assume that all team members should follow the code guidelines without any exceptions. So, know we have to think how we can achieve that statement. In general, all the cases will lead you to the following two cases.
- Rely on people
- Rely on tools
What does it mean to “Rely on people”? By this phrase, we assume that all team members will be responsible for following code style rules. There are some procs and cons of this approach. Although it is easy to start using it, there are some disadvantages of such approach. Among them – additional time for code style review and non-strict control of following the rules by all team members.
In such situation, tools can help the team to follow code style guidelines. Therefore, in this article, we will look at StyleCop tool (https://stylecop.codeplex.com/).
StyleCop
Installation
To install StyleCop on your machine you need to download installer from the https://stylecop.codeplex.com/ and run. Alternatively, you can open “Extensions and Updates” window in Visual Studio and install any appropriate extension, e.g. “Visual StyleCop”.
Create settings file
To create StyleCop settings file just right click on project and select “StyleCop settings”.
Select rules you want to follow and click “Apply”. After that, Settings.StyleCop file will appear in project folder.To download settings file click on following link Settings.StyleCop.
Enable StyleCop on build
1. Open NuGet Package Manager for project you would like to validate.
3. Create file with rules, which are acceptable for your team.
4. Import that file to the project.
Just described behavior is kind of soft behavior, because code compiled and application would work. To fix such situation you can do following things:
After implementation all the steps above, you can be sure that everyone will follow the code style rules.
How to start using styling rules if you already have “billion” files?
It is no secret that majority projects does not have styling standards and we have to live with it. Let’s think how we can improve such situation.
Assumptions:
- At the begging do not allow to fail build on style settings validation
- After some period build should fail on code styling issue
I would like to recommend following steps to rewrite all code according style standard:
- Create styling rules for your project and introduce Settings.StyleCop with them
- Install on each developer’s machine StyleCop or another appropriate tool
- Create milestones with percentage of cleaned files
- Ask developers to change code according style rules in files, which they working on during current iteration
- Allocate time for code style fixes as technical debt
- Track progress
- Start failing build on style issues
Approximate roadmap for code style changes
Step 1
The step's approximate time frame is 0 - 6 week. During step 1 team concentrates on following:
- All team members have installed StyleCop tool on their machines
- While working on some area teammates do code style refactoring
- While code review first step to run StyleCop against created rules
- Team will concentrate on “main” libraries
- Team will allocate time for style fixes as part of technical debt stories
Step 2
The step's approximate time frame is 6 - 12 week. During step 2 team concentrates on following:
- We will enable code style checks on build. “StyleCop.MSBuild” package will be installed to libraries we would like to validate
- Code style warnings will appear
- Steps 1, 2, 3, 5 from first row
- Libraries coverage increased
- We will track number of style warnings
Step 3
The step's approximate time frame is from 12 week. During step 3 team concentrates on following:
- Warnings replaced with build failures. By this moment, we assume that all files will have appropriate style.
- In project’s properties change “Treat warning as errors” property
- Install “StyleCop.Error.MSBuild” NuGet package
- Deprecate style review on code review sessions
FAQ
How to apply settings for solution?
It is easy when you have only one file with rules and all projects in solution have reference to that file. StyleCop allow us to do that. Put file with rules in the root folder of the project. Then add to each projects’ folder Settings.StyleCop file with following lines.
<StyleCopSettings Version="105">
<GlobalSettings>
<StringProperty Name="LinkedSettingsFile">..\Settings.StyleCop</StringProperty>
<StringProperty Name="MergeSettingsFiles">Linked</StringProperty>
</GlobalSettings>
</StyleCopSettings>
LinkedSettingsFile – path to the main settings file.
How can I extend existing rules?
First, you can try to find some already written rule extensions. E.g. StyleCop+ (StyleCop+ is a plug-in that extends original StyleCop features. It offers you a variety of rules for building C# code style that best suits your needs.) (https://stylecopplus.codeplex.com/)
Second, you can write your own rule.
Saturday, October 25, 2014
Интеграция OpenCover в .NET проект.
Что такое OpenCover?
OpenCover - это инструмент с открытым кодом, который показывает разработчикам .NET приложений на сколько существующий исходный код покрыт unit-тестами. Ссылка на официальный сайт - https://github.com/sawilde/opencover.
Интеграция OpenCover
Для того, чтобы интегрировать OpenCover в проек, для начала необходимо установить:
- NUnit.Runners
- OpenCover
- ReportGenerator
Данную процедуру можно сделать при помощь Library Package Manager (NuGet). Сперва необходимо добавить поддержку востановления NuGet-packages для .sln-файла проекта.
Далее переходим в панель управление NuGet-packages.
В поле для поиска вводим поочередно название NuGet-package и устанавливаем его. В итоге в .nuget папке должен появиться файл packages.config с содержимым:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="NUnit.Runners" version="2.6.3" />
<package id="OpenCover" version="4.5.3207" />
<package id="ReportGenerator" version="2.0.0.0" />
</packages>
<packages>
<package id="NUnit.Runners" version="2.6.3" />
<package id="OpenCover" version="4.5.3207" />
<package id="ReportGenerator" version="2.0.0.0" />
</packages>
Файл packages.config не появляется в файле проекта после добавления указанных выше NuGet-packages, поэтому можно добавить его руками.
Тестовой проект, в который мы интегорируем OpenCover, имеет следующую структуру:
Компилируем приложение OpenCoverSample.CoverageReportGenerator и запускаем. В результате получаем coverage-отчет:
Тестовой проект, в который мы интегорируем OpenCover, имеет следующую структуру:
Так как OpenCover не может сгенерировать coverage-отчет без unit-test runner, необходимо создать .bat файл, который выполнит все наши тесты (RunTests.bat). Содержимое RunTests.bat:
..\..\..\..\packages\NUnit.Runners.2.6.3\tools\nunit-console.exe OpenCoverSample.Core.UnitTests.dll /noshadow
После того, как мы научились выполнять unit-тесты, мы можем построить coverage-отчет. Для этого создадим RunOpenCover.bat файл со следующим содержимым:
..\..\..\..\packages\OpenCover.4.5.3207\OpenCover.Console.exe -target:RunTests.bat -register:user -filter:"+[OpenCoverSample*]* -[OpenCoverSample.Core.UnitTests]*"
..\..\..\..\packages\ReportGenerator.2.0.0.0\reportgenerator.exe -reports:results.xml -targetdir:coverag
.\coverag\index.htm
Так как мы не хотим, чтобы в coverage-отчет входили сборки с unit-тестами, мы добавили фильт, который будет игнорировать их.
Для файлов RunOpenCover.bat и RunTests.bat атрибуту Copy to Output Directory ставим значение "Copy always".
Далее добавим ссылку на проект с unit-тестами в проект OpenCoverSample .CoverageReportGenerator.
В OpenCoverSample.CoverageReportGenerator Program.cs добавляем код, который будет генерировать отчет:
namespace OpenCoverSample.CoverageReportGenerator
{
class Program
{
static void Main(string[] args)
{
var process = new System.Diagnostics.Process();
var startInfo = new System.Diagnostics.ProcessStartInfo
{
WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden,
FileName = "RunOpenCover.bat",
RedirectStandardOutput = true,
UseShellExecute = false
};
process.StartInfo = startInfo;
process.OutputDataReceived += (sender, a) => Console.WriteLine(a.Data);
process.Start();
process.BeginOutputReadLine();
process.WaitForExit();
}
}
}
Файл с тестовым проектом, можно скачать по ссылке OpenCoverSample.zip
Wednesday, September 10, 2014
Использование StyleCop
Начало
Многие программисты за свою карьеру успели поработать на проектах, которые разрабатываются не один год. И все представляют какие страшные вещи можно найти в проекте, процесс написания которого был плохо поставлен.Все началось, что к нам на проект, очень похожий на вышеупомянутые, пришел Женя. Он уже работал со StyleCop, поэтому идея интеграции StyleCop в проект принадлежала ему.
Шаги для интеграции
1) Мы начали с того, что разработали руководство по написанию кода, в которое попытались включить лучшие практики, которые существуют в мире разработки .NET приложений. За основу были взяты C# Coding Conventions (C# Programming Guide), немного доработаны в связи со спецификой нашего проекта и утверждены большими дядями типа Principal Solution Developer =).2) Установка и использование StyleCop. Скачать и установить StyleCop можно пройдя по ссылке http://stylecop.codeplex.com/
Установка завершилась успешно, теперь можно открыть Visual Studio и попробовать поработать со StyleCop. Для начала нам необходимо создать файл с настройками, по которым будет проходить валидация существующего кода. Выбираем "StyleCop Settings" нажав правой кнопкой по проекту.
После того, как мы выбрали "StyleCop Settings" перед нами появится окно, в котором можно будет выбрать правила, которые подходят для нашего проекта.
После того, как правила были выбраны, можно запусить StyleCop и проверить, удовлетворяет ли проект, выбранным правилам. Для этого необходимо выбрать файлы, которые вы желаете провалидировать и запустить StyleCop.
3) Более продвинутая настройка StyleCop в соответсвии с правилами написания кода, принятых на нашем проекте.
Нам повезло, потому что нам не пришлось добавлять правила, которых не было в "коробке", поэтому для того, чтобы StyleCop валидация для нашего проекта проходила в соответсвии с нашими договоренностями по форматированию кода, мы удалили некоторые правила из стандартного набора. Файл с нашими настройками, можно скачать по ссылке Settings.StyleCop.
Для того, чтобы применить данный файл к проекту, необходимо скопировать его в директорию, в которой находится файл проекта (*.sln)
Если ваш проект состоит из нескольких сборок и вы хотите, чтобы у вас был один файл со StyleCop настройками, в папку с проектом необходимо добавить файл Child Project Settings. В данном файле нужно указать путь к "Settings.StyleCop" файлу, который вы добавили в корень проекта.
Если случилось так, что набор предустановленных правил для вас не работает, StyleCop имеет возможность расширить набор правил. Узнать как это сделать можно по пройдя по ссылке: http://scottwhite.blogspot.com/2008/11/creating-custom-stylecop-rules-in-c.html
4) Как заставить программистов следовать правилам
StyleCop предоставляет возможность генерировать "Warning" или "Error" в случае, если код не соответсвует правилам. Мы долго спорили на тему, что же все таки лучше для нашего проекта и пришли к выводу, что "Warning" это хорошо, но данный подход не работает в большинстве случаев. Да и свалившийся билд подстегивает писать код красиво =).
Для того, чтобы интегрировать StyleCop в процесс сборки проекта необходимо:
- Установить StyleCop.MSBuild. Данную операцию можно проделать через "Manage Nuget Pacakges" в Visual Studio.
- Добавить в файл проекта (*.csproj) свойство <StyleCopTreatErrorsAsWarnings>false</StyleCopTreatErrorsAsWarnings>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
...
<AssemblyName>SampleProject</AssemblyName>
<StyleCopTreatErrorsAsWarnings>false</StyleCopTreatErrorsAsWarnings>
</PropertyGroup>
Валидация существующих файлов
В нашем проекте было около 10 тысяч файлов, которые не удовлетворяли разработанным нами правилам. Приведение всех файлов к определенному формату могло занять кучу времени не только программистов, но и тестировщиков. Поэтому нам была необходима возможность постепенного изменения существующих файлов.
StyleCop предоставляет такую возможность. Более подробно можно прочитать в документации Using StyleCop on Legacy Projects. Для того, чтобы игнорировать валидацию для конкретного файла необходимо нажать правой кнопкой мыши по файлу и выбрать в меню "Exclude From StyleCop".
К сожаление данное решение работает только для выбранный файлов и является крайне неудобным, если в проекте их много.
Именно для такой ситуации команда StyleCop предоставляет небольшое приложение, которое может обновить файлы из указанного проекта. Скачать данное приложение можно по ссылке ExcludeFromStyleCop.
Заключение
StyleCop отличное средство для того, чтобы привести стиль написания исходного кода в порядок. На мой взгляд данное средство должно интегрироваться в проект со старта. Потом будет сложнее все поправить.
Wednesday, August 6, 2014
Правила настройки системы контроля доступа к исходному коду программы.
В проектах, над которыми работает большое количество людей, важно огранизовать работу таким образом, чтобы разработчики следовали определенному процессу в работе над исходным кодом.
Данное соответсвие может достигаться несколькими способами:
Рассмотрим, второй способ, который на мой взляг является наиболее действенным в реальной жизни. Выделим правила, которым необходимо сделовать при настройке системы контроля доступа к исходным кодам.
Данное соответсвие может достигаться несколькими способами:
- Огранизационный. (Разработчики договариваются между собой, что они будут следовать определенному процессу)
- Технический. (Для системы контроля версий вводятся правила, которые не позволяют добавить код в систему, пока разработчик не выполнит все атрибуты процесса)
Рассмотрим, второй способ, который на мой взляг является наиболее действенным в реальной жизни. Выделим правила, которым необходимо сделовать при настройке системы контроля доступа к исходным кодам.
- Не разрешать добавлять код, разработчик не указал комментарий к изменению. Комментарий должен быть понятным и отражать проделанную работу. Технически выполнить данное требование можно путем создания правила, которое будет запрещать добавлять код с пустым комментарием или с комментарием содержащим менее 5 слов.
- Добавление исходного кода должно быть привязано к задаче из списка задач для выполнения. К примеру это можно огранизовать в следующем виде:
- Создать определенный формат: Feature #(XXX): //Comment; Bug #(XXX): //Comment; etc;
- Создавать ссылки на исходный код в системе контроля дефектов/задач.
Subscribe to:
Posts (Atom)