// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Видеообзор функции статического анализа кода в IDE NetBeans
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Видеообзор функции статического анализа кода в IDE NetBeans - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Видеообзор функции статического анализа кода в IDE NetBeans

|===
|На этой экранной демонстрации описывается возможность анализа нового статического кода, которая представлена в редакторе NetBeans IDE 7.2 Beta Java. Эта экранная демонстрация покажет, как выполнять статический анализ кода Java с помощью FindBugs и подсказок NetBeans Java без фактического выполнения приложений.

Авторы: Ян Лагода (Jan Lahoda), Алена Сташкова (Alyona Stashkova) 
Продолжительность: 3:47

link:http://bits.netbeans.org/media/code-inspect.swf[+Смотреть полностью/Загрузить+] (.swf) (Чтобы загрузить видео, нажмите клавишу Ctrl; размер – 2,7 МБ)


link:/about/contact_form.html?to=3&subject=Feedback:%20Video%20of%20the%20Static%20Analysis%20Feature%20in%20the%20NetBeans%20IDE[+Отправить отзыв по этому учебному курсу+]
 
|===


== Связанные ссылки

* link:http://wiki.netbeans.org/Java_Hints[+Подсказки Java NetBeans+]
* link:http://platform.netbeans.org/tutorials/nbm-java-hint.html[+Учебный курс по модулям подсказок Java NetBeans+]
* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG613[+Использование подсказок при анализе и рефакторинге исходного кода+] в разделе _Разработка приложений с помощью NetBeans IDE_
