Здравствуйте!
Помогите, пожалуйста, советом и оценкой.
В нашей фирме за последние три года было написано ПО, удовлетворяющего нужды некоторого заказчика.
Система в принципе работает, но т.к. были ошибки на этапе постановки первоначальных задач, то потребовалось большое количество изменений, которые врезались в имеющуюся архитектуру "лишь бы работало".
Результат предсказуем: работает абы как, а дальнейшую модернизацию ПО проводить все сложнее и сложнее.
Заказчик один - "Москва", а клиентов много - по всей стране, около 100. У каждого клиента свои запросы, как следствие - много заплаток, нет единой информационной базы: что и для чего требуется. Не редка ситуация, когда находится дефект системы, а при его исправлении выясняется, что эта ситуация (проявление дефекта) специально обрабатывается системой и выдает именно такой результат именно по задумке. А по чьей задумке - не известно.
Проводить тотальную модернизацию (иными словами - спроектировать систему заново и переписать код) тяжело, т.к. система относительно новая и Заказчик оплачивать такие работы не будет, а управление фирмы с одной стороны, требует чтобы наконец-то ПО заработало стабильно, а с другой - урезает ресурсы, т.к. проект должен был закончиться ещё год-полтора назад.
Поэтому есть желание проявить силу ума и построить модель имеющейся системы, чтобы оценить - какие изменения мы можем в неё внести для стабилизации и для повышения функциональности по запросам пользователей.
Опыта и методологии подобной работы (как обычно в народном хозяйстве и бывает) в фирме нет.
Мне бы хотелось такой опыт поиметь и методологию внедрить, а также систему "починить". Есть также желание использовать UML с перспективой использования наработанных мировых методологий и существующих инструментов составления диаграмм UML.
Есть идея описать сценарии работы с имеющейся системой.
1) Актерами я планирую сделать имеющееся ПО (есть три группы приложений с GUI, каждая из групп ПО подразумевает определенную категорию задач в системе).
2) Т.к. сразу все описывать тяжело, то хочу сначала обрезать набор прецедентов, зафиксировав требования, касающиеся работы в рамках только этих прецедентов, а затем этот рабочий набор "наращивать", расширяя набор операций до полного.
3) Т.к. профессионально программистом не работал, то есть желание не расписывать самостоятельно классы и методы (может быть потом привлечь к этому ответственных за код людей), а с одной стороны показать сценарии работы ("создать объект", "удалить объект", "изменить статус объекта"), а с другой - показать изменения, которые происходят на уровне баз данных, передачи информации в служебные программы и т.п.
4) Не понятно, как выписывать наборы ограничений. То есть вот есть у нас операция по редактированию объекта, при этом есть ряд ограничений типа "если параметр1=1, то {если дата1 больше текущей, то задать дата2=текущей, иначе задать дата 2=дата1} иначе не изменять дату2".
Так вот как записывать такие ограничения, чтобы это было читаемым, обсуждаемым, редактируемым?
Можете ли сказать - жизнеспособны желания 1-3, что-то можно посоветовать по 4) ?