В последние несколько семестров я проходил некоторые курсы по разработке программного обеспечения, и хотя я вижу выгоду во многих формализмах, я чувствую, что это ничего не говорит мне о самой программе:
- Вы не можете сказать, как программа будет работать, из спецификации Use Case, даже если она обсуждает, что может сделать программа.
- Вы не можете ничего рассказать о взаимодействии с пользователем из документа с требованиями, даже если он может включать требования к качеству.
- Диаграммы последовательности - хорошее описание того, как программное обеспечение работает как стек вызовов, но они очень ограничены и дают очень частичное представление о всей системе.
- Диаграммы классов отлично подходят для описания того, как строится система, но совершенно бесполезны, помогая вам понять, каким должно быть программное обеспечение.
Где во всем этом формализме суть: как выглядит, работает программа и какой опыт она дает? Разве не имеет больше смысла проектировать из этого? Не лучше ли выяснить, как программа должна работать через прототип, и стремиться реализовать ее по-настоящему?
Я знаю, что я, вероятно, страдаю от обучения инженеров теоретикам, но я должен спросить, делают ли они это в промышленности? Как люди выясняют, что на самом деле представляет собой программа, а не то, чему она должна соответствовать? Люди часто создают прототипы или используют формальные инструменты, такие как UML, и я просто еще не освоил их?