
- •Введение
- •Жизненный цикл it-проекта
- •Концепция проекта
- •Определение проекта
- •Выполнение проекта
- •Завершение проекта
- •Стандарты жизненного цикла
- •Выбор методологии
- •Жесткие и гибкие методологии Модель водопада
- •Итеративная разработка
- •Спиральная модель
- •Архитектура Вычислительные системы
- •Операционные системы
- •Выбор языка и среды программирования
- •Краткий обзор распространенныхпромышленных языков программирования и программных платформ
- •Разработка программного обеспечения Парадигмы программирования
- •Структурное программирование
- •Процедурное программирование
- •Функциональное программирование
- •Событийно-ориентированное программирование
- •Объектно-ориентированное программирование
- •Аспектно-ориентированное программирование
- •Визуально-ориентированное программирование
- •Метапрограммирование
- •Качество кода. Критерии качества кода
- •Форматирование и оформление
- •Комментарии
- •Читаемость
- •Обработка исключений
- •Документирование
- •Рефакторинг
- •Архитектура программного обеспечения
- •Отличие архитектуры по от детального проектирования по
- •Примеры архитектурных стилей и моделей
- •Паттерны проектирования
- •Адаптер (adapter, wrapper)
- •Абстрактная фабрика (abstractfactory, kit)
- •Стратегия (strategy, policy)
- •Менеджмент Проекта
- •Проектный менеджмент
- •Команда менеджмента проекта Команды в проекте
- •Соотношение между различными командами в проекте
- •Цели кмп в проекте
- •Создание и развитие кмп Сущность и характеристики кмп
- •Управление трудовыми ресурсами проекта и менеджмент человеческих ресурсов проекта
- •Интегрированная культура кмп
- •Оценка деятельности кмп Что такое эффективная кмп?
- •Команда Менеджмента Проекта – критический фактор успеха проекта
- •Структура проекта Определение проекта
- •Основные признаки проекта
- •Направленность на достижение целей
- •Координированное выполнение взаимосвязанных действий
- •Ограниченная протяженность во времени
- •Уникальность
- •Структура проекта
- •Разработка программного обеспечения Виртуальная реальность
- •Виртуальная реальность в играх.
- •Виртуальная реальность и 3d.
- •История виртуальной реальности.
- •Что такое виртуальная реальность?
- •Миры с различными потенциально-возможными сценариями хода событий
- •Студии виртуальной реальности на телевидении
- •Имитационное моделирование
- •Искусственный интеллект
- •Предпосылки развития науки искусственного интеллекта
- •Подходы и направления
- •Тест Тьюринга
- •Символьный подход
- •Логический подход
- •Накопление и использование знаний
- •Суть процесса искусственного мышления
- •Применение
- •Перспективы
- •Искусственный интеллект в играх
- •Распределённые и облачные вычисления Распределённые вычисления
- •История
- •Участие в проектах распределенных вычислений Общая схема участия
- •Привлечение и мотивация участников
- •Критика проектов распределенных вычислений
- •Организации, участвующие в проектах распределенных вычислений
- •Список проектов распределённых вычислений
- •Биология и медицина
- •Математика и криптография
- •Естественные науки
- •По для организации распределённых вычислений
- •Облачные вычисления
- •Терминология
- •Критика
- •Примеры
- •Потребность
- •Внешние и внутренние облака
- •Стоимость
- •Надёжность
- •Проблемы облачных технологий
- •Нейронные сети
- •Возможные способы применения и реализации
- •Категории аппаратного обеспечения инс
- •Цифровое исполнение
- •Аналоговое исполнение
- •Гибридное исполнение
- •Области применения нейронных сетей
- •Аутсорсинг
- •Мировой рынок экспортного программирования
- •Прогноз развития мирового и российского рынка
- •Белорусскиекомпании
- •Типы аутсорсинга
- •Развитие cad технологий
- •Исправление ошибок
- •Системы старшего класса
- •Большие сборки
- •Зачем нужны сборки
- •Стратегии упрощения
- •Моделирование
- •Параметризация
- •Гибридное моделирование
- •Практические результаты
- •Проектная база: технология моделирования
- •Переход к гибридному моделированию
- •Электронная сборка
- •Модель акторов
- •История
- •Фундаментальные концепции
- •Формальные системы
- •Применения
- •Семантика передачи сообщений
- •Локальность
- •Безопасность
- •Актуальность в настоящий момент
- •Социальный компьютинг
- •Сферы применения
- •С чего начать
- •Тестирование программного обеспечения Уровни тестирования
- •Модульное тестирование
- •Интеграционное тестирование
- •Системы непрерывной интеграции
- •Системное тестирование программного обеспечения
- •Функциональное тестирование
- •Регрессионное тестирование
- •Виды тестов регрессии
- •Нагрузочное тестирование
- •Тестирование «белого ящика» и «чёрного ящика»
- •Серый ящик. Комбинация предыдущих.
- •Права автора Личные неимущественные права:
- •Личные имущественные права:
- •Способы защиты авторского права
- •Защита при помощи компьютерных компакт-дисков
- •Методы взлома/обхода технических мер защиты
- •Нарушение авторских прав
- •Типы лицензий
- •Проприетарные лицензии
- •Свободные и открытые лицензии
- •Пиратское по
- •Взгляд в будущее
- •Взлом информации и защита от взлома Классы атак Аутентификация (Authentication)
- •Авторизация (Authorization)
- •Атакинаклиентов (Client-side Attacks)
- •Выполнение кода (Command Execution)
- •Разглашение информации (Information Disclosure)
- •Логические атаки (Logical Attacks)
- •Компьютерные вирусы
- •Классификация вирусов
- •Антивирусные программы
- •Методы обнаружения вирусов
- •Метод соответствия определению вирусов в словаре
- •Метод обнаружения странного поведения программ
- •Метод обнаружения при помощи эмуляции
- •Метод «Белого списка»
- •Эвристический анализ
- •Классические hips
- •Экспертные hips
- •Жизненный цикл вируса.
- •Стратегии развития крупнейших it-компаний
- •Перспективы развития Microsoft
- •Секреты успеха
- •Крупнейшие производители современных операционных систем и их продукты
- •Основные заблуждения по поводу Macintosh
- •Технические подробности операционной системы
- •Причины успеха и будущее компании
- •История создания Linux
- •Свободное программное обеспечение
- •Графические интерфейсы Linux
- •Дистрибутивы Linux
- •Безопасность Linux
- •Краткая история FreeBsd и unix
- •Рождение системы bsd
- •Bsd на платформах Intel х86
- •Рождение FreeBsd
- •Преимущества FreeBsd
- •Различия между FreeBsd и Windows
- •Мобильные ос
Комментарии
Хорошие комментарии не повторяют код и не объясняют его. Они поясняют его цель.Комментарии должны объяснять намерения программиста на более высоком уровне абстракции, чем код.
Читаемость
Дать определение легко читаемого кода, скорее всего, просто невозможно. Мы можемговорить лишь о том, что облегчает или усложняет чтение. Частично этот аспект перекликается с первым из слагаемых – использованием соглашений. В самом деле, поддержание одинакового форматирования, принципов именования и т.п. сильно облегчает восприятие кода. Другой весьма важный аспект легкой читаемости кода – размер методов. Каким бы ни был код, как бы он ни соответствовал всяческим стандартам и соглашениям – метод в двести строк воспринять невозможно. В сто строк – очень тяжело. Любой код можно разбить на законченные логические блоки, каждый из которых представляет собой некое действие.
Обработка исключений
Исключения — это специальное средство, позволяющее передать в вызывающий кодвозникшие ошибки или исключительные ситуации. Если код в некотором методе встречает неожиданную ситуацию и не знает, как ее обработать, то он генерирует исключение, т. е. фактически умывает руки со словами: «Я не знаю, что с этим делать, надеюсь, кто-нибудь другой знает, как на это реагировать!» Код, не имеющий понятия о контексте ошибки, может вернуть управление другой части системы, которая, возможно, лучше знает, как интерпретировать ошибку и сделать с ней что-то осмысленное. Исключения, используемые разумно, могут уменьшить сложность, а используемые чрезмерно, могут сделать код абсолютно нечитаемым.
Документирование
Хорошая документация — свидетельство профессиональной гордости, выражаемой
программистом в программе. Документация имеет много вариантов. Документация программного проекта складывается из информации, содержащейся в листингах исходного кода, и внешней информации, которая обычно имеет форму отдельных документов или папок разработки блоков. В крупных проектах основная часть документации является внешней, описывающей решения, принятые при проектировании классов или методов, рассмотренные варианты и мотивы выбора окончательных подходов.
Часто назначение метода очевидно. Часто, но не всегда. Если метод возвращает значениеполя объекта – тут документировать особо нечего. Хотя, можно написать, что именно он возвращает, иногда это бывает полезно, особенно, когда объект использует кто-то, незнакомый с его внутренней структурой. Но даже если метод размером всего строк в пять-шесть – уже стоит описать его функции. Есть такое понятие – замыливание взгляда. Когда смотришь на код, и не видишь очевидных вещей. Тогда документация может оказать очень большую помощь. Можно потратить полчаса на копание в коде, а можно пару минут на чтение документации метода. В которой описано, как он себя ведет и почему.
Рефакторинг
Иногда код деградирует при сопровождении, а иногда он изначально имеет невысокоекачество. В обоих случаях на это — и на необходимость рефакторинга указывают некоторые предупреждающие знаки.
Код повторяется
Метод слишком велик
Цикл слишком велик или слишком глубоко вложен в другие циклы
Класс имеет плохую связность
Метод использует больше элементов другого класса, чем своего собственного
Класс имеет слишком ограниченную функциональность
По цепи методов передаются бродячие данные (данные, передаваемые в метод лишьзатем, чтобы он передал их другому методу)
Один класс слишком много знает о другом классе
Сложный код объясняется при помощи комментариев. В важности комментариев трудноусомниться, но их не следует использовать для объяснения плохого кода. Старая мудростьгласит: «Не документируйте плохой код — перепишите его».
Когда не следует выполнять рефакторинг:
Не рассматривайте рефакторинг как оправдание написания плохого кода с намерениемисправить его позднее
Не рассматривайте рефакторинг как способ, позволяющий избежать переписывания кода
Иногда имеющийся код настолько запутан, что подвергнуть его рефакторингу, конечно,можно, но проще начать все с самого начала
Ещё один случай, когда следует воздержаться от рефакторинга, это близость даты
завершения.
Наиболее употребимые методы рефакторинга:
Изменениесигнатурыметода (Change Method Signature)
Инкапсуляция поля (EncapsulateField)
Выделение класса (ExtractClass)
Выделение интерфейса (ExtractInterface)
Выделение локальной переменной (ExtractLocalVariable)
Выделение метода (ExtractMethod)
Генерализация типа (GeneralizeType)
Встраивание (Inline)
Введениефабрики (Introduce Factory)
Введениепараметра (Introduce Parameter)
Подъём поля/метода (PullUp)
Спуск поля/метода (Push Down)
Замена условного оператора полиморфизмом (Replace Conditional with Polymorphism)