Как инженеры, мы все "проектируем" артефакты (здания, программы, схемы, молекулы ...). Это действие (дизайн-глагол), которое дает какой-то результат (дизайн-существительное).
Я думаю, что мы все согласны с тем, что дизайн-существительное отличается от самого артефакта.
Ключевым видом деятельности в программном бизнесе (на самом деле, в любом бизнесе, где необходимо улучшить конечный артефакт продукта) является понимание «дизайна (существительное)». Тем не менее, как сообщество, мы, похоже, почти полностью терпим неудачи при его записи, о чем свидетельствует количество усилий, которые люди прикладывают для повторного обнаружения фактов о своей кодовой базе. Попросите кого-нибудь показать вам дизайн своего кода и посмотреть, что вы получите.
Я думаю, что дизайн программного обеспечения имеет:
- Явная спецификация того, что должно делать программное обеспечение и насколько хорошо оно это делает
- Явная версия кода (эта часть проста, у всех есть)
- Объяснение того, как каждая часть кода служит для достижения спецификации (например, связь между фрагментами спецификации и фрагментами кода)
- Обоснование , почему этот код так , как это (например, почему конкретный выбор , а не другой)
То, что НЕ является дизайном, - это особый взгляд на код. Например, [не указывать конкретно] диаграммы UML не являются проектами. Скорее, это свойства, которые вы можете получить из кода, или, возможно, свойства, которые вы хотели бы получить из кода. Но, как правило, вы не можете получить код из UML.
Почему после 50 с лишним лет создания программного обеспечения у нас нет регулярных способов выразить это? (Не стесняйтесь противоречить мне с явными примерами!)
Даже если мы это сделаем, большая часть сообщества, кажется, настолько сосредоточена на получении «кода», что дизайн-существительное в любом случае теряется. (ИМХО, пока дизайн не станет целью разработки, с артефактом, извлеченным из проекта, мы не собираемся обойти это).
Что вы видели в качестве средства для записи дизайна (в смысле, я описал это)? Явные ссылки на статьи были бы хорошими. Как вы думаете, почему конкретные и общие средства не были успешными? Как мы можем изменить это?
[У меня есть свои идеи, которые отражают вышеприведенную точку зрения, но я заинтересован в ответах других людей ... и трудно реализовать мою схему [[и, возможно, в этом реальная проблема: -]]]
РЕДАКТИРОВАТЬ 2011/1/3: Один из потоков ответов намекает на то, что «документация» (предположительно, текстовая, в частности неформальная) может быть адекватной. Думаю, мне следует уточнить, что я не верю в это. Инструменты CASE появились на сцене начиная с 80-х годов, но ранние инструменты в основном просто захватывали пиксели для диаграмм того, что вы нарисовали; в то время как инструменты были, возможно, коммерчески успешными, они действительно были не очень полезны. Ключевым моментом было то, что, если дополнительные «конструктивные» артефакты формально не интерпретируются, вы не сможете получить серьезную помощь инструмента. Я полагаю, что то же самое относится к любой долгосрочной полезной форме захвата дизайна: если у нее нет формальной структуры, она не будет иметь никакого реального использования. Текстовые документы в значительной степени не проходят этот тест.