Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

l6_NC

.pdf
Скачиваний:
11
Добавлен:
19.04.2015
Размер:
989.53 Кб
Скачать

Техническая поддержка программных решений 6/10 Продвинутые инструменты разработчика

© 2013 NetCracker Technology Corporation Confidential

Цель лекции

Декомпиляторы

Статический анализ кода

Инструменты сборки кода

Continuous Integration

© 2013 NetCracker Technology Corporation Confidential

2

Декомпиляция исходного кода

© 2013 NetCracker Technology Corporation Confidential

3

JAVAP: Java-дизасамблер

>javap.exe -p DocFooter.class

import java.awt.*;

 

import java.applet.*;

Compiled from

 

public class DocFooter extends Applet {

"DocFooter.java"

public class DocFooter

String date;

extends java.applet.Applet {

String email;

java.lang.String date;

 

public void init() {

java.lang.String email;

public DocFooter();

resize(500,100);

public void init();

date =

public void

getParameter("LAST_UPDATED");

paint(java.awt.Graphics);

email = getParameter("EMAIL");

}

}

 

public void paint(Graphics g) { g.drawString(date + " by ",100, 15); g.drawString(email,290,15);

}

}>javac.exe -p DocFooter.java

© 2013 NetCracker Technology Corporation Confidential

4

JAVAP: Java-дизасамблер

> javap.exe -p -c DocFooter.class > 1.log

Compiled from "DocFooter.java"

public class DocFooter extends java.applet.Applet {

java.lang.String date;

 

 

public void init() {

 

 

 

java.lang.String email;

 

resize(500,100);

 

 

 

public DocFooter();

 

 

date = getParameter("LAST_UPDATED");

Code:

 

 

email = getParameter("EMAIL");

0: aload_0

 

 

1: invokespecial #1

//

Method java/applet/Applet."<init>":()V

4: return

 

 

}

 

 

 

public void init();

 

 

 

 

 

 

Code:

 

 

 

0: aload_0

 

 

 

1: sipush

500

 

 

4: bipush

100

 

 

6: invokevirtual #2

// Method resize:(II)V

9: aload_0

 

 

 

10: aload_0

 

 

 

11: ldc

#3

// String LAST_UPDATED

13: invokevirtual #4

// Method getParameter:(Ljava/lang/String;)Ljava/lang/String;

16: putfield

#5

// Field date:Ljava/lang/String;

19: aload_0

 

 

 

20: aload_0

 

 

 

21: ldc

#6

// String EMAIL

23: invokevirtual #4

// Method getParameter:(Ljava/lang/String;)Ljava/lang/String;

26: putfield

#7

// Field email:Ljava/lang/String;

29: return

 

 

 

© 2013 NetCracker Technology Corporation Confidential

5

JAD

import java.awt.*; import java.applet.*;

public class DocFooter extends Applet { String date;

String email;

public void init() { resize(500,100);

date = getParameter("LAST_UPDATED");

email = getParameter("EMAIL");

}

public void paint(Graphics g) { g.drawString(date + " by ",100, 15); g.drawString(email,290,15);

}

}

> jad.exe DocFooter.class

import java.applet.Applet; import java.awt.Graphics;

public class DocFooter extends Applet {

public DocFooter()

{

 

}

 

 

 

public void

init()

{

 

resize(500, 100);

 

date = getParameter("LAST_UPDATED");

email =

getParameter("EMAIL");

}

 

 

 

public void

paint(Graphics g)

{

g.drawString((new StringBuilder()).append(date).append(" by ").toString(), 100, 15);

g.drawString(email, 290, 15);

}

String date; String email;

}

© 2013 NetCracker Technology Corporation Confidential

6

JD

import java.awt.*; import java.applet.*;

public class DocFooter extends Appl String date;

String email;

public void init() { resize(500,100);

date = getParameter("LAST_U email = getParameter("EMAIL

}

public void paint(Graphics g) { g.drawString(date + " by ",1 g.drawString(email,290,15);

}

}

http://java.decompiler.free.fr/

© 2013 NetCracker Technology Corporation Confidential

7

Статический анализ кода

© 2013 NetCracker Technology Corporation Confidential

8

Задачи статического анализа

Выявление ошибок в программах

Рекомендации по оформлению кода

Некоторые статические анализаторы позволяют проверять, соответствует ли исходный код, принятому в компании стандарту оформления кода. Имеется в виду контроль количества отступов в различных конструкциях, использование пробелов/символов табуляции и так далее.

Подсчет метрик

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

http://www.viva64.com/ru/t/0046/

© 2013 NetCracker Technology Corporation Confidential

9

Метрики исходного кода

Детальнее: http://www.viva64.com/ru/a/0045/

Пример: «Цикломатическая сложность»

Цикломатическая сложность части программного кода — счётное число линейно независимых маршрутов через программный код.

M = E N + 2P, где:

M = цикломатическая сложность,

E = количество рёбер в графе,

N = количество узлов в графе,

P = количество компонент связности.

© 2013 NetCracker Technology Corporation Confidential

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]