Евгений Колесников пре 5 година
родитељ
комит
ce9a64b1d9
13 измењених фајлова са 316 додато и 3 уклоњено
  1. 107 0
      articles/5_3_1_8_reengeniring.md
  2. 204 0
      articles/5_3_1_9_classlib.md
  3. BIN
      img/050316.jpg
  4. BIN
      img/050317.jpg
  5. BIN
      img/050318.jpg
  6. BIN
      img/050319.jpg
  7. BIN
      img/050320.jpg
  8. BIN
      img/050321.jpg
  9. BIN
      img/050321.png
  10. BIN
      img/050322.png
  11. BIN
      img/demo03.png
  12. BIN
      img/demo04.png
  13. 5 3
      readme.md

+ 107 - 0
articles/5_3_1_8_reengeniring.md

@@ -0,0 +1,107 @@
+# Реинжиниринг бизнес-процессов в информационных системах.
+
+[Реинжиниринг бизнес-процессов: технология, понятие, методы и принципы]: https://ivczn.ru/startapy/reinzhiniring-biznes-protsessov-tehnologiya-ponyatie-metody-i-printsipy.html
+
+Понятие «реинжиниринг» впервые было введено учеными Хаммером и Чампи, которые в своих рассуждениях пришли к выводу, что ориентация на отдельно взятые задачи в бизнесе – это организационный архаизм.
+
+Самые современные компании во главу угла ставят не что иное, как бизнес-процессы. Такую гипотезу можно назвать революционной, ведь она отвергает многие понятия традиционного бизнеса.
+
+Например, Хаммер утверждает, что компания больше не нуждается в стабильной организационной структуре – она должна выстраиваться под бизнес-процессы, а не наоборот.
+
+>Реинжиниринг неразрывно связан с бизнес-процессами, так как считается полным перепроектированием последних с целью повышения качества продукции и результативности производства, оптимизации затрат. Другими словами, реинжиниринг – это встряска, необходимая организации, которая медленно, но верно катится под откос.
+
+В то же время у реинжиниринга есть и другое определение – переосмысление бизнеса. При этом переосмысливать должен не только руководитель организации, но и его подчиненные вплоть до низших звеньев.
+
+Те же Хаммер и Чампи утверждали, что на основе исключительно механистических преобразований добиться возрождения компании из пепла не получится.
+
+Чтобы результаты такого мощного инструмента, как реинжиниринг, впечатлили, нужно изменить образ мышления персонала таким образом, чтобы они поняли, почему их роль в выполнении того или иного бизнес-процесса исключительно важна. По мнению ученых, эффективный реинжиниринг есть гармоничное сочетание двух элементов:
+
+![](../img/050316.jpg)
+
+В то время как объектом ОЛУ является процесс в компании, а само управление считается сугубо административным, СПУ направлено на человеческие ресурсы. Основная цель СПУ – мотивация персонала, причем мотивация не к выполнению задач (как принято считать), а к переосмыслению собственной роли в компании.
+
+## Ключевые характеристики реинжиниринга
+
+Если разложить реинжиниринг на составляющие, останутся 4 основных характеристики, позволяющие отличить этот процесс от прочих способов совершенствования бизнеса:
+
+![](../img/050317.jpg)
+
+Рассмотрим каждую из характеристик подробнее:
+
+* **Фундаментальный**. Реинжиниринг заключается в том, чтобы абстрагироваться от настоящего состояния бизнеса и «заглянуть в будущее». Рисуется идеальная картина, после чего определяется, насколько возможно для компании достичь такого состояния и какие методы необходимо использовать для этого.
+* **Радикальный**. Бизнес строится заново. Основная ошибка руководителей, обращающихся к реинжинирингу, кроется в том, что они рассчитывают сохранить удачные, по их мнению, наработки и связи. Этот подход неверный, так как реинжиниринг предполагает полную перезагрузку системы. Меняется все вплоть до стратегии развития и миссии компании.
+* **Существенный**. Реинжиниринг также имеет цель – не бывает процесса ради процесса. Если по итогам реинжиниринга не произошло существенного изменения в результатах работы, руководителями на каком-то этапе была допущена ошибка.
+* **Бизнес-процессы**. Реинжиниринг ориентируется на бизнес-процессы, поэтому после «перезагрузки» должна быть организована система, «проповедующая» процессный подход.
+
+Известны примеры успешного реинжиниринга. Компания IBM благодаря этому процессу добилась стократного (!) увеличения производительности труда и десятикратного снижения длительности выполнения процессов (в среднем).
+
+Компания Ford сумела снизить количество работников отдела по работе с поставщиками в 4 раза, не потеряв при этом в качестве выполнения работы. Такие примеры прекрасно демонстрируют, насколько масштабных успехов позволяет добиться реинжиниринг.
+
+>Важно понимать, что такие успехи не случайны, а предполагаются реинжинирингом по умолчанию.
+
+К слову, в случае с крупными организациями (как тот же Ford) «перезагрузка» всей компании необязательна – достаточно усовершенствовать работу «проблемного» отдела, который включает в себя столько же работников, сколько и небольшая компания.
+
+## Классификации реинжиниринга
+
+Реинжиниринг классифицируется по степени воздействия на организацию и по ситуативному признаку. По первой классификации он делится на:
+
+![](../img/050318.jpg)
+
+Согласно этой классификации, допускается эволюционный («мягкий») реинжиниринг, хотя это и противоречит тем характеристикам, которые были рассмотрены нами выше. Эволюционный реинжиниринг предполагает частичное изменение процессов либо полное изменение, но без перехода на новый вид бизнеса. Революционный реинжиниринг предполагает полное перепрофилирование.
+
+По ситуативному признаку реинжиниринг делится на:
+
+![](../img/050319.jpg)
+
+* К кризисному реинжинирингу прибегают тогда, когда компания оказывается на грани банкротства, например, из-за потери конкурентоспособности или снижения качества товара.
+* К развивающему реинжинирингу обращаются, если при текущей благополучной позиции есть желание получить или увеличить отрыв от конкурентов.
+
+К кризисному реинжинирингу прибегают тогда, когда компания оказывается на грани банкротства, например, из-за потери конкурентоспособности или снижения качества товара.
+К развивающему реинжинирингу обращаются, если при текущей благополучной позиции есть желание получить или увеличить отрыв от конкурентов.
+
+## Как производится реинжиниринг: основные этапы
+
+Точный процесс проведения процедуры реинжиниринга всегда определяется тем, кто эту процедуру производит. Однако в примитивном теоретическом виде эту процедуру можно представить как совокупность следующих этапов:
+
+![](../img/050320.jpg)
+
+Рассмотрим каждый этап подробнее:
+
+* Стратегическое планирование. Если цель фирмы остается прежней (получение прибыли – любой студент-экономист знает об этом), то задачи, которые необходимо выполнять для ее достижения, определяются заново. Такими задачами могут быть снижение риска банкротства, увеличение прибыли, повышение эффективности работы компании. При разработке стратегического плана определяется ключевая компетенция предприятия – некое конкурентное преимущество или ноу-хау, с помощью которого миссия организации будет осуществимой.
+* Описание существующей бизнес-структуры. На этом этапе строится функциональная модель «как есть», то есть рассматривается существующая структура с нескольких точек зрения: например, компания как сеть процессов и подпроцессов, как сеть информационных источников, как организационная структура. Важность этого этапа невозможно преувеличить: рассмотрение текущего состояния фирмы – это отправная точка самого процесса реинжиниринга.
+* Анализ моделей. Используется функционально-стоимостной анализ (ФСА) – он признан наиболее объективным. ФСА измеряет эффективность настоящих процессов и выявляет возможности для ее повышения. Анализу в первую очередь подвергаются такие процессы:
+
+    ![](../img/050321.jpg)
+
+    ФСА производит замеры по двум признакам: время, затрачиваемое на выполнение процесса, и стоимость операции (в сопоставлении с отдачей).
+
+* Собственно реинжиниринг. Если количество «неблагополучных» мест превышает допустимый уровень, руководство принимает решение о реинжиниринге. Средств и методик, с помощью которых осуществляется реинжиниринг, бывает несколько:
+    * Построение диаграмм эффективности и моделей балансовых ведомостей.
+    * Графические методы: SA / SD (структурный анализ / структурный дизайн) – наиболее известный метод из этой категории.
+    * Средства имитации, позволяющие протестировать будущую систему в реальных условиях.
+    * Моделирование с помощью баз данных (например, через Oracle Developer).
+    * Использование экспертных систем (например, Gensym).
+
+Стоит отметить, что реинжиниринг – достаточно ответственная процедура, и пробовать новые для руководства методы здесь нецелесообразно, более того, опасно. Лучше положиться на те средства, которые отлично знакомы и чья эффективность уже практически проверена.
+
+
+## Психологические «тормоза» реинжиниринга
+
+Не секрет, что реинжиниринг, как и любое организационное изменение в компании, встречает сопротивление со стороны сотрудников (а иногда и руководителей).
+
+Часто бывает, что именно психологический барьер является главной проблемой при осуществлении процедуры.
+
+По этой причине руководителям важно не попасться в ловушку психологических комплексов, для чего нужно знать, где же эти «капканы» расставлены.
+
+Основные «стоп-сигналы» описаны в книге тех же Хаммера и Чампи:
+
+* Достроить легче, чем построить заново. В этом есть смысл, но только тогда, когда организация требует «косметического ремонта». Если же по всем признакам компания приближается к банкротству, нет причин пытаться сберечь то, что уже налажено. Реинжиниринг предполагает легкое расставание с прошлым.
+* Лучше синица в руках. Руководитель не рассчитывает на стремительный рост эффективности работы компании и готов довольствоваться малым ввиду отсутствия амбиций. Изменить образ мышления такого руководителя (главное, чтобы надежно) – настоящая проблема. Куда проще найти нового, амбициозного менеджера.
+* Поспешное прекращение процедуры. Руководитель сворачивает реинжиниринг как только видит первые успехи, считая, что дальнейшие преобразования уже ни к чему. Результат часто плачевен: если реинжиниринг не доведен до конца, компания возвращается к былым процессам и уже через пару лет нуждается в повторении процедуры.
+* Игнорирование ценностей кадров. Превращенный в формальную механистическую процедуру реинжиниринг обречен на неудачу в 100% случаев – это правило выделено в книге Хаммера и Чампи жирным. Грамотный менеджер должен обращать внимание на то, что творится в головах сотрудников, а не на их столах. Поэтому сотрудникам важно привить новые ценности, и использовать в качестве инструмента следует не красивые речи и обещания, а собственный пример.
+* Сосредоточенность на схемах, а не на их реализации. Быть экспертом в теории – лишь полдела для реинжиниринга. От руководителя требуются смелость (а, возможно, и дерзость), чтобы осуществлять изменения, кажущиеся ему необходимыми, без сомнения.
+
+В качестве вывода можно отметить, что для того, чтобы реинжиниринг был проведен правильно и имел отдачу в виде повышения эффективности, не нужны какие-либо специальные или узконаправленные навыки – достаточно просто быть грамотным управленцем и понимать суть процедуры.
+
+Источник: https://utmagazine.ru/posts/8617-reinzhiniring-biznesa
+

+ 204 - 0
articles/5_3_1_9_classlib.md

@@ -0,0 +1,204 @@
+# Разработка библиотеки классов
+
+## Техническое задание
+
+>Задание взято из демо-экзамена
+
+### Общие требования
+
+В связи со стремительным развитием нашей системы было решено вынести некоторый важный функционал за рамки основного проекта и сделать библиотеку классов, которую мы сможем подключать
+к любому нашему проекту в случае расширения. Данная библиотека будет подключаться к основному проекту и должна быть представлена в виде *.dll/.jar* файла или папки с файлом *.py*.
+
+Чтобы система правильно интегрировалась вам необходимо обязательно следовать правилам именования библиотек, классов и методов в них. В случае ошибок в рамках именования ваша работа не
+может быть проверена и ваш результат не будет зачтен. Классы и методы должны содержать модификатор **public** (если это реализуемо в рамках платформы), чтобы внешние приложения могли
+получить к ним доступ.
+
+В качестве названия для библиотеки необходимо использовать: **CompanyCoreLib**. Вам необходимо загрузить исходный код проекта с библиотекой в отдельный репозиторий с названием, совпадающим с названием приложения.
+
+### Класс аналитики
+
+Вам необходимо создать класс с названием **Analytics**, который будет позволять проводить аналитику различных процессов в рамках компании.
+
+Реализуйте метод, который принимает в себя список объектов даты и времени по совершенным покупкам/заказам в рамках нашей компании, а возвращает список дат (без времени), отсортированный в порядке уменьшения частоты заказов. Это необходимо, чтобы наша компания могла прогнозировать наиболее высокий спрос на следующий год для обеспечения более качественного оказания услуг.
+
+Возвращаемые данные должны содержать только даты для первого числа каждого месяца и 00:00 минут. 
+Например, вам поступили следующие данные: 2019-12-12 14:43, 2019-12-01 15:05, 2019-11-04 09:01, а, значит, самый популярный месяц - декабрь. Вам необходимо вернуть следующие данные: 2019-12-01 00:00, 2019-11-01 00:00. В случае совпадения характеристик популярности сперва нужно вывести более
+ранние месяцы.
+
+Прогноз строится на основе предыдущего года. ~~Так что данные Вам будут выдаваться строго за предыдущий год.~~ *Данные будут произвольные, поэтому даты не удовлеторяющие этому условию нужно игнорировать.*
+
+### Спецификация метода
+
+Метод должен принимать список объектов даты и времени, а возвращать список дат (без времени).
+
+  | C#
+---|---
+Библиотека классов | CompanyCoreLib.dll
+Название класса | Analytics
+Название метода | PopularMonths()
+Входящие обязательные параметры | List<DateTime> dates
+Возвращаемые параметры | List<DateTime>
+
+## Реализация
+
+### Создание библиотеки классов
+
+Создаем **новый** проект, установив нужные фильтры (*C#*, *Windows*, *Библиотека*) и выбрав проект для соответствующей платформы. Мы всё делаем для **.NET Framework**.
+
+![создание проекта](../img/demo03.png)
+
+Не забываем указать название проекта. Как вы тут напишете, так dll и будет называться.
+
+![ввод названия](../img/demo04.png)
+
+В итоге студия создаст нам "рыбу" с одним файлом:
+
+```cs
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CompanyCoreLib
+{
+    public class Class1
+    {
+    }
+}
+```
+
+### Создание класса аналитики
+
+По ТЗ наш класс должен называться **Analytics** - в *обозревателе решений* переименуйте файл `Class1.cs` в `Analytics.cs`. Система спросит, переименовать ли все названия в проекте - соглашаемся. В итоге наш класс должен выглядеть так:
+
+```cs
+namespace CompanyCoreLib
+{
+    public class Analytics
+    {
+    }
+}
+```
+
+Обратите внимание на модификатор **public** у класса - не во всех версиях *Visual Studio* он ставится автоматически. Добавьте, если его нет.
+
+### Создание метода
+
+В [спецификации](#Спецификация-метода) задано и название метода, его параметры и возвращаемый результат - запишем (не забывая про модификатор доступа **public**):
+
+```cs
+public List<DateTime> PopularMonths(List<DateTime> dates) {
+    return dates;
+} 
+```
+
+**Напомню синтаксис объявления метода:**
+
+`<Модификатор доступа> <Тип результата, возвращаемого методом> НазваниеМетода(<Тип параметра 1> <НазваниеПараметра>[, <Тип параметра 2> <НазваниеПараметра2>])`
+
+>В ТЗ явно указано, что название параметра **dates**, и хотя это отход от стандарта, оставляем как есть.
+
+**List<DateTime>** - означает **список** объектов типа **DateTime**
+
+Для того, чтобы реализовать логику метода нам необходимо:
+
+* перебрать список входных данных (произволные даты)
+* отфильтровать даты по условию (только прошлый год)
+* сохранить дату в промежуточный список с датой первого числа месяца и количеством повторений этой даты
+* отсортировать промежуточный список по двум условиям: популярность месяца по убываению и, если популярность одинаковая, по месяцу по возрастанию
+
+Для перебора элементов списка используется цикл **foreach**:
+
+```cs
+// обращаем внимание на название переменных - IterDate (ПеребираемаяДата) пишем CamelCase-ом 
+foreach (DateTime IterDate in dates) {
+    ...
+}
+```
+
+Для вычисления прошлого года используем статический геттер класса **DateTime** *DateTime.Now*, который возвращает текущую дату и время. Нам остается получить у этого объекта год и вычесть единицу (естественно вычислять эту переменную нужно до цикла):
+
+```cs
+int PreviousYear = DateTime.Now.Year-1;
+foreach (DateTime IterDate in dates) {
+    if (IterDate.Year == PreviousYear){
+        ...
+    }
+}
+```
+
+Теперь нам нужно объявить список объектов, в котором будет хранится дата и количество повторений этой даты. Для этого создадим класс **DateTimeWithCounter** (вообще, по современным гайдлайнам нужно каждый класс писать в отдельном файле и на демо-экзамене помните про это)
+
+```cs
+class DateTimeWithCounter
+{
+    public DateTime DateTimeProp;
+    public int Counter = 0;
+
+    // конструктор
+    public DateTimeWithCounter(DateTime date) {
+        DateTimeProp = date;
+        Counter = 1;
+    }
+}
+
+public List<DateTime> PopularMonths(List<DateTime> dates) {
+    // объавляем временный список объектов "ДатаСоСчетчиком"
+    var DateTimeWithCounterList = new List<DateTimeWithCounter>();
+    
+    int PreviousYear = DateTime.Now.Year-1;
+    foreach (DateTime IterDate in dates) {
+        if (IterDate.Year == PreviousYear){
+            // вычисляем начало месяца для текущей даты
+            var DateMonthStart = new DateTime(date.Year, date.Month, 1, 0, 0, 0);
+
+            // ищем эту дату во временном списке
+            var index = DateTimeWithCounterList.FindIndex(item => item.DateTimeProp == DateMonthStart);
+
+            if (index == -1)
+            {
+                // такой даты нет - добавляю
+                DateTimeWithCounterList.
+                    Add(new DateTimeWithCounter(DateMonthStart));
+            }
+            else {
+                // дата есть - увеличиваем счетчик
+                DateTimeWithCounterList[index].Counter++;
+            }
+        }
+    }
+    ...
+}
+```
+
+Для вычисления начала месяца мы использовали один из конструкторов класса **DateTime(year, month, day, hour, minutes, seconds)**, где год и месяц берем оригиналльные, а день равен "1"
+
+Метод **FindIndex** ищет **позицию** (индекс) элемента в списке. Если элемент в списке есть, то возвращает целое от "0" и выше, а если нет, то "-1".
+
+А дальше мы либо добавляем новую дату во временный список, либо увеличиваем счетчик у найденной даты.
+
+Осталось только вернуть отсортированный результат. Для этого в **C#** есть очень мощный инструмент - [**LINQ**](https://metanit.com/sharp/tutorial/15.1.php).
+
+```cs
+...
+return DateTimeWithCounterList
+    .OrderByDescending(item => item.Counter)
+    .ThenBy(item => item.DateTimeProp)
+    .Select(item => item.DateTimeProp)
+    .ToList();
+```
+
+**OrderByDescending** - сортирует исходный список по убыванию. В параметрах пишется лямбда функция, где *item* текущий элемент списка, а после "=>" свойство элемента, по которому производится сортировка. У еас по ТЗ первое условие сортировки по убыванию популярности, поэтому используем свойство Counter. Для прямой сортировки (по возрастанию) есть метод *OrderBy*.
+
+**ThenBy** (ЗатемПо) - при совпадающих свойствах *популярность* сортировка будет производиться по полю *дата*. У метода *ThenBy* есть пара *ThenByDescending*. Методов *ThenBy* после *OrderBy* может быть несколько.
+
+**Select** - выбирает из объекта нужные свойства. Нам из этого объекта нужна только дата. (Если нужно выбрать несколько объектов, то они перечисляются через запятую: `Select(item => item.Prop1, item.Prop2, item.Prop1 + item.Prop2)`)
+
+**ToList** преобразует полученный после сортировки объект (IEnumerable) в список, который и возвращается методом. 
+
+
+# Контрольное задание
+
+* Реализовать ТЗ, написанное в начале этой лекции. 
+* Результат оформить в виде репозитория (как написано в ТЗ).











+ 5 - 3
readme.md

@@ -207,13 +207,15 @@ https://sites.google.com/site/anisimovkhv/learning/pris/lecture/tema1#p12
 
 [(+12)]: _
 
-5. Инструментарии анализа качества программных продуктов в среде разработке.
+5. Инструментарии анализа качества программных продуктов в среде разработки.
 
 6. [Обработка исключительных ситуаций. Методы и способы идентификации сбоев и ошибок.](articles/5_3_1_6_exceptions.md)
 
-7. Выявление ошибок системных компонентов.
+[7. Выявление ошибок системных компонентов. - по ФГОС, но не представляю что давать]: _
 
-8. Реинжиниринг бизнес-процессов в информационных системах.
+8. [Реинжиниринг бизнес-процессов в информационных системах.](articles/5_3_1_8_reengeniring.md)
+
+9. [Создание библиотеки классов](articles/5_3_1_9_classlib.md)
 
 ### Лабораторнo-практические работы
 1. Лабораторная работа «Разработка тестового сценария проекта»