54

Владимир Кошелев «Автоматический поиск ошибок»

Embed Size (px)

Citation preview

Page 1: Владимир Кошелев «Автоматический поиск ошибок»

Àâòîìàòè÷åñêèé ïîèñê îøèáîê

Âëàäèìèð Êîøåëåâ

Èíñòèòóò ñèñòåìíîãî ïðîãðàììèðîâàíèÿ ÐÀÍ

[email protected]

21 ôåâðàëÿ 2017 ã.

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 1 / 29

Page 2: Владимир Кошелев «Автоматический поиск ошибок»

Ïëàí

1 Ââåäåíèå

2 Âåðèôèêàöèÿ

3 Roslyn: èñïîëüçóåì íà ïðàêòèêå

4 Ñòàòè÷åñêèé àíàëèç

5 Äèíàìè÷åñêèé àíàëèç

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 2 / 29

Page 3: Владимир Кошелев «Автоматический поиск ошибок»

Ââåäåíèå

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 3 / 29

Page 4: Владимир Кошелев «Автоматический поиск ошибок»

Îá ÈÑÏ ÐÀÍ

×åì ìû çàíèìàåìñÿ:

Àíàëèç èñõîäíîãî êîäà ïðîãðàìì äëÿ ïîèñêà îøèáîê:

C/C++JavaC#

Àíàëèç áèíàðíîãî êîäà

Ðàçðàáîòêà GCC

Ðàçðàáîòêà QEMU

...

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 4 / 29

Page 5: Владимир Кошелев «Автоматический поиск ошибок»

Îá ÈÑÏ ÐÀÍ

×åì ìû çàíèìàåìñÿ:

Àíàëèç èñõîäíîãî êîäà ïðîãðàìì äëÿ ïîèñêà îøèáîê:

C/C++JavaC#

Àíàëèç áèíàðíîãî êîäà

Ðàçðàáîòêà GCC

Ðàçðàáîòêà QEMU

...

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 4 / 29

Page 6: Владимир Кошелев «Автоматический поиск ошибок»

Îá ÈÑÏ ÐÀÍ

×åì ìû çàíèìàåìñÿ:

Àíàëèç èñõîäíîãî êîäà ïðîãðàìì äëÿ ïîèñêà îøèáîê:

C/C++JavaC#

Àíàëèç áèíàðíîãî êîäà

Ðàçðàáîòêà GCC

Ðàçðàáîòêà QEMU

...

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 4 / 29

Page 7: Владимир Кошелев «Автоматический поиск ошибок»

Îá ÈÑÏ ÐÀÍ

×åì ìû çàíèìàåìñÿ:

Àíàëèç èñõîäíîãî êîäà ïðîãðàìì äëÿ ïîèñêà îøèáîê:

C/C++JavaC#

Àíàëèç áèíàðíîãî êîäà

Ðàçðàáîòêà GCC

Ðàçðàáîòêà QEMU

...

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 4 / 29

Page 8: Владимир Кошелев «Автоматический поиск ошибок»

Òåîðåìà Ðàéñà

 ÷åì çàêëþ÷àåòñÿ îñíîâíàÿ ñëîæíîñòü àíàëèçà ïðîãðàìì?

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 5 / 29

Page 9: Владимир Кошелев «Автоматический поиск ошибок»

Òåîðåìà Ðàéñà

 ÷åì çàêëþ÷àåòñÿ îñíîâíàÿ ñëîæíîñòü àíàëèçà ïðîãðàìì?

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 5 / 29

Page 10: Владимир Кошелев «Автоматический поиск ошибок»

Ïîñòàíîâêè çàäà÷è ïðè ïîèñêå áàãîâ

Íàõîäèì âñå áàãè è èìååì ëîæíûå ñðàáàòûâàíèÿ:

Âåðèôèêàöèÿ

Íàõîäèì íå âñå áàãè è èìååì ëîæíûå ñðàáàòûâàíèÿ:

Ñòàòè÷åñêèé àíàëèç

Íàõîäèì òîëüêî áàãè, íî íàéäåì ÿâíî íå âñå:

Äèíàìè÷åñêèé àíàëèçÑìåøàííûé àíàëèç

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 6 / 29

Page 11: Владимир Кошелев «Автоматический поиск ошибок»

Ïîñòàíîâêè çàäà÷è ïðè ïîèñêå áàãîâ

Íàõîäèì âñå áàãè è èìååì ëîæíûå ñðàáàòûâàíèÿ:

Âåðèôèêàöèÿ

Íàõîäèì íå âñå áàãè è èìååì ëîæíûå ñðàáàòûâàíèÿ:

Ñòàòè÷åñêèé àíàëèç

Íàõîäèì òîëüêî áàãè, íî íàéäåì ÿâíî íå âñå:

Äèíàìè÷åñêèé àíàëèçÑìåøàííûé àíàëèç

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 6 / 29

Page 12: Владимир Кошелев «Автоматический поиск ошибок»

Ïîñòàíîâêè çàäà÷è ïðè ïîèñêå áàãîâ

Íàõîäèì âñå áàãè è èìååì ëîæíûå ñðàáàòûâàíèÿ:

Âåðèôèêàöèÿ

Íàõîäèì íå âñå áàãè è èìååì ëîæíûå ñðàáàòûâàíèÿ:

Ñòàòè÷åñêèé àíàëèç

Íàõîäèì òîëüêî áàãè, íî íàéäåì ÿâíî íå âñå:

Äèíàìè÷åñêèé àíàëèçÑìåøàííûé àíàëèç

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 6 / 29

Page 13: Владимир Кошелев «Автоматический поиск ошибок»

Âåðèôèêàöèÿ

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 7 / 29

Page 14: Владимир Кошелев «Автоматический поиск ошибок»

Âåðèôèêàöèÿ: ïîèñê íåèíèöèàëèçèðîâàííûõ ïåðåìåííûõ

public string Foo(string a, string b) {

string min;

int cmpResult = a.CompareTo(b);

if (cmpResult < 0)

min = a;

if (cmpResult >= 0)

min = b;

return min;

}

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 8 / 29

Page 15: Владимир Кошелев «Автоматический поиск ошибок»

Âåðèôèêàöèÿ: ïîèñê íåèíèöèàëèçèðîâàííûõ ïåðåìåííûõ

public string Foo(string a, string b) {

string min;

int cmpResult = a.CompareTo(b);

if (cmpResult < 0) // False

min = a;

if (cmpResult >= 0) // False

min = b;

return min;

}

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 9 / 29

Page 16: Владимир Кошелев «Автоматический поиск ошибок»

"Âåðèôèêàöèÿ"â CodeContracts

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 10 / 29

Page 17: Владимир Кошелев «Автоматический поиск ошибок»

Ïðèìåð êîíòðàêòîâ

public string Greet(string [] args)

{

Contract.Requires(args != null);

Contract.Requires(args.Length > 0);

Contract.Requires(args [0] != null);

Contract.Ensures(Contract.Result <string >().Length

> 5);

Console.WriteLine("Hello , {0}!", args [0]);

return "abacaba" + args [0];

}

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 11 / 29

Page 18: Владимир Кошелев «Автоматический поиск ошибок»

Roslyn: èñïîëüçóåì íà ïðàêòèêå

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 12 / 29

Page 19: Владимир Кошелев «Автоматический поиск ошибок»

Ïàðó ñëîâ î Roslyn

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 13 / 29

Page 20: Владимир Кошелев «Автоматический поиск ошибок»

Ïðàêòè÷åñêîå ïðèìåíåíèå Roslyn: áîðåìñÿ ñ boilerplate

Entitas - The Entity Component System Framework for C# and Unity

Çàäà÷à: àâòîìàòè÷åñêè ãåíåðèðîâàòü boilerplate êîä äëÿ ðàáîòû ñêîìïîíåíòàìè.

public class PositionComponent : IComponent

{

public float X;

public float Y;

}

public void AddPosition(float newX , float newY) {

var component =

CreateComponent <PositionComponent >

(BattleComponentsLookup.Position);

component.X = newX;

component.Y = newY;

AddComponent(BattleComponentsLookup.Position ,

component);

}

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 14 / 29

Page 21: Владимир Кошелев «Автоматический поиск ошибок»

Ïðàêòè÷åñêîå ïðèìåíåíèå Roslyn: áîðåìñÿ ñ boilerplate

Entitas - The Entity Component System Framework for C# and Unity

Çàäà÷à: àâòîìàòè÷åñêè ãåíåðèðîâàòü boilerplate êîä äëÿ ðàáîòû ñêîìïîíåíòàìè.

public class PositionComponent : IComponent

{

public float X;

public float Y;

}

public void AddPosition(float newX , float newY) {

var component =

CreateComponent <PositionComponent >

(BattleComponentsLookup.Position);

component.X = newX;

component.Y = newY;

AddComponent(BattleComponentsLookup.Position ,

component);

}

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 14 / 29

Page 22: Владимир Кошелев «Автоматический поиск ошибок»

Ïðàêòè÷åñêîå ïðèìåíåíèå Roslyn: áîðåìñÿ ñ boilerplate

Entitas - The Entity Component System Framework for C# and Unity

Çàäà÷à: àâòîìàòè÷åñêè ãåíåðèðîâàòü boilerplate êîä äëÿ ðàáîòû ñêîìïîíåíòàìè.

public class PositionComponent : IComponent

{

public float X;

public float Y;

}

public void AddPosition(float newX , float newY) {

var component =

CreateComponent <PositionComponent >

(BattleComponentsLookup.Position);

component.X = newX;

component.Y = newY;

AddComponent(BattleComponentsLookup.Position ,

component);

}Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 14 / 29

Page 23: Владимир Кошелев «Автоматический поиск ошибок»

Ãåíåðàöèÿ ÷åðåç Re�ection

var types = Assembly

.GetAssembly(typeof(MainClass))

.GetTypes ();

foreach (var type in types)

{

Process(type);

}

Ãëàâíàÿ ïðîáëåìà: ãåíåðàöèÿ ðàáîòàåò òîëüêî åñëè ïðîåêò êîìïèëèðóåòñÿ.

Åñëè âû õîòèòå ðåôàêòîðèòü, íóæíî èñïðàâëÿòü âñå îøèáêè âñãåíåðèðîâàííîì êîäå.

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 15 / 29

Page 24: Владимир Кошелев «Автоматический поиск ошибок»

Ãåíåðàöèÿ ÷åðåç Re�ection

var types = Assembly

.GetAssembly(typeof(MainClass))

.GetTypes ();

foreach (var type in types)

{

Process(type);

}

Ãëàâíàÿ ïðîáëåìà: ãåíåðàöèÿ ðàáîòàåò òîëüêî åñëè ïðîåêò êîìïèëèðóåòñÿ.

Åñëè âû õîòèòå ðåôàêòîðèòü, íóæíî èñïðàâëÿòü âñå îøèáêè âñãåíåðèðîâàííîì êîäå.

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 15 / 29

Page 25: Владимир Кошелев «Автоматический поиск ошибок»

Ãåíåðàöèÿ ÷åðåç Roslyn

using (var workspace = MSBuildWorkspace.Create ())

{

var solution =

workspace.OpenSolutionAsync(path).Result;

foreach (var project in solution.Projects){

var compilation =

project.GetCompilationAsync ().Result;

var allTypes =

compilation.GetSymbolsWithName(x => true ,

SymbolFilter.Type).OfType <ITypeSymbol >();

foreach (var type in types)

Process(type)

}

}

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 16 / 29

Page 26: Владимир Кошелев «Автоматический поиск ошибок»

Èñêëþ÷åíèå íà Mac/Mono

Unhandled Exception:System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be

loaded.at (wrapper managed -to-native) System.Reflection.Assembly:GetTypes

(System.Reflection.Assembly ,bool)at System.Reflection.Assembly.GetTypes () [0 x00000] in

<8f2c484307284b51944a1a13a14c0266 >:0at System.Reflection.Assembly+<>c__Iterator0.MoveNext () [0 x00021] in

<8f2c484307284b51944a1a13a14c0266 >:0at System.Linq.Enumerable+WhereSelectEnumerableIterator `2[ TSource ,TResult ]. MoveNext ()

[0 x00078] in <63992662 b765477a898ef49cdcc99ee2 >:0at System.Linq.Enumerable+<SelectManyIterator >c__Iterator2 `2[ TSource ,TResult ]. MoveNext

() [0 x000bc] in <63992662 b765477a898ef49cdcc99ee2 >:0at System.Composition.TypedParts.TypedPartExportDescriptorProvider ..ctor

(System.Collections.Generic.IEnumerable `1[T] types ,System.Composition.Convention.AttributedModelProvider attributeContext) [0 x00049]in <c091afde214c4b8e8efbbeb9d44062d4 >:0

at System.Composition.Hosting.ContainerConfiguration.CreateContainer () [0 x00042] in<c091afde214c4b8e8efbbeb9d44062d4 >:0

at Microsoft.CodeAnalysis.Host.Mef.MefHostServices.Create(System.Collections.Generic.IEnumerable `1[T] assemblies) [0 x00019] in<947408 acdcbc4eba93cdb6a19d92fcd1 >:0

at Microsoft.CodeAnalysis.Host.Mef.DesktopMefHostServices.get_DefaultServices ()[0 x00011] in <2ba3a08d4fe0467c8c54c8bc37c61987 >:0

at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.Create(System.Collections.Generic.IDictionary `2[TKey ,TValue] properties) [0 x00000] in<2ba3a08d4fe0467c8c54c8bc37c61987 >:0

at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.Create () [0 x00000] in<2ba3a08d4fe0467c8c54c8bc37c61987 >:0

...

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 17 / 29

Page 27: Владимир Кошелев «Автоматический поиск ошибок»

Ñòàòè÷åñêèé àíàëèç

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 18 / 29

Page 28: Владимир Кошелев «Автоматический поиск ошибок»

Çà÷åì ðàçðàáîò÷èêàì íóæåí ñòàòè÷åñêèé àíàëèç

Ñòàòè÷åñêèé àíàëèç èñïîëüçóåòñÿ êàê äëÿ ïîèñêà îøèáîê äîòåñòèðîâàíèÿ, òàê è äëÿ ïîèñêà îøèáîê, ïðîïóùåííûõ ïðèòåñòèðîâàíèè

×åì áîëüøå ðàçìåð êîìàíäû, òåì ýôôåêòèâíåå ðàáîòàåòñòàòè÷åñêèé àíàëèç

Ïðèìåíåíèå ñëîæíîãî ñòàòè÷åñêîãî àíàëèçà ïðåäïîëàãàåòâûñîêóþ öåíó îøèáêè

Ñòàòè÷åñêèé àíàëèç õîðîøî ñî÷åòàåòñÿ ñ CodeReview

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 19 / 29

Page 29: Владимир Кошелев «Автоматический поиск ошибок»

Çà÷åì ðàçðàáîò÷èêàì íóæåí ñòàòè÷åñêèé àíàëèç

Ñòàòè÷åñêèé àíàëèç èñïîëüçóåòñÿ êàê äëÿ ïîèñêà îøèáîê äîòåñòèðîâàíèÿ, òàê è äëÿ ïîèñêà îøèáîê, ïðîïóùåííûõ ïðèòåñòèðîâàíèè

×åì áîëüøå ðàçìåð êîìàíäû, òåì ýôôåêòèâíåå ðàáîòàåòñòàòè÷åñêèé àíàëèç

Ïðèìåíåíèå ñëîæíîãî ñòàòè÷åñêîãî àíàëèçà ïðåäïîëàãàåòâûñîêóþ öåíó îøèáêè

Ñòàòè÷åñêèé àíàëèç õîðîøî ñî÷åòàåòñÿ ñ CodeReview

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 19 / 29

Page 30: Владимир Кошелев «Автоматический поиск ошибок»

Çà÷åì ðàçðàáîò÷èêàì íóæåí ñòàòè÷åñêèé àíàëèç

Ñòàòè÷åñêèé àíàëèç èñïîëüçóåòñÿ êàê äëÿ ïîèñêà îøèáîê äîòåñòèðîâàíèÿ, òàê è äëÿ ïîèñêà îøèáîê, ïðîïóùåííûõ ïðèòåñòèðîâàíèè

×åì áîëüøå ðàçìåð êîìàíäû, òåì ýôôåêòèâíåå ðàáîòàåòñòàòè÷åñêèé àíàëèç

Ïðèìåíåíèå ñëîæíîãî ñòàòè÷åñêîãî àíàëèçà ïðåäïîëàãàåòâûñîêóþ öåíó îøèáêè

Ñòàòè÷åñêèé àíàëèç õîðîøî ñî÷åòàåòñÿ ñ CodeReview

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 19 / 29

Page 31: Владимир Кошелев «Автоматический поиск ошибок»

Çà÷åì ðàçðàáîò÷èêàì íóæåí ñòàòè÷åñêèé àíàëèç

Ñòàòè÷åñêèé àíàëèç èñïîëüçóåòñÿ êàê äëÿ ïîèñêà îøèáîê äîòåñòèðîâàíèÿ, òàê è äëÿ ïîèñêà îøèáîê, ïðîïóùåííûõ ïðèòåñòèðîâàíèè

×åì áîëüøå ðàçìåð êîìàíäû, òåì ýôôåêòèâíåå ðàáîòàåòñòàòè÷åñêèé àíàëèç

Ïðèìåíåíèå ñëîæíîãî ñòàòè÷åñêîãî àíàëèçà ïðåäïîëàãàåòâûñîêóþ öåíó îøèáêè

Ñòàòè÷åñêèé àíàëèç õîðîøî ñî÷åòàåòñÿ ñ CodeReview

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 19 / 29

Page 32: Владимир Кошелев «Автоматический поиск ошибок»

Òðåáîâàíèÿ ê ñòàòè÷åñêèì àíàëèçàòîðàì

Âðåìÿ ðàáîòû

Ñîîòíîøåíèå "âûäàíî ïðåäóïðåæäåíèé/âíåñåíî èñïðàâëåíèé"

Ïîääåðæèâàåìûå êëàññû îøèáîê, âêëþ÷àÿ ïîäêëàññû

Ïîíÿòíîñòü ñîîáùåíèé îá îøèáêàõ

Èíòåãðàöèÿ ñ CI

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 20 / 29

Page 33: Владимир Кошелев «Автоматический поиск ошибок»

Òðåáîâàíèÿ ê ñòàòè÷åñêèì àíàëèçàòîðàì

Âðåìÿ ðàáîòû

Ñîîòíîøåíèå "âûäàíî ïðåäóïðåæäåíèé/âíåñåíî èñïðàâëåíèé"

Ïîääåðæèâàåìûå êëàññû îøèáîê, âêëþ÷àÿ ïîäêëàññû

Ïîíÿòíîñòü ñîîáùåíèé îá îøèáêàõ

Èíòåãðàöèÿ ñ CI

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 20 / 29

Page 34: Владимир Кошелев «Автоматический поиск ошибок»

Òðåáîâàíèÿ ê ñòàòè÷åñêèì àíàëèçàòîðàì

Âðåìÿ ðàáîòû

Ñîîòíîøåíèå "âûäàíî ïðåäóïðåæäåíèé/âíåñåíî èñïðàâëåíèé"

Ïîääåðæèâàåìûå êëàññû îøèáîê, âêëþ÷àÿ ïîäêëàññû

Ïîíÿòíîñòü ñîîáùåíèé îá îøèáêàõ

Èíòåãðàöèÿ ñ CI

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 20 / 29

Page 35: Владимир Кошелев «Автоматический поиск ошибок»

Òðåáîâàíèÿ ê ñòàòè÷åñêèì àíàëèçàòîðàì

Âðåìÿ ðàáîòû

Ñîîòíîøåíèå "âûäàíî ïðåäóïðåæäåíèé/âíåñåíî èñïðàâëåíèé"

Ïîääåðæèâàåìûå êëàññû îøèáîê, âêëþ÷àÿ ïîäêëàññû

Ïîíÿòíîñòü ñîîáùåíèé îá îøèáêàõ

Èíòåãðàöèÿ ñ CI

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 20 / 29

Page 36: Владимир Кошелев «Автоматический поиск ошибок»

Òðåáîâàíèÿ ê ñòàòè÷åñêèì àíàëèçàòîðàì

Âðåìÿ ðàáîòû

Ñîîòíîøåíèå "âûäàíî ïðåäóïðåæäåíèé/âíåñåíî èñïðàâëåíèé"

Ïîääåðæèâàåìûå êëàññû îøèáîê, âêëþ÷àÿ ïîäêëàññû

Ïîíÿòíîñòü ñîîáùåíèé îá îøèáêàõ

Èíòåãðàöèÿ ñ CI

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 20 / 29

Page 37: Владимир Кошелев «Автоматический поиск ошибок»

Èíñòðóìåíòû ñòàòè÷åñêîãî àíàëèçà

Coverity

SharpChecker (íàø èíñòðóìåíò)

SonarLint

ReSharper

PVS-Studio

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 21 / 29

Page 38: Владимир Кошелев «Автоматический поиск ошибок»

Coverity

Äå ôàêòî ñòàíäàðò êà÷åñòâà äëÿ èíñòðóìåíòîâ ñòàòè÷åñêîãîàíàëèçà

Ïðîäàåòñÿ òîëüêî çà áîëüøèå äåíüãè

Áåñïëàòåí äëÿ OpenSource íà https://scan.coverity.com

Âñå âèäû àíàëèçà: AST, âíóòðèïðîöåäðóíûé, ìåæïðîöåäóðûíé

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 22 / 29

Page 39: Владимир Кошелев «Автоматический поиск ошибок»

SharpChecker

Ñòàòè÷åñêèé àíàëèç íà îñíîâå Roslyn, ðàçðàáîòàííûé â ÈÑÏ ÐÀÍ.

Öåëü ïðîåêòà: ðàçðàáîòàòü èíñòðóìåíò, ñîîòâåòñòâóþùèé óðîâíþëó÷øèõ ñîâðåìåííûõ ñòàòè÷åñêèõ àíàëèçàòîðîâ.

Âñå âèäû àíàëèçà: AST, âíóòðèïðîöåäðóíûé, ìåæïðîöåäóðûíé.

http://sharpchecker.ispras.ru

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 23 / 29

Page 40: Владимир Кошелев «Автоматический поиск ошибок»

SonarLint for VisualStudio

Áåñïëàòíàÿ êîëëåêöèÿ àíàëèçàòîðîâ äëÿ Roslyn

Èíòåãðàöèÿ ñ SonarQube

Èíòåãðàöèÿ ñ ñáîðêîé msbuild

Áîëåå 100 AST àíàëèçàòîðîâ

Èíòåãðàöèÿ ñ Visual Studio

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 24 / 29

Page 41: Владимир Кошелев «Автоматический поиск ошибок»

Ñðàâíåíèå ReSharper è PVS-Studio

ReSharper PVS-Studio

Êîëè÷åñòâî ñòàòåé íàõàðáðàõàáðå çà ôåâðàëü

0 8

Íàëè÷èå AST-äåòåêòîðîâ Äà Äà

Íàëè÷èå âíóòðèïðîöåäóðíîãîàíàëèçà ïîòîêîâ äàííûõ

Äà Íåò

Àíàëèç âî âðåìÿ ðàçðàáîòêè Äà Íåò

Èíòåãðàöèÿ ñ CI Äà Äà

Õîðîøàÿ äîêóìåíòàöèÿ Íåò Äà

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 25 / 29

Page 42: Владимир Кошелев «Автоматический поиск ошибок»

Ñðàâíåíèå ReSharper è PVS-Studio

ReSharper PVS-Studio

Êîëè÷åñòâî ñòàòåé íàõàðáðàõàáðå çà ôåâðàëü

0 8

Íàëè÷èå AST-äåòåêòîðîâ Äà Äà

Íàëè÷èå âíóòðèïðîöåäóðíîãîàíàëèçà ïîòîêîâ äàííûõ

Äà Íåò

Àíàëèç âî âðåìÿ ðàçðàáîòêè Äà Íåò

Èíòåãðàöèÿ ñ CI Äà Äà

Õîðîøàÿ äîêóìåíòàöèÿ Íåò Äà

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 25 / 29

Page 43: Владимир Кошелев «Автоматический поиск ошибок»

Ñðàâíåíèå ReSharper è PVS-Studio

ReSharper PVS-Studio

Êîëè÷åñòâî ñòàòåé íàõàðáðàõàáðå çà ôåâðàëü

0 8

Íàëè÷èå AST-äåòåêòîðîâ Äà Äà

Íàëè÷èå âíóòðèïðîöåäóðíîãîàíàëèçà ïîòîêîâ äàííûõ

Äà Íåò

Àíàëèç âî âðåìÿ ðàçðàáîòêè Äà Íåò

Èíòåãðàöèÿ ñ CI Äà Äà

Õîðîøàÿ äîêóìåíòàöèÿ Íåò Äà

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 25 / 29

Page 44: Владимир Кошелев «Автоматический поиск ошибок»

Ñðàâíåíèå ReSharper è PVS-Studio

ReSharper PVS-Studio

Êîëè÷åñòâî ñòàòåé íàõàðáðàõàáðå çà ôåâðàëü

0 8

Íàëè÷èå AST-äåòåêòîðîâ Äà Äà

Íàëè÷èå âíóòðèïðîöåäóðíîãîàíàëèçà ïîòîêîâ äàííûõ

Äà Íåò

Àíàëèç âî âðåìÿ ðàçðàáîòêè Äà Íåò

Èíòåãðàöèÿ ñ CI Äà Äà

Õîðîøàÿ äîêóìåíòàöèÿ Íåò Äà

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 25 / 29

Page 45: Владимир Кошелев «Автоматический поиск ошибок»

Ñðàâíåíèå ReSharper è PVS-Studio

ReSharper PVS-Studio

Êîëè÷åñòâî ñòàòåé íàõàðáðàõàáðå çà ôåâðàëü

0 8

Íàëè÷èå AST-äåòåêòîðîâ Äà Äà

Íàëè÷èå âíóòðèïðîöåäóðíîãîàíàëèçà ïîòîêîâ äàííûõ

Äà Íåò

Àíàëèç âî âðåìÿ ðàçðàáîòêè Äà Íåò

Èíòåãðàöèÿ ñ CI Äà Äà

Õîðîøàÿ äîêóìåíòàöèÿ Íåò Äà

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 25 / 29

Page 46: Владимир Кошелев «Автоматический поиск ошибок»

Ñðàâíåíèå ReSharper è PVS-Studio

ReSharper PVS-Studio

Êîëè÷åñòâî ñòàòåé íàõàðáðàõàáðå çà ôåâðàëü

0 8

Íàëè÷èå AST-äåòåêòîðîâ Äà Äà

Íàëè÷èå âíóòðèïðîöåäóðíîãîàíàëèçà ïîòîêîâ äàííûõ

Äà Íåò

Àíàëèç âî âðåìÿ ðàçðàáîòêè Äà Íåò

Èíòåãðàöèÿ ñ CI Äà Äà

Õîðîøàÿ äîêóìåíòàöèÿ Íåò Äà

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 25 / 29

Page 47: Владимир Кошелев «Автоматический поиск ошибок»

Ñðàâíåíèå ReSharper è PVS-Studio

ReSharper PVS-Studio

Êîëè÷åñòâî ñòàòåé íàõàðáðàõàáðå çà ôåâðàëü

0 8

Íàëè÷èå AST-äåòåêòîðîâ Äà Äà

Íàëè÷èå âíóòðèïðîöåäóðíîãîàíàëèçà ïîòîêîâ äàííûõ

Äà Íåò

Àíàëèç âî âðåìÿ ðàçðàáîòêè Äà Íåò

Èíòåãðàöèÿ ñ CI Äà Äà

Õîðîøàÿ äîêóìåíòàöèÿ Íåò Äà

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 25 / 29

Page 48: Владимир Кошелев «Автоматический поиск ошибок»

Äèíàìè÷åñêèé àíàëèç

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 26 / 29

Page 49: Владимир Кошелев «Автоматический поиск ошибок»

PEX / IntelliTest

http://www.pexforfun.com/

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 27 / 29

Page 50: Владимир Кошелев «Автоматический поиск ошибок»

Èäåÿ ðàáîòû IntelliTest

Àëãîðèòì ðàáîòû:

çàïóñòèì ìåòîä ñ êàêèìè-íèáóäü ïàðàìåòðàìè;

ïîñòðîèì ôîðìóëó, êîòîðàÿ îïèñûâàåò åãî âûïîëíåíèå;

ðåøèì çàäà÷ó: êàêèìè äîëæíû áûòü ïàðàìåòðû, ÷òîáûâûïîëíåíèå ïðîøëî ïî äðóãîé âåòêå è óâåëè÷èëî ïîêðûòèå;

çàïóñòèì ñ íîâûìè äàííûìè.

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 28 / 29

Page 51: Владимир Кошелев «Автоматический поиск ошибок»

Èäåÿ ðàáîòû IntelliTest

Àëãîðèòì ðàáîòû:

çàïóñòèì ìåòîä ñ êàêèìè-íèáóäü ïàðàìåòðàìè;

ïîñòðîèì ôîðìóëó, êîòîðàÿ îïèñûâàåò åãî âûïîëíåíèå;

ðåøèì çàäà÷ó: êàêèìè äîëæíû áûòü ïàðàìåòðû, ÷òîáûâûïîëíåíèå ïðîøëî ïî äðóãîé âåòêå è óâåëè÷èëî ïîêðûòèå;

çàïóñòèì ñ íîâûìè äàííûìè.

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 28 / 29

Page 52: Владимир Кошелев «Автоматический поиск ошибок»

Èäåÿ ðàáîòû IntelliTest

Àëãîðèòì ðàáîòû:

çàïóñòèì ìåòîä ñ êàêèìè-íèáóäü ïàðàìåòðàìè;

ïîñòðîèì ôîðìóëó, êîòîðàÿ îïèñûâàåò åãî âûïîëíåíèå;

ðåøèì çàäà÷ó: êàêèìè äîëæíû áûòü ïàðàìåòðû, ÷òîáûâûïîëíåíèå ïðîøëî ïî äðóãîé âåòêå è óâåëè÷èëî ïîêðûòèå;

çàïóñòèì ñ íîâûìè äàííûìè.

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 28 / 29

Page 53: Владимир Кошелев «Автоматический поиск ошибок»

Èäåÿ ðàáîòû IntelliTest

Àëãîðèòì ðàáîòû:

çàïóñòèì ìåòîä ñ êàêèìè-íèáóäü ïàðàìåòðàìè;

ïîñòðîèì ôîðìóëó, êîòîðàÿ îïèñûâàåò åãî âûïîëíåíèå;

ðåøèì çàäà÷ó: êàêèìè äîëæíû áûòü ïàðàìåòðû, ÷òîáûâûïîëíåíèå ïðîøëî ïî äðóãîé âåòêå è óâåëè÷èëî ïîêðûòèå;

çàïóñòèì ñ íîâûìè äàííûìè.

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 28 / 29

Page 54: Владимир Кошелев «Автоматический поиск ошибок»

Ñïàñèáî çà âíèìàíèå!

Âëàäèìèð Êîøåëåâ[email protected]

Ññûëêè:SharpChecker: http://sharpchecker.ispras.ru

Coverity: https://scan.coverity.comSonarLint : http://www.sonarlint.org/visualstudio/

Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 29 / 29