53
Уменьшение влияния человеческого фактора при разработке бизнес- приложений (на примере CustIS Universal) Алексеев Алексей alekseev.aleksei@gm ail.com [email protected] Николай Гребнев [email protected] [email protected]

Уменьшение влияния человеческого фактора при разработке бизнес приложений

Embed Size (px)

DESCRIPTION

В этом докладе мы постараемся рассказать о принципах разработки инструментов для написания бизнес-логики, позволяющих сократить количество ошибок. Речь пойдет о нескольких практиках, принятых в отделе технологического развития нашей компании. Принципы будут проиллюстрированы на примере инструментария компании для платформы Microsoft .NET. Максимум статических проверок. Под статическими проверками мы понимаем проверки времени компиляции. Этот принцип является важным, но, к сожалению, зачастую недооценивается разработчиками инструментария разработки. Проверки времени компиляции могут отлавливать большой спектр ошибок. Есть и другая особенность – это удобство. Ошибки времени исполнения сложнее воспринимаются, труднее найти причину ошибки. Разнообразие и декларативность проверок. Проверки общего назначения удобно задавать в декларативном виде. При этом сами проверки должен осуществлять фреймворк. За счет уменьшения дублирования и декларативности снижается вероятность ошибок. Проверки должны быть, как техническими, так и уровня доменной модели. Мы будем говорить о проверках уровня доменной модели. Возможность анализа декларативных проверок. Любые ограничения порождают некоторую модель. Эту модель (проверки) можно формально верифицировать. Вообще, проблема доказательства большинства свойств программы невозможна. Этот вопрос выходит далеко за рамки нашего доклада. Но существует возможность верификации более слабых (менее выразительных моделей). Во второй части мы обсудим функционал, который мы называем "состояния". Эти "состояния" образуют что-то вроде автомата, или структуру Крипке. Так вот, существуют алгоритмы проверки выполнимости темпоральных логик на таких структурах.

Citation preview

Page 1: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Уменьшение влияния человеческого фактора при

разработке бизнес-приложений (на примере CustIS Universal)

Алексеев Алексей[email protected]

[email protected]

Николай Гребнев[email protected]@custis.ru

Page 2: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Структура доклада

• Человеческий фактор разработке ПО• Методы снижения человеческого фактора• CustIS Universal• LINQ как инструмент повышения качества• Модель состояний• Верификация модели состояний

Page 3: Уменьшение влияния человеческого фактора при разработке бизнес приложений

ЧЕЛОВЕЧЕСКИЙ ФАКТОР В РАЗРАБОТКЕ ПО

Page 4: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Человеческий фактор

• Многозначный термин, описывающий возможность принятия человеком ошибочных или алогичных решений в конкретных ситуациях (Wikipedia®)

• Выражение, означающее в США область знания и профессию, определяемые в Европе термином эргономика (Словарь практического психолога)

Page 5: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Человеческий фактор

Page 6: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Методологии

• Ручное тестирование• Автоматическое тестирование, TDD• Code Review• …

Page 7: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Средства разработки

Page 8: Уменьшение влияния человеческого фактора при разработке бизнес приложений

МЕТОДЫ СНИЖЕНИЯ ЧЕЛОВЕЧЕСКОГО ФАКТОРА

Page 9: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Стоимость ошибки

КодКод

СборкаСборка

Unit-тестыUnit-тесты

Code ReviewCode Review

ТестированиеТестирование

ЭксплуатацияЭксплуатация

Page 10: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Стоимость ошибки

Unit-тестыUnit-тесты

Code ReviewCode Review

ТестированиеТестирование

ЭксплуатацияЭксплуатация

Page 11: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Аспекты качества инструментария

• Диагностика• Удобство использования• Скорость• Эффективность

Page 12: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Эффективность

С++: if (a = 2)

if (ptr == null)Корректность

if (ptr)ЛаконичностьVS

Page 13: Уменьшение влияния человеческого фактора при разработке бизнес приложений

CUSTIS UNIVERSAL

Page 14: Уменьшение влияния человеческого фактора при разработке бизнес приложений

?

Page 15: Уменьшение влияния человеческого фактора при разработке бизнес приложений

ORM

• технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования (Wikipedia®)

Класс → таблицаОбъект → запись

Свойство → колонка

Page 16: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Примеры ORM

• Hibernate • Entity Framework• CustIS Universal

Page 17: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Процесс компиляции

• Выдача ошибок в IDE• Время отклика• Локализация ошибки• Плагины компиляции

Page 18: Уменьшение влияния человеческого фактора при разработке бизнес приложений

ВАЛИДАЦИЯ МОДЕЛИ ВО ВРЕМЯ КОМПИЛЯЦИИ

Демонстрация

Page 19: Уменьшение влияния человеческого фактора при разработке бизнес приложений

LINQ КАК ИНСТРУМЕНТ ПОВЫШЕНИЯ КАЧЕСТВА

Page 20: Уменьшение влияния человеческого фактора при разработке бизнес приложений

LINQ (Language-Integrated Query)

• является революционной инновацией которая является мостом между миром объектов и миром данных (Microsoft©)

Page 21: Уменьшение влияния человеческого фактора при разработке бизнес приложений

До LINQ

new SimpleQuery<Post>( @“from Post p where p.Blog.Author = ?", author);

Page 22: Уменьшение влияния человеческого фактора при разработке бизнес приложений

LINQ

from Post p in Session.Postswhere p.Blog.Author == authorselect p;

Page 23: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Преимущества LINQ

• Проверка типов при компиляции• IntelliSense• Единообразие при работе с данными

LINQ (Language-Integrated Query) является революционной инновацией в Visual Studio 2008 и .NET Framework версии 3.5, которая является мостом между миром объектов и миром данных. Традиционно запросы к данным выражаются в виде простых строк без проверки типов при компиляции или поддержки IntelliSense. Кроме того, разработчику приходится изучать различные языки запросов для каждого типа источника данных: базы данных SQL, XML-документов, различных веб-служб и т. д. LINQ делает запрос первоклассной конструкцией языка в C# и Visual Basic. Можно создавать запросы к строго типизированным коллекциям объектов с помощью зарезервированных слов языка и знакомых операторов. На следующем рисунке показан частично выполненный запрос LINQ к базе данных SQL Server в C# с полной проверкой типов и поддержкой IntelliSense.

                                                                                            

Page 24: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Стоимость ошибки

СборкаСборка

Код

Unit-тестыUnit-тесты

Code ReviewCode Review

ТестированиеТестирование

ЭксплуатацияЭксплуатация

Page 25: Уменьшение влияния человеческого фактора при разработке бизнес приложений

LINQ и данные

Требуется:

Но:Не удалось создать константу с типом "Тип замыкания". В этом контексте поддерживаются только типы-примитивы ("например Int32, String и Guid").

Employee leader = Session.Employee.First();var q = from Department d in Session.Department where d.Leader == leader select d;

Page 26: Уменьшение влияния человеческого фактора при разработке бизнес приложений

from Post p in Session.Postswhere p.Blog.Author.Id == author.Idselect p;

from Post p in Session.Postswhere p.Blog.Author.Id == (author == null ? null : author.Id)select p;

Page 27: Уменьшение влияния человеческого фактора при разработке бизнес приложений

LINQ к доменной модели и ООП

Но:Указанный член типа "IsManager" не поддерживается в выражениях LINQ to Entities. Поддерживаются только инициализаторы, члены сущности и свойства навигации сущности.

public class Employee{ … public bool IsManager { get { return Subordinates.Count() > 0; } } …}…var q = from Employee e in Session.Employee where e.IsManager select e;

Page 28: Уменьшение влияния человеческого фактора при разработке бизнес приложений

LINQ к доменной модели невозможно или не имеет смысла использовать

Page 29: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Решение (на примере Universal)public class Employee{ … [Attr] [Implemented] public abstract bool IsManager {get; }

// Это реализация для атрибута IsManager. static Expression<Func<Employee, bool>> IsManagerImpl { get { return e => Subordinates.Count() > 0; } } …}…var q = from Employee e in Session.Employee where e.IsManager select e;

Page 30: Уменьшение влияния человеческого фактора при разработке бизнес приложений

from Employee e in Sessionselect e.IsManager

Свойства, используемые в запросах

from Employee e in Sessionselect Subordinates.Count() > 0

Page 31: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Корректность [Attr][Implemented]public abstract MyEntity Attr1 {get; } [Attr][Implemented]public abstract MyEntity Attr2 {get; }

static Expression<Func<MyEntity, MyEntity>> Attr1Impl{ get {return e => e.Attr2; }}

static Expression<Func<MyEntity, MyEntity>> Attr2Impl{ get {return e => e.Attr1; }}

Page 32: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Анализ реализации

static Expression<Func<MyEntity, MyEntity>> Attr1Impl

{ get {return e => e.Attr2; }}

static Expression<Func<MyEntity, MyEntity>> Attr2Impl

{ get {return e => e.Attr1; }}

Обнаружена циклическая зависимость

Page 33: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Стоимость ошибки

КодКод

Unit-тестыUnit-тесты

Code ReviewCode Review

ТестированиеТестирование

ЭксплуатацияЭксплуатация

Сборка

Page 34: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Роль Linq2Model

• Удобно использовать• Единый инструмент• Раннее обнаружение ошибок• Интеграция со средствами разработки

Page 35: Уменьшение влияния человеческого фактора при разработке бизнес приложений

МОДЕЛЬ СОСТОЯНИЙ

Page 36: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Состояния/// <summary> Состояние автомобиля. </summary>

public enum AutoState{ // Машина стоит и не заведена. Stopped = 1,

// Машина заведена и не едет. Winded = 2,

/// <summary> Машина едет. </summary> Driving = 4,}

Page 37: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Императивные проверки

public virtual void WindUp(){ if (State != AutoState.Stopped) throw new InvalidEntityStateException(...);

...}

public virtual bool TryRun(){ if (State != AutoState.Winded) throw new InvalidEntityStateException(...);

...}

Page 38: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Декларативные ограничения

[StateRestriction(AutoState.Stopped)]public virtual void WindUp() {...}

[StateRestriction(AutoState.Winded)]public virtual bool TryRun(){...}

Page 39: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Декларативные ограничения[StateRestriction(AutoState.Stopped)][StateTransition(AutoState.Stopped, AutoState.Stopped | AutoState.Winded)]public virtual void WindUp() {...}

[StateRestriction(AutoState.Winded)][StateTransition(AutoState.Winded, AutoState.Driving | AutoState.Stopped)]public virtual bool TryRun(){...}

Page 40: Уменьшение влияния человеческого фактора при разработке бизнес приложений

ВЕРИФИКАЦИЯ МОДЕЛИ СОСТОЯНИЙ

Page 41: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Структура Крипке

Page 42: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Структура Крипке

Page 43: Уменьшение влияния человеческого фактора при разработке бизнес приложений

CTL, формулы состояний

CTL - Computation tree logic.

Формулы состояний:– A f - All: f должен выполняться на всех путях из

данного состояния;– E f - Exists: существует хотя бы один путь из данного

состояния, на котором выполняется f.

В этом определении f – формула пути.

Page 44: Уменьшение влияния человеческого фактора при разработке бизнес приложений

CTL, формулы путиФормулы пути: – X p - Next: p выполняется на следующем

состоянии пути; – G p - Globally: p выполняется на всех

последующих состояниях пути; – F p - Finally p выполняется на одном из

последующих состояний пути; – p U q - Until: p выполняется, пока на каком-то

из состояний пути не выполнится q , причем q должен обязательно когда-нибудь выполнится в будущем.

– p – формула состояния или предикат

Page 45: Уменьшение влияния человеческого фактора при разработке бизнес приложений

CTL

Page 46: Уменьшение влияния человеческого фактора при разработке бизнес приложений
Page 47: Уменьшение влияния человеческого фактора при разработке бизнес приложений
Page 48: Уменьшение влияния человеческого фактора при разработке бизнес приложений
Page 49: Уменьшение влияния человеческого фактора при разработке бизнес приложений
Page 50: Уменьшение влияния человеческого фактора при разработке бизнес приложений

В ЗАКЛЮЧЕНИЕ

Page 51: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Человеческий фактор

• Удобные инструменты• Раннее обнаружение ошибок (на этапе

набора кода или компиляции)• Интегрированность в среду разработки

Page 52: Уменьшение влияния человеческого фактора при разработке бизнес приложений

СustIS Universal

Page 53: Уменьшение влияния человеческого фактора при разработке бизнес приложений

Вопросы?

Следите за http://team.custis.ru