Мы не должны допускать предложений типа «70 % стоимости программного обеспечения приходится на этап продолжающейся разработки». Во многих случаях это правда; во многих — нет. Это слишком общее высказывание. Мы должны добиваться большей точности, использовать уточняющие определения. Люди, не являющиеся специалистами в области вычислительной техники, не только введены в заблуждение относительно вычислительных машин и их программного обеспечения, но также возмущены жаргоном и небрежностью, царящими в нашей отрасли[11]. Если профессионал не настаивает на точности высказываний, является ли он подлинным профессионалом?
Глава 5
Разработка программного обеспечения
Разделив все программное обеспечение на категории, изучим теперь подробнее процесс его разработки. Именно эта область доставляет в настоящее время наибольшие неприятности.
Свойства, присущие всем программам, дают нам возможность глубже проникнуть в более тонкие и более важные характеристики программ. Имеется по крайней мере 12 таких свойств или характеристик. Взгляните на табл. 5.1.
Таблица 5.1
| Характеристики программ | Обычно носят название |
|---|---|
| 1. Заставляет вычислительную машину выполнить задание | Функция |
| 2. Занимает память машины | Размер |
| 3. Тратит ресурсы ЦП | Эффективность |
| 4. Легкость использования | Практичность |
| 5. Легкость восстановления после сбоя | Устойчивость; восстанавливаемость |
| 6. Содержит ошибки | Правильность |
| 7. Требует времени для создания | График разработки |
| 8. Требует людей для создания | Людские ресурсы на разработку |
| 9. Требует специального инструментария для разработки | Материальные ресурсы на разработку |
| 10. Требует денег для создания | Стоимость |
| 11. Модифицируема | Архитектура, структура |
| 12. Существует по крайней мере в одной форме, а нужны две | Документация |
Стремление воплотить эти характеристики в программу приводит к конфликтам. В программах, написанных очень быстро (характеристика 7), обычно крайне неэкономно используется память и машинное время (характеристики 2 и 3) по сравнению с программами, которые писались медленнее. Быстро написанные программы часто не выполняют на все 100 % функции, которые они, по предположению, должны были выполнять (1). Программа может печатать почти любую ведомость, однако нам все же приходится держать двух сотрудников для выполнения функций, которые должна была бы (и могла бы) выполнять машина, но которые не были вовремя запрограммированы. Такое случается очень часто.
Если программа печати ведомости нужна нам к 1 июня будущего года, мы можем на этот срок включить дополнительно в группу разработки нескольких программистов, чтобы они помогли сократить время работы. Очевидно, что если на создание программы требуется 100 чел. — мес., то мы могли бы выделить на ее создание 10 программистов, которые будут работать в течение 10 мес. Но сделать эту же работу за один месяц, бросив на нее 100 человек, невозможно.
Укороченные графики могут совершенно разрушить попытки построить стройную, легко модифицируемую структуру (11). Малая стоимость разработки (10) находится в явном противоречии со всеми другими аспектами. (См. табл. 5.2.)
Таблица 5.2. Двенадцать характеристик программы
| Фаза разработки | Требует времени для создания | График разработки |
| Требует людей для создания | Группа разработки | |
| Требует специального инструментария для создания | Средства разработки | |
| Требует денег для создания | Стоимость | |
| Фаза использования | Заставляет машину выполнить задание | Функция |
| Занимает память машины | Размер | |
| Использует ресурсы ЦП | Эффективность | |
| Легка для использования | Практичность | |
| Легко восстанавливается до рабочего состояния | Восстанавливаемость | |
| Содержит ошибки | Правильность | |
| Фаза сопровождения | Модифицируема | Архитектура |
| Существует по крайней мере в одной форме, а нужны две | Документация |
11