Transcript
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


Recommended