SELECT column1
, column2
FROM table1
WHERE column3 IN
(
SELECT TOP(1) column4
FROM table2
INNER JOIN table3
ON table2.column1 = table3.column1
)
мне нравится иметь весь "", в передней стороне , этот способ, которым я никогда не ищу их когда ошибка в строке X от редактора SQL.
<час>
SELECT sdcolumn123
, dscolumn234
, sdcolumn343
, ffcolumn434
, sdcolumn543
, bvcolumn645
vccolumn754
, cccolumn834
, vvcolumn954
, cvcolumn104
FROM table1
WHERE column3 IN
(
...
)
SELECT sdcolumn123, dscolumn234, asdcolumn345, dscolumn456, ascolumn554, gfcolumn645 sdcolumn754, fdcolumn845, sdcolumn954, fdcolumn1054
FROM table1
WHERE column3 IN
(
...
)
я нашел легче и более быстрым в первом примере. Надеюсь, что этот пример показывает Вам больше моей точки зрения.
Я использую запросы на изменение / отчеты об ошибках, чтобы направлять свое изучение нового проекта. Для меня никогда не имеет большого смысла пытаться поглотить что-то целиком сразу. Порядок изменения или отчет об ошибке дают мне указания сосредоточиться на этом одном элементе системы, отслеживая его активность через код.
После разумного количества этих действий я могу получить хорошее представление об основах проекта.
Прочтите документацию. Если возможно, поговорите с бывшим сопровождающим. Затем просмотрите базы кода из первого коммита и первого релиза из VCS и потратьте некоторое время на их изучение. Пока не добивайтесь полного понимания, просто просмотрите и поймите, какие основные компоненты и что они делают. Затем прочтите журналы изменений и примечания к выпуску для каждого из основных выпусков. Затем начните все ломать и посмотрите, что ломается. Исправьте некоторые ошибки. Просмотрите набор тестов и поймите, на каком компоненте сосредоточен каждый тест. Добавьте несколько тестов. Пошаговое выполнение кода в отладчике. Повторить.
Как уже было сказано, возьмите doxygen и создайте HTML-документацию для исходного кода.
Если код хорошо разработан, вы легко увидите красивая иерархия классов, четкие графы вызовов и многое другое, на раскрытие которых в противном случае потребовались бы годы. Когда поведение определенных частей кажется неясным, просмотрите модульные тесты или напишите свое.
Однако, если структура кажется плоской или беспорядочной, или и то, и другое вместе, вы можете столкнуться с некоторыми проблемами.
I'm not sure there is a standard way. There are some for-pay tools that will do C++ class diagrams/call graphs and provide some kind of code-level view. doxygen is a good free one. My low-tech approach is to find the top-level file and start to sort through what it provides and how...taking notes if needed.
Попросите человека, который уже знаком с кодовой базой, описать основные концепции, которые использовались во время разработки.
Ему не нужно объяснять каждую деталь, но он должен дать вы получите общее представление о том, как работает программное обеспечение и как отдельные модули связаны друг с другом. Кроме того, в прошлом я нашел полезным сначала настроить рабочую среду разработки, прежде чем начинать думать о коде.
Просмотрите файловую иерархию с помощью Total Commander, попробуйте получить обзор структуры. Попробуйте определить, где находятся основные файлы заголовков. Также найдите файл, в котором находится функция main ().
Исправление ошибок отлично работает для любого проекта, а не только для C ++.
Я включал исходные коды из некоторых проектов среднего размера. Самый важный урок, который я извлек из этого процесса, - прежде чем переходить к исходным кодам, вы должны быть уверены, какая часть исходных кодов вас больше всего интересует. Затем вы должны перейти к этому фрагменту, нажав сообщения журнала / предупреждения или просмотрев имена классов / функций. Чтобы понять исходный код, вы должны запустить его в отладчике или вставить свои собственные предупреждающие сообщения. В общем, вы должны сосредоточиться на том, что вас интересует. Последнее, что вам нужно, - это прочитать все исходные коды.
Вот как я подхожу к проблеме
Во-первых, насколько большой размер?
Я не Не думаю, что вы можете ответить на этот вопрос, не зная другой половины сценария. Какое требование для изменения кода?
Вы просто поддерживаете / исправляете его, когда что-то идет не так? Разрабатываете новый функционал? Переносите код на новую платформу? Обновление кода для нового компилятора C ++?
В зависимости от ваших требований я бы начал по-разному.
Попробуйте написать модульные тесты для различных классов.
Обычно очень полезно понимать, как используется код.
Если это библиотека, посмотрите клиентский код и модульные тесты. Если нет никаких модульных тестов, напишите несколько.
Если это приложение, разберитесь, как оно работает - подробно. Снова модульные тесты чтения и записи.
По сути, все дело в интерфейсах. Разберитесь в интерфейсах, и вы пройдете долгий путь к пониманию того, как работает код. Под интерфейсом я имею в виду API, если это библиотека, пользовательский интерфейс, если это графическое приложение, содержимое входящих и исходящих сообщений, если это сервер.
Вот мой общий процесс:
Обычно это помогает мне хоть немного ускориться. Однако,
Что нужно сделать:
Попробуйте создать документацию с помощью Doxygen или чего-то подобного, если это еще не было сделано.
Пройдитесь по API и посмотрите, есть ли что-то непонятное для вас, и посмотрите на код, если вы все еще не поняли, спросите разработчика, который уже работал над этим раньше.
Всегда сначала проверяйте то, над чем вам нужно работать.
Взгляните на все документы UML, которые у вас есть, если у вас их нет:
Если есть что-то конкретное, чего вы не понимаете или считаете неправильным, спросите команду, которая это разработала. Вероятно, они будут знать лучше.
Я знаю один инструмент, который может вам помочь, он в настоящее время находится в стадии бета-тестирования и называется CppDepend , который поможет вам понять связь между классами и проектами в решении. .
Помимо этого, вы можете попытаться понять код, прочитав его:
Вы можете попробовать запустить его через doxygen, чтобы наконец получить доступный для просмотра набор документации, но в основном Единственный способ - это отладчик, несколько сообщений trace / std :: cerr и много кофе.
Предложение о написании тестовых примеров является основой Working-Effectively-Legacy-code и точкой библиотеки тестов cppunit. Если вы можете использовать этот подход, это зависит от вашей команды и ваших настроек - если вы новый юниор, вы не сможете переписать приложение для поддержки тестирования.
В C ++ наиболее распространенной проблемой является то, что много энергии и времени тратится на задачи низкого уровня, такие как «управление памятью».
Простые вещи в управляемых языках - это боль в C ++.