и возможностях их решений Пройти все этапы создания продукта от идеи до выкладывания на публику Решить задачи клиентов Серверное программирование: Ruby on Rails Клиентское программирование: HTML, CSS, AJAX, JavaScript Развёртывание приложения
должна быть завершена до начала производства и доставки. В случае ошибок: возврат (очень плохо). Software: ~0 Ожидается, что со временем программа будет улучшаться. Есть ошибки? Скачай новую версию. Hardware устаревает. Software живёт очень-очень долго.
всё ещё удовлетворяет потребности клиента. Его сложно развивать и улучшать из-за ошибок в проектировании или древних технологий. 60% от стоимости поддержки старого кода — добавление нового функционала. 17% — исправление ошибок. Beautiful code: удовлетворяет потребности клиента и легок в поддержке и развитии.
раньше найден баг — тем дешевле он обходится проекту. Очень-очень много документации: новому человеку проще втянуться в работу. Для кого это хорошо работает? Для NASA. Какие проблемы? Клиентам может не понравиться то, что они увидят в конце. Очень часто только по завершении работы разработчики понимают как это надо было сделать на самом деле.
недопонимания. Тем не менее, это требует очень много времени (от 6 до 24 месяцев). Клиенты могут передумать: «Это то, что мы просили, но не то, что мы хотим.»
и инструменты. Работающее программное обеспечение важнее, чем полная документация. Сотрудничество с заказчиком важнее, чем контрактные обязательства. Реакция на изменения важнее, чем следование плану.
— постоянное улучшение продукта. Разработчики постоянно улучшают не до конца готовый, но работающий продукт, получая отзывы от клиентов в конце каждой итерации (каждые ~2 недели). Agile использует Test-Driven Development (TDD) для уменьшения ошибок, User Stories для валидации требований клиентов, Velocity для измерения прогресса.
Вы создали правильный продукт? Это то, что хотел клиент? Верна ли спецификация? HW — верификация, SW — валидация. 2 варианта проверки: тестирование и формальные методы.
разработки пишутся разные тесты. Одни тесты не должны повторять другие. Системные или приёмочные тесты Программа отвечает своим спецификациям. Интеграционные тесты Интерфейсы между модулями соответствуют предположениям и работают корректно. Модульные (функциональные) Проверяют работу между классами, а не внутри класса. Юнит-тесты Отдельный метод делает то, что должен.
тестировании. Регрессионное тестирование: выполнение старых тестов, чтобы удостовериться, что новый функционал не сломал старый. Непрерывная интеграция: постоянное регрессионное тестирование на каждом этапе. Agile => Test-Driven Design (TDD): написание тестов до написания самого кода.
программы ей соответствует. Варианты: Человек Компьютер с помощью методов автоматического доказательства теорем. Компьютер с помощью проверки моделей. Проверяет все возможные состояния системы.
в починке, сложные в тестировании. SW критичное к безопасности. Тестирование ядра ОС: 10К LOC => $500/LOC NASA SW $80/LOC В веб-разработке SW быстро меняется, легко чинится, легко тестируется => формальные методы не нужны.
вероятнее, что вы найдете ошибки в коде. Хоть и трудно достижимо, но 100% покрытие кода тестами даёт уверенность в праивльности работы программы. Каждый тест верхнего уровня делегирует детальное тестирование на тесты низких уровней. Юнит-тестирование работает с отдельным классом, а модульное тестирование с набором классов.
вероятнее, что вы найдете ошибки в коде. Хоть и трудно достижимо, но 100% покрытие кода тестами даёт уверенность в праивльности работы программы. Каждый тест верхнего уровня делегирует детальное тестирование на тесты низких уровней. Юнит-тестирование работает с отдельным классом, а модульное тестирование с набором классов.
2 раза. HW становится можщнее. Быстрые процессоры и много памяти. SW становится «мощнее». Приходится увеличивать КПД своей работы. Ясность и краткость Синтез Повторное использование Автоматизация и инструменты
vs. a.should be >= 7 Повышение уровня абстракции: Языки высокого уровня против ассемблера Автоматическое управление памятью: Java против C Скриптовые языки программировани: отражение и метапрограммирование.
Техники повторного использования: процедуры и функции стандартные библиотеки объектно-ориентированное программирование: повторное использование набора поведений Паттерны проектирования: повторное использование архитектуры системы, даже в тех случаях, когда реализации отличаются.
экономить время и повысить аккуратность. make Инструменты должны быть надёжными, функциональными и «комфортными». Хороший разработчик постоянно изучает новые инструменты: Cucumber, RSpec, ...
производительности главной для языков высокого уровня является повторное использование кода. Ясный синтаксис скорее всего будет приводить к меньшему количеству ошибок и будет легче в поддержке. Что из этого верно?
производительности главной для языков высокого уровня является повторное использование кода. Ясный синтаксис скорее всего будет приводить к меньшему количеству ошибок и будет легче в поддержке. Что из этого верно?
Традиционное SW: программа устанавливается и работает на компьютере пользователя. SaaS доставляет SW и данные пользователю через интернет с помощью тонкого клиента (браузер). Поиск, социальные сети, видео Microsoft Office 365 SaaS — это будущее.
OS. Не надо переживать за утрату данных. (Почти!) Группам легче работать с одими и теми же данными. Если данных много и они часто меняются, проще держать одну копию на центральном сервере. 1 копия SW, контролируемое HW окружение => разработчики не отвлекаются на совместимость. 1 копия => упрощает апгрейд для разработчиков и «прячет» от пользователей.
циклом. Много фреймворков для Agile/SaaS. Ruby on Rails = <3 Ruby — современный скриптовый язык: объектно- ориентированный, функциональный, автоматическое управление памятью, динамическая типизация, повторное использование с помощью модулей, метапрограммирование. Rails популярен: Twitter, Github, Groupon, ...
SaaS? Не теряет данные: Почта. Работа в группах: Документы. Большой/изменяющийся объем данных: YouTube. Нет необходимости в апгрейде при обновлении приложения: Поиск
SaaS? Не теряет данные: Почта. Работа в группах: Документы. Большой/изменяющийся объем данных: YouTube. Нет необходимости в апгрейде при обновлении приложения: Поиск
от юнит-тестов до приёмочных тестов. Продуктивнось: ясность, синтез, повторное использование, автоматизация и инструменты. SaaS — очень удобно для разработчиков и пользователей.