- •З курсу
- •З курсу
- •Содержание
- •Часть I. Инженерные основы программного обеспечения 10
- •Часть II. Требования к программному обеспечению 33
- •Часть III. Моделирование программного обеспечения 52
- •Часть IV. Технологии разработки программного обеспечения 124
- •Часть V. Письменная коммуникация. Документирование проекта Программного обеспечения 145
- •Часть VI. Управление проектом программного обеспечения 192
- •Предисловие
- •Часть I. Инженерные основы программного обеспечения
- •1. Введение в программную инженерию
- •1.1. Вопросы и ответы об инженерии программного обеспечения
- •1.2. Профессиональные и этические требования к специалистам по программному обеспечению
- •2. Системотехника вычислительных систем
- •2.1. Интеграционные свойства систем
- •2.2. Система и ее окружение
- •2.3. Моделирование систем
- •2.4. Процесс создания систем
- •2.5. Приобретение систем
- •3. Процесс создания программного обеспечения
- •3.1. Модели процесса создания программного обеспечения
- •3.2. Итерационные модели разработки программного обеспечения
- •3.3. Спецификация программного обеспечения
- •3.4. Проектирование и реализация программного обеспечения
- •3.5. Эволюция программных систем
- •3.6. Автоматизированные средства разработки программного обеспечения
- •4. Технологии производства программного обеспечения
- •Часть II. Требования к программному обеспечению
- •5. Требования к программному обеспечению
- •5.1. Функциональные и нефункциональные требования
- •5.2. Пользовательские требования
- •5.3. Системные требования
- •5.4. Документирование системных требований
- •6. Разработка требований
- •6.1. Анализ осуществимости
- •6.2. Формирование и анализ требований
- •6.3. Аттестация требований
- •6.4. Управление требованиям
- •7. Матрица требований. Разработка матрицы требований
- •Часть III. Моделирование программного обеспечения
- •8. Архитектурное проектирование
- •8.1. Структурирование системы
- •8.2. Модели управления
- •8.3. Модульная декомпозиция
- •8.4. Проблемно-зависимые архитектуры
- •9. Архитектура распределенных систем
- •9.1. Многопроцессорная архитектура
- •9.2. Архитектура клиент/сервер
- •9.3. Архитектура распределенных объектов
- •9.4. Corba
- •10. Объектно-ориентированное проектирование
- •10.1. Объекты и классы объектов
- •10.2. Процесс объектно-ориентированного проектирования
- •10.2.1. Окружение системы и модели ее использования
- •10.2.2. Проектирование архитектуры
- •10.2.3. Определение объектов
- •10.2.4. Модели архитектуры
- •10.2.5. Специфицирование интерфейсов объектов
- •10.3. Модификация системной архитектуры
- •11. Проектирование систем реального времени
- •11.1. Проектирование систем реального времени
- •11.2. Управляющие программы
- •11.3. Системы наблюдения и управления
- •11.4. Системы сбора данных
- •12. Проектирование с повторным использованием компонентов
- •12.1. Покомпонентная разработка
- •12.2. Семейства приложений
- •12.3. Проектные паттерны
- •13. Проектирование интерфейса пользователя
- •13.1. Принципы проектирования интерфейсов пользователя
- •13.2. Взаимодействие с пользователем
- •13.3. Представление информации
- •13.4. Средства поддержки пользователя
- •13.5. Оценивание интерфейса
- •Часть IV. Технологии разработки программного обеспечения
- •14. Жизненный цикл программного обеспечения: модели и их особенности
- •14.1. Каскадная модель жизненного цикла
- •14.2. Эволюционная модель жизненного цикла
- •14.2.1. Формальная разработка систем
- •14.2.2. Разработка программного обеспечения на основе ранее созданных компонентов
- •14.3. Итерационные модели жизненного цикла
- •14.3.1 Модель пошаговой разработки
- •14.3.2 Спиральная модель разработки
- •15. Методологические основы технологий разработки программного обеспечения
- •16. Методы структурного анализа и проектирования программного обеспечения
- •17. Методы объектно-ориентированного анализа и проектирования программного обеспечения. Язык моделирования uml
- •Часть V. Письменная коммуникация. Документирование проекта Программного обеспечения
- •18. Документирование этапов разработки программного обеспечения
- •19. Планирование проекта
- •19.1 Уточнение содержания и состава работ
- •19.2 Планирование управления содержанием
- •19.3 Планирование организационной структуры
- •19.4 Планирование управления конфигурациями
- •19.5 Планирование управления качеством
- •19.6 Базовое расписание проекта
- •20. Верификация и аттестация программного обеспечения
- •20.1. Планирование верификации и аттестации
- •20.2. Инспектирование программных систем
- •20.3. Автоматический статический анализ программ
- •20.4. Метод "чистая комната"
- •21. Тестирование программного обеспечения
- •21.1. Тестирование дефектов
- •21.1.1. Тестирование методом черного ящика
- •21.1.2. Области эквивалентности
- •21.1.3. Структурное тестирование
- •21.1.4. Тестирование ветвей
- •21.2. Тестирование сборки
- •21.2.1. Нисходящее и восходящее тестирование
- •21.2.2. Тестирование интерфейсов
- •21.2.3. Тестирование с нагрузкой
- •21.3. Тестирование объектно-ориентированных систем
- •21.3.1. Тестирование классов объектов
- •21.3.2. Интеграция объектов
- •21.4. Инструментальные средства тестирования
- •Часть VI. Управление проектом программного обеспечения
- •22. Управление проектами
- •22.1. Процессы управления
- •22.2. Планирование проекта
- •22.3. График работ
- •22.4. Управление рисками
- •23. Управление персоналом
- •23.1. Пределы мышления
- •23.1.1. Организация человеческой памяти
- •23.1.2. Решение задач
- •23.1.3. Мотивация
- •23.2. Групповая работа
- •23.2.1. Создание команды
- •23.2.2. Сплоченность команды
- •23.2.3. Общение в группе
- •23.2.4. Организация группы
- •23.3. Подбор и сохранение персонала
- •23.3.1. Рабочая среда
- •23.4. Модель оценки уровня развития персонала
- •24. Оценка стоимости программного продукта
- •24.1. Производительность
- •24.2. Методы оценивания
- •24.3. Алгоритмическое моделирование стоимости
- •24.3.1. Модель сосомо
- •24.3.2. Алгоритмические модели стоимости в планировании проекта
- •24.4. Продолжительность проекта и наем персонала
- •25. Управление качеством
- •25.1. Обеспечение качества и стандарты
- •25.1.1. Стандарты на техническую документацию
- •25.1.2. Качество процесса создания программного обеспечения и качество программного продукта
- •25.2. Планирование качества
- •25.3. Контроль качества
- •25.3.1. Проверки качества
- •25.4. Измерение показателей программного обеспечения
- •25.4.1. Процесс измерения
- •25.4.2. Показатели программного продукта
- •26. Надежность программного обеспечения
- •26.1. Обеспечение надежности программного обеспечения
- •26.1.1 Критические системы
- •26.1.2. Работоспособность и безотказность
- •26.1.3. Безопасность
- •26.1.4. Защищенность
- •26.2. Аттестация безотказности
- •26.3. Гарантии безопасности
- •26.4. Оценивание защищенности программного обеспечения
- •27. Совершенствование производства программного обеспечения
- •27.1. Качество продукта и производства
- •27.2. Анализ и моделирование производства
- •27.2.1. Исключения в процессе создания по
- •27.3. Измерение производственного процесса
- •27.4. Модель оценки уровня развития
- •27.4.1. Оценивание уровня развития
- •27.5. Классификация процессов совершенствования
23.3. Подбор и сохранение персонала
Одной из основных функциональных обязанностей менеджера проекта является подбор персонала. Только в исключительных случаях менеджеры имеют право назначать наиболее подходящих для определенной работы сотрудников, независимо от обязанностей, которые они выполняют в текущий момент, или от финансовых возможностей компании. В основном менеджер проекта не имеет права окончательного выбора персонала. Он может быть вынужден принимать в команду разработчиков любого сотрудника, который есть в компании и более-менее подходит для этого, причем, как правило, найти подходящего человека необходимо в максимально короткий срок. Также свободному подбору персонала может препятствовать ограниченный бюджет проекта. Именно последний фактор может стать значительным препятствием в найме квалифицированных (но дорогих) программистов, которые могли бы работать над проектом.
В табл. 23.1 показаны основные факторы, которые могут оказать влияние на решение менеджера в выборе будущего персонала, если он имеет для этого относительную свободу. Трудно представить эти факторы в порядке их значимости, поскольку они зависят от области применения разрабатываемого ПО, вида проекта, а также от квалификации и опыта будущих членов группы.
Таблица 23.1. Факторы, влияющие на выбор персонала
Фактор |
Пояснение |
Знания об области применения ПО |
Для того чтобы разработать хорошо функционирующую систему, программист должен иметь четкое представление о той прикладной области, где будет применять разрабатываемое ПО |
Опыт работы на многих компьютерных платформах |
Этот фактор может оказаться важным при низкоуровневом программировании, в общем случае он не является решающим
|
Знание языка программирования |
Этот фактор применим для краткосрочных проектов, когда просто не хватает времени для изучения нового языка |
Образование |
Образование служит своеобразным показателем тех основных знаний и умений, которыми должен владеть кандидат, а также его способности к обучению. Этот показатель становится менее значимым пропорционально опыту, получаемому в работе над различными проектами |
Коммуникабельность |
Этот фактор достаточно важен, так как в процессе реализации проекта программистам нужно будет общаться в устной и в письменной форме с другими специалистами, менеджерами и потребителями |
Способность адаптироваться |
Показателем может служить разнообразный опыт, полученный ранее. Этот фактор также может показать способность к обучению |
Жизненная позиция |
Люди, работающие над проектом, должны любить свою работу и стремиться получать новые знания и навыки. Это очень показательный фактор, однако его трудно оценить
|
Личностные качества |
Это очень важный признак, однако также трудный в оценивании. Ведь члены группы должны быть совместимы (в разумной мере, естественно) для общей работы. Не существует отдельного типа личности, который в большей или меньшей степени соответствует специалисту в области инженерии ПО |
Решение о назначении нового сотрудника по проекту основывается на трех видах информации.
1. Информация об образовании и практическом опыте, предоставляемая кандидатом на должность (резюме или автобиография).
2. Информация, получаемая при интервьюировании кандидата.
3. Рекомендации от других людей, имеющих опыт совместной работы с кандидатом.
Некоторые компании пользуются разнообразным набором тестов для оценивания кандидатов. Это может быть проверка способности работать программистом и психологические тесты. Такие тесты направлены на создание психологической карты личности, определяют отношение опрашиваемого к работе определенного типа и способность ее выполнить. Некоторые менеджеры убеждены в абсолютной бесполезности таких тестов, другие считают, что с помощью тестов они получают полезную информацию для отбора персонала. Как уже упоминалось ранее, способность решать задачи относится к сфере построения семантических моделей, что само по себе занимает много времени. Тесты на профессиональную пригодность и психологические задачи основаны в большей мере на быстроте ответов на вопросы. До сих пор я не нашел убедительного доказательства определения способности решать практические задачи на основе тестов на профессиональную пригодность.
Если менеджеры проектов сталкиваются с трудностями в подборе подходящего персонала с нужными способностями и опытом, они вынуждены составлять команды из неопытных программистов, что, в свою очередь, вызывает определенные проблемы, связанные с неосведомленностью в области применения ПО или технологий, используемых в проекте. Часто причина такой ситуации кроется в том, что в некоторых организациях технически одаренные сотрудники быстро достигают вершины карьеры. Для дальнейшего продвижения таким сотрудникам необходим статус менеджера. Если переводить их в категорию менеджеров, для компании это будет означать потерю ценного технически квалифицированного персонала. Чтобы избежать такой ситуации, некоторые компании учредили в своей структуре два параллельных рода деятельности – технический и управленческий, имеющих одинаковую значимость. Опытный технический персонал ценится на таком же уровне, как и менеджеры. С продвижением карьеры специалист может ориентироваться на технический либо управленческий род деятельности и переходить на тот или иной вид деятельности без потери статуса и зарплаты.