2009-10-07 2 views
2

Мой новый проект - обновить Программное обеспечение, которое клиент использовал в течение многих лет. Как все мы знаем ... за эти годы все росло.Как обновить странные приложения без ошибок?

Так что я посмотрел на старое приложение. получить всю информацию об этом и написать много рассказов пользователей. После очистки я узнал, что сделал (в конце концов) ошибку, которая приводит к той же проблеме, что и у клиента.

Это другая ошибка, которую я сделал, но очень раздражает.

Как вы, ребята, допускаете такие ошибки. Вы отказываетесь смотреть на старое приложение?

+0

Вы не говорите, что либо ошибки или проблема заключается в том, что это противоречивое требование, противоречивые требования, является ли это плохим предположением, экологические ограничения. Если мы не знаем, какая ошибка была сделана, как мы можем предложить методы, чтобы избежать этого? Единственное предложение, которое я могу сделать, - это тщательный экспертный обзор, но даже это иногда случается. –

+0

Я ошибся из-за базы данных. Многие вещи из старого приложения, такие как обработка новых данных, основывались на этой базе данных. После его перепроектирования ... я совершил некоторую ошибку, вызванную обработкой новых данных. Это очень раздражает. Я хочу предотвратить такую ​​ошибку ... Я очень устаю от старого кода/базы данных. – bastianneu

ответ

2

Это очень трудная проблема. Я опишу, что бы я сделал (и сделал), если старый код существенно большой.

В общем, старый код полон решений, исправлений ошибок и недокументированных действий. Если вы выбросите это, вы обязательно совершите многие из тех же ошибок, которые они сделали, а затем еще немного.

Для чего это стоит, вы должны развиваться системы вокруг старого кода. Попробуйте отвлечься от старого кода, например, создав интерфейсы, а затем реализовать их, вызвав старый код сначала. Напишите много модульных тестов для интерфейсов и узнайте, как работает старый код. Новые функции должны получить новые реализации, поэтому старый код и новый код будут жить бок о бок, до тех пор, пока это необходимо, и, возможно, даже навсегда.

Теперь, медленно и тщательно делайте вторжения в старый код, рефакторинг, замену его и удостоверение, что ваши тесты все еще проходят. Также напишите новые тесты. Если у вас есть регрессионные тесты для системы (кроме модульных тестов), они все равно должны пройти.

Это нормально, чтобы не прикасаться к старому коду, как правило, если он работает нормально, ошибок нет, он передает ваши тесты, и его не нужно расширять.

Некоторые хорошие ресурсы:

http://martinfowler.com/bliki/StranglerApplication.html

Working Effectively with Legacy Code

Я также нашел его в StackOverflow уже:

Strategy for large scale refactoring

0

Единичные испытания. Но если у вас не было модульных тестов раньше, они не помогут вам.

+0

Модульные тесты не предотвращают ошибок при планировании проекта. –

+0

Основная проблема в том, что моя программа работает правильно. Так что это не настоящая ошибка программирования. Трудно найти такие проблемы с дизайном. – bastianneu

0

Этот вопрос звучит так, будто вы модифицируете существующий код, «очищая его», а не переписывая его. Этот процесс иногда называют «Рефакторинг». Есть замечательная книга по рефакторингу под названием «Рефакторинг» Мартина Фаулера. Он начинает с предоставления конкретных примеров рефакторинга по фактическому коду и связывает будущие главы о конкретных методах, которые он использует рядом с кодом.

Одна из первых вещей, которые он говорит о рефакторинге, заключается в том, чтобы написать тест, чтобы проверить, что код, который вы меняете, делает то же самое для некоторого общего набора входов. Затем, когда вы «реорганизуете» код, запустите тест против него, чтобы убедиться, что он работает точно так же. Это может быть pre-bugfix или post-bugfix. Но если есть ошибка, конечно, вы должны выкачать ее в дополнение к рефакторингу.

+0

Рефакторинг - отличная идея. Поскольку это приложение другого типа (Access made), это может стать затруднительным. Я создаю новое приложение Wep на основе Grails. – bastianneu

0

Зачем переписывать с нуля? Возможно, вы сможете повторно использовать части существующего приложения и реорганизовать те части, которые необходимо изменить.

+0

Это старое приложение на основе доступа. Немного устаревшее и недостаточно сильное, чтобы удовлетворить потребности клиентов. – bastianneu

0

Когда я собираюсь воссоздать то, что уже было сделано, я стараюсь не смотреть на уже существующую реализацию. Я стараюсь сосредоточиться на том, что он должен выполнить, вместо того, чтобы смотреть на то, как он пытается это сделать.

+0

Да, я согласен с тобой. Но как насчет особых потребностей клиентов, которые уже встроены? Вы спрашиваете у клиента, что ... я выполняю это, читая код и тестируя приложение. – bastianneu

+0

Это в основном то же самое: вам нужно выяснить, что приложение должно делать не то, что в настоящее время делает. Когда вы смотрите на существующий исходный код, вы обязаны дублировать существующие ошибки - именно этого вы и пытаетесь избежать. Чтобы не допустить, чтобы вам нужно было связаться с клиентом и выяснить, что именно они действительно хотели. – Bombe

Смежные вопросы