2013_09_07.pptx
- Количество слайдов: 63
Компонентно-ориентированное программирование
Программирование и около программные проблемы
Примеры Было На самом деле using System; using System. Collections. Generic; using System. Linq; using System. Text; using System. Threading. Tasks; using System. Windows. Controls; using System. Windows. Data; using System. Windows. Documents; using System. Windows. Input; using System. Windows. Media. Imaging; using System. Windows. Navigation; using System. Windows. Shapes; using Class. Library 1; using System. Net; using System. IO; using System. Network. Information; using First. Floor. Modern. UI. Windows. Controls; using Excel. Parse; using System. Text. Regular. Expressions; using System. Component. Model; using Internet. Download; using System. Windows. Threading; using System; using System. Collections. Generic; using System. Linq; using System. Windows. Controls; using Class. Library 1; using System. IO; using First. Floor. Modern. UI. Windows. Controls; using Excel. Parse; using Internet. Download;
private delegate int My. Parse(string my 1, string my 2, string my 3);
if (Nix. RB. Is. Checked == true) { var query = from a in db. Documents where a. Data == my. Date. Text && a. Name == "NIX" select a. IDDocument. To. String(); query. To. String(); foreach (var q in query) { id. Doc = q. To. String(); } if (id. Doc == null) { return false; } else } return true; Было Сколько ошибок?
1) 2) 3) 4) 5) 6) 7) 8) 9) 10) 11) 12) 13) Сравнение Name с “Nix”, нет выделенной константы хотя бы… Выполнение запроса к БД Получили 1000 записей из БД, взяли только 1 ID С какого-то … ID преобразовали к строке, усложние сравнения Лишнее == true Общая нерациональность кода Date – по названию дата, по факту – строка. Что делать америкосам, у которых месяц впереди – большой вопрос. Да и локализация накрылась… Промежуток – неверная структура БД, тип поля a. Data Лишний else Отсутствие скобок после else – отсутствие стиля форматирования – самая гадость Преобразование query. To. String() – понять, что это вызов отложенной операции – нужен опыт извращений Нет четкого открытия контекста БД Нет инициализации ID, поэтому операция не консистентная. Если id было и записей нет в БД, то она останется неверной
Первое приближение улучшения Стало if (Nix. RB. Is. Checked) { var res = b. Documents. First. Or. Default(p=>p. Data == my. Date. Text && p. Name == "NIX“); id. Doc = (q != null) ? q. Id. Document. To. String() : null; return (q != null); }
Без комментариев List<Object> list = new List<object>(); var query = (from a in db. Documents where a. Name == name select a. IDDocument. To. String()). Max(); foreach (var q in query) { list. Add(q); } return list;
Без комментариев Microsoft. Win 32. Open. File. Dialog dlg = new Microsoft. Win 32. Open. File. Dialog();
public static void Do. PDF(System. Component. Model. Background. Worker worker, AAS_Methods. Report report, string title) { worker. Report. Progress(0, title); try { report. pdf(Environment. Current. Directory + @"Fontstimes. ttf"); worker. Report. Progress(100, title); } catch (Exception ex) { worker. Report. Progress(100, title + Environment. New. Line + "Ошибка: " + ex. Message); } } public static void Do. Word(System. Component. Model. Background. Worker worker, AAS_Methods. Report report, string title) { worker. Report. Progress(0, title); try { report. word(); worker. Report. Progress(100, title); } catch (Exception ex) { worker. Report. Progress(100, title + Environment. New. Line + "Ошибка: " + ex. Message); } } public static void Do. Excel(System. Component. Model. Background. Worker worker, AAS_Methods. Report report, string title) { worker. Report. Progress(0, title); try { report. excel(); worker. Report. Progress(100, title); } catch (Exception ex) { worker. Report. Progress(100, title + Environment. New. Line + "Ошибка: " + ex. Message); } }
Без комментариев… Про атаки SQL inject человек даже не знает и спит спокойно… static string Fixed. Selling. Trigger(string id_Customer, string Final. Purchase. Price, string id_Branch, string id_Product, string Quantity, string id_Manager) { return "Update Regular. Customer set " + "Total. Purchase = Total. Purchase + " + Final. Purchase. Price + " where ID = " + id_Customer + "; " + "Update Product. Branch set " + "Current. Quantity = Current. Quantity - " + Quantity + " where Branch. ID = " + id_Branch + " and Product. ID = " + id_Product + "; " + } "Update Manager. Performance set " + "Actual. Indicator = Actual. Indicator + " + Quantity + " where Manager. ID = " + id_Manager + " and product. Type. ID = (select id. Product. Type from Product where id = " + id_Product + "); ";
1. 2. 3. 4. 5. 6. 7. 8. 9. Выводы Промышленность – деньги. Платят программисту за ХОРОШУЮ работу. Было сказано, что поток хороший, сильный, поэтому правила игры простые – разговор до первой ошибки. Бред не смотрю, и даже на вопросы по бреду не отвечаю Пока хоть одна ошибка – принимать не буду Вам не повезло, основами тестирования я владею Вам дважды не повезло, потому что основами C# тоже владею Трижды не повезло тем, кто написал на WPF Четырежды не повезло, потому что занятия раз в 2 недели, в остальное время в институте меня не будет Все проблемы – ваши
Выводы (2) 1. Диплом не нужен 2. Работа при наличии диплома – не дается автоматически 3. Деньги платят за решение проблем, а не за диплом
Книги, рекомендуемые к прочтению
Хорошие книги Учебный курс Microsoft. Основы разработки приложений на платформе Microsoft. NET Framework. MCTS Экзамен 70 -536
Хорошие книги • Компиляторы: принципы, технологии и инструменты • Альфред Ахо, Моника С. Лам, Рави Сети, Джеффри Ульман
Хорошие книги • Современные методы описания функциональных требований к системам • Автор: Алистер Коберн
Хорошая книга • Продуктивный программист. Как сделать сложное простым, а невозможное возможным • Нил Форд
Хорошая книга • Джон Роббинс • Отладка приложений для Microsoft. NET
Хорошая книга CLR via C#. Программирование на платформе Microsoft. NET Framework 4. 0 на языке C# Рихтер Дж.
Хорошая книга Догнать зайца. Как лидеры рынка выигрывают в конкурентной борьбе и как великие компании могут их настичь Стивен Спир Описывается методология Кайдзен
Хорошая книга • 97 этюдов для архитекторов программных систем • Нил Форд, Майкл Найгард, Билл де Ора
Хорошая книга • Савина Романа • Тестирование DOT COM или Пособие по жестокому обращению с багами в интернетстартапах
Хорошая книга • Стив Макконнелл • Совершенный код
Хорошая книга • LINQ. Язык интегрированных запросов в C# 2010 для профессионалов • Адам Фримен, Джозеф Раттц-мл.
Хорошая книга • Принципы, паттерны и методики гибкой разработки на языке C# • Мартин Р. , Мартин М.
Хорошая книга • Мифический человекомесяц, или Как создаются программные системы • Фредерик Брукс
Хорошая книга • Чакон • Pro git
Хорошая книга • Адам Фриман • про ASP. NET MVC 4
Хорошая книга • ASP. NET MVC Framework • Гайдар Магдануров, Владимир Юнев
Хорошая книга • Предметноориентированное проектирование (DDD). Структуризация сложных программных систем • Эрик Эванс
Хорошая книга • Приемы объектноориентированного проектирования. Паттерны проектирования • Гамма Э. , Хелм Р. , Джонсон Р. , Влиссидес Дж.
Хорошая книга • Deadline. Роман об управлении проектами • Демарко Том.
Хорошая книга • Федерико Бьянкуцци… • Пионеры программирования
Хорошая книга • IT проекты. Фронтовые очерки • Джо Мараско
Хорошая книга • Пол Нильсен • SQL Server 2005. Библия пользователя
Хорошая книга • Кайл Бэнкер • Mongo. DB в действии
Почему буду дрючить за все? 38
В какой валюте? • Ноябрь 2002 года. Клерк брокерской фирмы, выставляющий котировки компании Ryanair, перепутал цену акций в евро и фунтах. Эта ошибка мгновенно подняла индекс Лондонской фондовой биржи на 61% с 404, 5 до 653, 7 пункта.
Промахнулись… • Декабрь 2005 года. Рекордную ошибку допустил трейдер японской компании Mizuho Securities. Брокер получил заказ на продажу одной акции рекрутинговой компании J-Com. Это случилось в первый же день торгов J-Com: накануне компания разместила акции по цене 610 тыс. иен (5 тыс. долларов). Брокер по ошибке ввел в компьютер заказ на продажу 610 тыс. акций по цене одна иена. Ошибку заметили сразу же, но на запросы об отмене заказа компьютерная система биржи не отреагировала. По оценке газеты "Ведомости", ущерб Mizuho Securities составил более 40 млрд иен (341 млн долларов). Притом, что всего у компании было 14 тыс. акций, размещение заказа вызвало хаос на рынке, основной рыночной индекса Nikkei 225 обвалился на 301 пункт. Спустя две недели после случившегося в отставку ушло руководство Токийской биржи. Тогда же были введены новые правила, требующие, чтобы брокерские компании проверяли на предмет возможных ошибок все заказы на покупку или продажу более 5% акций компании.
Точка, запятая – какая разница? ? ? • Неудача при запуске первого американского спутника к Венере случилась из-за ошибки в программе – вместо требуемой в операторе запятой программист поставил точку. Вот как был записан этот оператор: DO 50 I = 12. 525 На самом же деле он должен был выглядеть следующим образом: DO 50 I = 12, 525 В программе на Фортране IV требовался цикл, а программист поставил точку, а в результате получилось присваивание значения 12, 525 неявной переменной DO 50 I (пробелы в Фортране игнорируются)
Да и вообще что такое знак припинания? • Потерянный дефис НАСА Ущерб: $80 миллионов Дефис – далеко не самый важный знак препинания, однако в 1962 году его отсутствие в коде бортового компьютера стоило НАСА 80 миллионов долларов. Речь идёт о запуске направлявшегося к Венере космического аппарата «Маринер-1» , который вследствие маленькой ошибки потерял управление и был уничтожен на 293 секунде после старта.
Еще один пример знака пунктуации (самая дорогая запятая в истории) • • Август 2006 года, дело о «самой дорогой запятой в истории Канады» . Речь идет о конфликте канадских компаний Rogers Communications Inc. и Aliant Inc. Суд обязал крупнейшего канадского провайдера услуг беспроводной передачи данных Rogers Communications Inc. выплатить дополнительные 2, 13 миллионов долларов Aliant Inc. после расторжения договора между ними. В 2002 году между компаниями был заключен договор, содержавший пункт о том, что он «вступает в силу в день подписания и остается в силе в течение пяти лет со дня подписания, а затем может быть продлен на пятилетние периоды, если только не будет расторгнут любой из сторон, подавшей о том письменное уведомление не позднее, чем за год до расторжения» . Таким образом Rogers считала, что до 2007 года договор является нерасторжимым, а в 2006 году станет ясно, будет ли он автоматически продлен еще на пять лет. Однако в 2005 году Aliant присылает уведомление о расторжении договора. Камнем преткновения стала злосчастная запятая, из-за которой данный пункт соглашения сторонами интерпретировался (в английском написании) по-разному: представители Rogers утверждали, что условия относятся только к дополнительному сроку, а представители Aliant, основываясь на пунктуационную норму английского языка, – как к дополнительному, так и к основному. Решение было вынесено в пользу компании Aliant, которая получила право разорвать контракт в 2006 году. Это позволило ей значительно повысить плату за свои услуги (с $9. 60 за каждую используемую вышку до $28. 05), из-за чего Rogers потеряло более двух миллионов долларов – такова стоимость одной запятой.
Опечатка • Ошибка бухгалтерии Министерства образования штата Нью-Йорк привела к тому, что сумма, предназначенная на развитие городского школьного транспорта, увеличилась в два раза. Оказалось, что в одном из слов по невнимательности бухгалтера появилась лишняя буква, и бухгалтерская программа не смогла распознать его. Эта ошибка была обнаружена в ходе аудиторской проверки в июне 2006 года, она привела к тому, что на транспорт было потрачено 2, 8 миллионов долларов вместо запланированных 1, 4 миллионов. Городским властям пришлось возместить разницу.
ФБР, конец проекта "Трилогия" (2005) • Потери: 105 млн долларов. Катастрофа. Компьютерная система, обеспечивавшая работу проекта Trilogy для ФБР, сломалась во время попытки модернизации и капитального ремонта после четырех лет успешной работы. Огромный виртуальный проект Trilogy представлял собой интегрированный программно-технический комплекс, при помощи которого многочисленные агенты ФБР имели возможность делиться материалами дел и прочей информацией друг с другом. Причина. Нерациональное планирование и попытка построить долгосрочный проект на технологиях, которые устарели прежде, чем проект был завершен, в результате система получилась чересчур сложной и непригодной для использования.
Британские паспорта (1999) • Потери: 12, 6 миллионов фунтов стерлингов, огромные неудобства для многих граждан. Катастрофа. Агентство Великобритании по выдаче паспортов внедрило новую компьютерную систему Siemens, которая вместо ускорения столь важной для каждого государства процедуры, не смогла своевременно обеспечить выдачу новых паспортов для полутора миллионов граждан Королевства. Агентство было вынуждено выплатить миллионы фунтов стерлингов в качестве компенсации, сотрудники работали сверхурочно, для людей, находившихся в очереди ожидания паспорта под дождем, даже раздавали бесплатные зонтики. Причина. Паспортное агентство приняло в эксплуатацию новую компьютерную систему без адекватного тестирования или обучения своих сотрудников. В это же время в Великобритании вышел новый закон, требующий обязательной замены паспортов для всех детей в возрасте до 16 лет, выезжающих за рубеж, в результате чего за новыми паспортами выстроились огромные очереди. К несчастью, новую компьютерную систему очень быстро удалось перегрузить.
Прогноз погоды • В 1983 году произошло наводнение в югозападной части США. Причина заключалась в том, что в компьютер были введены неверные данные о погоде, в результате чего он дал ошибочный сигнал шлюзам, перекрывающим реку Колорадо
Современные самолеты - компы • 2007 год - Из-за ошибки определения времени при смене часовых поясов 12 истребителей F-22 остались без автопилота, навигации и связи. Вернуться им помогло только чудо.
Доставили • Склад-автомат в ближайшем Подмосковье, принадлежащий логистической фирме, арендуется кучей компаний для ответственного хранения продукции. Вдоль высоченных многоэтажных стеллажей с десятками тысяч паллет бодро носятся по направляющим каретки автоматических погрузчиков, хватают заказанную продукцию и доставляют её в нужное место. Одна маленькая, но очень гордая каретка из-за ошибки в коде позиционирования, не сбавляя скорости, доходит до края стеллажа, слетает с направляющих и срезает несущую балку. Весь склад с дорогостоящей техникой и продукцией на миллионы долларов складывается за несколько минут, как карточный домик. 49
Обрушение стадиона Хартфорд Колизей (1978) • Потери: 70 млн долларов плюс 20 млн долларов ущерба местной экономике. Катастрофа. 18 января 1978 года, в начале пятого ночи, всего через несколько часов после того как тысячи фанатов покинули арену стадиона Хартфорд Колизей (Hartford Coliseum), стальная решетчатая крыша сооружения рухнула под тяжестью мокрого снега. Причина. Программист САПР (Системы автоматизированного проектирования), используемой при разработке проекта стадиона Колизей в городе Хартфорде, ошибочно предположил, что опоры, которые поддерживают стальную крышу гигантского сооружения, работают только на чистое сжатие. Но когда одна из опор неожиданно прогнулась под воздействием снега, это вызвало цепную реакцию, которая сложила всю конструкцию вместе с другими участками крыши, как костяшки домино 50
Медицинское оборудование убивает • Потери: три человека погибли, трое тяжело раненых Катастрофа. Из-за неисправности аппарата лучевой терапии Therac-25 несколько пациентов получили смертельные дозы облучения во время медицинского обследования в Канаде. Причина. Из-за специфической ошибки, которая называется "Состояние гонки" (race condition), допущенной при проектирования аппарата, существовала возможность случайной настройки Therac-25 на режим генерирования мощного пучка электронных частиц без надлежащего экранирования и защиты пациента. Состояние гонки это ошибка проектирования системы, при которой ее работа зависит от того, в каком порядке выполняются части программного кода. Ошибка проявляется, как правило, в случайные моменты времени и "прячется" при попытке ее локализовать. 51
Взрыв ракеты Ariane (1996) • Потери: 500 млн долларов. Катастрофа. Новейшая европейская беспилотная ракета Ariane-5 была уничтожена через 36, 7 секунды после старта с космодрома Куру во Французской Гвиане. Вместе с ракетой-носителем погиб груз из четырех научных спутников, которые ракете предстояло вывести на орбиту для изучения того, как магнитное поле Земли взаимодействует с солнечным ветром. Причина. Сбой произошел, когда компьютер системы управления ракетой попытался конвертировать числовое значение скорости ракеты из 64 разрядного в 16 -разрядный формат. Число было слишком большим и вызвало ошибку переполнения. После отказа основной системы управления контроль над ракетой был передан резервному модулю, которому также не удалось выполнить аналогичную операцию по в общем-то несложному преобразованию, так как он использовал тот же алгоритм и такое же программное обеспечение. На создание ракеты Ariane-5 Европейским Космическим Агентством было потрачено десять лет и семь миллиардов долларов. К сожалению, Ariane-5 оказалась немножко быстрее своей предшественницы Ariane-4, а внести соответствующие корректировки в программное обеспечение почему-то забыли. 52
Mars Climate Crasher (1998) • Потери: 125 млн долларов. Катастрофа. После 286 -дневного путешествия от Земли до красной планеты, космический зонд Mars Climate Orbiter включил свои двигатели для выхода на орбиту вокруг Марса. Двигатели запустились, но космический аппарат, вследствие чересчур резвого старта, слишком глубоко вошел в атмосферу планеты (он достиг высоты в 60 км над поверхностью, на сто километров ниже планируемой орбиты и на 25 км ниже высоты, на которой еще можно было исправить ситуацию), а через некоторое время его обломки, скорее всего, таки достигли поверхности Марса. Такая же участь постигла космический аппарат Mars Polar Lander. А ведь эти зонды должны были заняться изучением марсианской погоды и климата, анализом содержания в атмосфере планеты различных газов. Причина. В программном обеспечении, контролирующем двигатели Орбитера и Ландера использовались имперские единицы силы (фунты), а не метрические (ньютоны), как впоследствии признались эксперты комиссии НАСА. 53
• Airbus A 380 и совместимость программного обеспечения Потери: дополнительный год проектных работ. Катастрофа. Проблема, возникшая перед авиационным гигантом Airbus в 2006 году знакома многим компаниям, которые имеют дело с программным обеспечением: это часто происходит, когда одна программа не может взаимодействовать с другой. В этом случае проблема была вызвана двумя версиями одной программы, программного обеспечения CATIA, которое используется для проектирования и сборки одного из крупнейших самолетов в мире, Airbus A 380. Обнаружилась проблема во взаимодействии между двумя организациями в группе: французской Dassault Aviation и заводом в Гамбурге. Причина. Оказалось, что немецкая система использовала не обновленную версию CATIA, а французская - самую последнюю версию, хотя обе стороны работали над проектом одного самолета. Поэтому, когда Airbus на завершающей стадии проектирования была предпринята попытка объединения двух половинок одного самолета, столь небольшое различие в программном обеспечении обернулось тем, что параметры монтажа одной половины проекта не соответствовали и не совпадали с проводкой в другом. Кабели не могли соединяться без существенных изменений и доработок в обоих частях проекта. Проблема была в конечном счете решена, на это потребовались деньги и время, работа над проектом растянулась еще на год. Своей вины за случившееся не хотели признать ни проектировщики, ни программисты. 54
Антипаттерны • анти-паттерны — шаблоны ошибок, которые совершаются при решении различных задач. • Частью практик хорошего программирования является именно избегание анти-паттернов. 55
Про что будет обзор? • Количество проблем, которые могут возникнуть – бесконечно. • Естественно разбираем IT • Причин проблем – тоже может быть очень большое множество • Мы сконцентрируемся на проблемах кода и того, что близко к коду
Классификация антипаттернов IT • С точки зрения разработчика выделяют: – Антипаттерны программирования • Проблемы реализации – Антипаттерны проектирования • Проблемы структуры системы – Антипаттерны управления • Проблемы управления проектом 57
Основные источники проблем ЛЮДИ программисты менеджеры заказчики 58
Назначение антипаттернов • Позволяют идентифицировать проблему прежде, чем она перерастет в угрозу для проекта или организации • Обеспечивают классификацию проблемных ситуаций и способов их решения • Упрощают поиск решения проблемы • Позволяют реализовать единый подход к решению организационных проблем и эффективное использование ресурсов 59
Решение: Придерживаться итеративной разработки
Антипаттерн проектирования Забивать гвозди микроскопом (All you have is a hammer) Проблема: • Решение всех задач одним способом 61
Решение: • Будьте открыты для всего нового 62
Что будет, если не обращать много раз на мелкие проблемы? • Антипаттерн проектирования – большой комок грязи 63
2013_09_07.pptx