![Page 1: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/1.jpg)
Àâòîìàòè÷åñêèé ïîèñê îøèáîê
Âëàäèìèð Êîøåëåâ
Èíñòèòóò ñèñòåìíîãî ïðîãðàììèðîâàíèÿ ÐÀÍ
21 ôåâðàëÿ 2017 ã.
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 1 / 29
![Page 2: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/2.jpg)
Ïëàí
1 Ââåäåíèå
2 Âåðèôèêàöèÿ
3 Roslyn: èñïîëüçóåì íà ïðàêòèêå
4 Ñòàòè÷åñêèé àíàëèç
5 Äèíàìè÷åñêèé àíàëèç
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 2 / 29
![Page 3: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/3.jpg)
Ââåäåíèå
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 3 / 29
![Page 4: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/4.jpg)
Îá ÈÑÏ ÐÀÍ
×åì ìû çàíèìàåìñÿ:
Àíàëèç èñõîäíîãî êîäà ïðîãðàìì äëÿ ïîèñêà îøèáîê:
C/C++JavaC#
Àíàëèç áèíàðíîãî êîäà
Ðàçðàáîòêà GCC
Ðàçðàáîòêà QEMU
...
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 4 / 29
![Page 5: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/5.jpg)
Îá ÈÑÏ ÐÀÍ
×åì ìû çàíèìàåìñÿ:
Àíàëèç èñõîäíîãî êîäà ïðîãðàìì äëÿ ïîèñêà îøèáîê:
C/C++JavaC#
Àíàëèç áèíàðíîãî êîäà
Ðàçðàáîòêà GCC
Ðàçðàáîòêà QEMU
...
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 4 / 29
![Page 6: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/6.jpg)
Îá ÈÑÏ ÐÀÍ
×åì ìû çàíèìàåìñÿ:
Àíàëèç èñõîäíîãî êîäà ïðîãðàìì äëÿ ïîèñêà îøèáîê:
C/C++JavaC#
Àíàëèç áèíàðíîãî êîäà
Ðàçðàáîòêà GCC
Ðàçðàáîòêà QEMU
...
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 4 / 29
![Page 7: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/7.jpg)
Îá ÈÑÏ ÐÀÍ
×åì ìû çàíèìàåìñÿ:
Àíàëèç èñõîäíîãî êîäà ïðîãðàìì äëÿ ïîèñêà îøèáîê:
C/C++JavaC#
Àíàëèç áèíàðíîãî êîäà
Ðàçðàáîòêà GCC
Ðàçðàáîòêà QEMU
...
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 4 / 29
![Page 8: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/8.jpg)
Òåîðåìà Ðàéñà
 ÷åì çàêëþ÷àåòñÿ îñíîâíàÿ ñëîæíîñòü àíàëèçà ïðîãðàìì?
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 5 / 29
![Page 9: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/9.jpg)
Òåîðåìà Ðàéñà
 ÷åì çàêëþ÷àåòñÿ îñíîâíàÿ ñëîæíîñòü àíàëèçà ïðîãðàìì?
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 5 / 29
![Page 10: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/10.jpg)
Ïîñòàíîâêè çàäà÷è ïðè ïîèñêå áàãîâ
Íàõîäèì âñå áàãè è èìååì ëîæíûå ñðàáàòûâàíèÿ:
Âåðèôèêàöèÿ
Íàõîäèì íå âñå áàãè è èìååì ëîæíûå ñðàáàòûâàíèÿ:
Ñòàòè÷åñêèé àíàëèç
Íàõîäèì òîëüêî áàãè, íî íàéäåì ÿâíî íå âñå:
Äèíàìè÷åñêèé àíàëèçÑìåøàííûé àíàëèç
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 6 / 29
![Page 11: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/11.jpg)
Ïîñòàíîâêè çàäà÷è ïðè ïîèñêå áàãîâ
Íàõîäèì âñå áàãè è èìååì ëîæíûå ñðàáàòûâàíèÿ:
Âåðèôèêàöèÿ
Íàõîäèì íå âñå áàãè è èìååì ëîæíûå ñðàáàòûâàíèÿ:
Ñòàòè÷åñêèé àíàëèç
Íàõîäèì òîëüêî áàãè, íî íàéäåì ÿâíî íå âñå:
Äèíàìè÷åñêèé àíàëèçÑìåøàííûé àíàëèç
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 6 / 29
![Page 12: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/12.jpg)
Ïîñòàíîâêè çàäà÷è ïðè ïîèñêå áàãîâ
Íàõîäèì âñå áàãè è èìååì ëîæíûå ñðàáàòûâàíèÿ:
Âåðèôèêàöèÿ
Íàõîäèì íå âñå áàãè è èìååì ëîæíûå ñðàáàòûâàíèÿ:
Ñòàòè÷åñêèé àíàëèç
Íàõîäèì òîëüêî áàãè, íî íàéäåì ÿâíî íå âñå:
Äèíàìè÷åñêèé àíàëèçÑìåøàííûé àíàëèç
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 6 / 29
![Page 13: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/13.jpg)
Âåðèôèêàöèÿ
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 7 / 29
![Page 14: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/14.jpg)
Âåðèôèêàöèÿ: ïîèñê íåèíèöèàëèçèðîâàííûõ ïåðåìåííûõ
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: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/15.jpg)
Âåðèôèêàöèÿ: ïîèñê íåèíèöèàëèçèðîâàííûõ ïåðåìåííûõ
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: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/16.jpg)
"Âåðèôèêàöèÿ"â CodeContracts
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 10 / 29
![Page 17: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/17.jpg)
Ïðèìåð êîíòðàêòîâ
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: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/18.jpg)
Roslyn: èñïîëüçóåì íà ïðàêòèêå
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 12 / 29
![Page 19: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/19.jpg)
Ïàðó ñëîâ î Roslyn
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 13 / 29
![Page 20: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/20.jpg)
Ïðàêòè÷åñêîå ïðèìåíåíèå 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: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/21.jpg)
Ïðàêòè÷åñêîå ïðèìåíåíèå 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: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/22.jpg)
Ïðàêòè÷åñêîå ïðèìåíåíèå 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: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/23.jpg)
Ãåíåðàöèÿ ÷åðåç Re�ection
var types = Assembly
.GetAssembly(typeof(MainClass))
.GetTypes ();
foreach (var type in types)
{
Process(type);
}
Ãëàâíàÿ ïðîáëåìà: ãåíåðàöèÿ ðàáîòàåò òîëüêî åñëè ïðîåêò êîìïèëèðóåòñÿ.
Åñëè âû õîòèòå ðåôàêòîðèòü, íóæíî èñïðàâëÿòü âñå îøèáêè âñãåíåðèðîâàííîì êîäå.
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 15 / 29
![Page 24: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/24.jpg)
Ãåíåðàöèÿ ÷åðåç Re�ection
var types = Assembly
.GetAssembly(typeof(MainClass))
.GetTypes ();
foreach (var type in types)
{
Process(type);
}
Ãëàâíàÿ ïðîáëåìà: ãåíåðàöèÿ ðàáîòàåò òîëüêî åñëè ïðîåêò êîìïèëèðóåòñÿ.
Åñëè âû õîòèòå ðåôàêòîðèòü, íóæíî èñïðàâëÿòü âñå îøèáêè âñãåíåðèðîâàííîì êîäå.
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 15 / 29
![Page 25: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/25.jpg)
Ãåíåðàöèÿ ÷åðåç 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: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/26.jpg)
Èñêëþ÷åíèå íà 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: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/27.jpg)
Ñòàòè÷åñêèé àíàëèç
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 18 / 29
![Page 28: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/28.jpg)
Çà÷åì ðàçðàáîò÷èêàì íóæåí ñòàòè÷åñêèé àíàëèç
Ñòàòè÷åñêèé àíàëèç èñïîëüçóåòñÿ êàê äëÿ ïîèñêà îøèáîê äîòåñòèðîâàíèÿ, òàê è äëÿ ïîèñêà îøèáîê, ïðîïóùåííûõ ïðèòåñòèðîâàíèè
×åì áîëüøå ðàçìåð êîìàíäû, òåì ýôôåêòèâíåå ðàáîòàåòñòàòè÷åñêèé àíàëèç
Ïðèìåíåíèå ñëîæíîãî ñòàòè÷åñêîãî àíàëèçà ïðåäïîëàãàåòâûñîêóþ öåíó îøèáêè
Ñòàòè÷åñêèé àíàëèç õîðîøî ñî÷åòàåòñÿ ñ CodeReview
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 19 / 29
![Page 29: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/29.jpg)
Çà÷åì ðàçðàáîò÷èêàì íóæåí ñòàòè÷åñêèé àíàëèç
Ñòàòè÷åñêèé àíàëèç èñïîëüçóåòñÿ êàê äëÿ ïîèñêà îøèáîê äîòåñòèðîâàíèÿ, òàê è äëÿ ïîèñêà îøèáîê, ïðîïóùåííûõ ïðèòåñòèðîâàíèè
×åì áîëüøå ðàçìåð êîìàíäû, òåì ýôôåêòèâíåå ðàáîòàåòñòàòè÷åñêèé àíàëèç
Ïðèìåíåíèå ñëîæíîãî ñòàòè÷åñêîãî àíàëèçà ïðåäïîëàãàåòâûñîêóþ öåíó îøèáêè
Ñòàòè÷åñêèé àíàëèç õîðîøî ñî÷åòàåòñÿ ñ CodeReview
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 19 / 29
![Page 30: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/30.jpg)
Çà÷åì ðàçðàáîò÷èêàì íóæåí ñòàòè÷åñêèé àíàëèç
Ñòàòè÷åñêèé àíàëèç èñïîëüçóåòñÿ êàê äëÿ ïîèñêà îøèáîê äîòåñòèðîâàíèÿ, òàê è äëÿ ïîèñêà îøèáîê, ïðîïóùåííûõ ïðèòåñòèðîâàíèè
×åì áîëüøå ðàçìåð êîìàíäû, òåì ýôôåêòèâíåå ðàáîòàåòñòàòè÷åñêèé àíàëèç
Ïðèìåíåíèå ñëîæíîãî ñòàòè÷åñêîãî àíàëèçà ïðåäïîëàãàåòâûñîêóþ öåíó îøèáêè
Ñòàòè÷åñêèé àíàëèç õîðîøî ñî÷åòàåòñÿ ñ CodeReview
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 19 / 29
![Page 31: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/31.jpg)
Çà÷åì ðàçðàáîò÷èêàì íóæåí ñòàòè÷åñêèé àíàëèç
Ñòàòè÷åñêèé àíàëèç èñïîëüçóåòñÿ êàê äëÿ ïîèñêà îøèáîê äîòåñòèðîâàíèÿ, òàê è äëÿ ïîèñêà îøèáîê, ïðîïóùåííûõ ïðèòåñòèðîâàíèè
×åì áîëüøå ðàçìåð êîìàíäû, òåì ýôôåêòèâíåå ðàáîòàåòñòàòè÷åñêèé àíàëèç
Ïðèìåíåíèå ñëîæíîãî ñòàòè÷åñêîãî àíàëèçà ïðåäïîëàãàåòâûñîêóþ öåíó îøèáêè
Ñòàòè÷åñêèé àíàëèç õîðîøî ñî÷åòàåòñÿ ñ CodeReview
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 19 / 29
![Page 32: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/32.jpg)
Òðåáîâàíèÿ ê ñòàòè÷åñêèì àíàëèçàòîðàì
Âðåìÿ ðàáîòû
Ñîîòíîøåíèå "âûäàíî ïðåäóïðåæäåíèé/âíåñåíî èñïðàâëåíèé"
Ïîääåðæèâàåìûå êëàññû îøèáîê, âêëþ÷àÿ ïîäêëàññû
Ïîíÿòíîñòü ñîîáùåíèé îá îøèáêàõ
Èíòåãðàöèÿ ñ CI
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 20 / 29
![Page 33: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/33.jpg)
Òðåáîâàíèÿ ê ñòàòè÷åñêèì àíàëèçàòîðàì
Âðåìÿ ðàáîòû
Ñîîòíîøåíèå "âûäàíî ïðåäóïðåæäåíèé/âíåñåíî èñïðàâëåíèé"
Ïîääåðæèâàåìûå êëàññû îøèáîê, âêëþ÷àÿ ïîäêëàññû
Ïîíÿòíîñòü ñîîáùåíèé îá îøèáêàõ
Èíòåãðàöèÿ ñ CI
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 20 / 29
![Page 34: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/34.jpg)
Òðåáîâàíèÿ ê ñòàòè÷åñêèì àíàëèçàòîðàì
Âðåìÿ ðàáîòû
Ñîîòíîøåíèå "âûäàíî ïðåäóïðåæäåíèé/âíåñåíî èñïðàâëåíèé"
Ïîääåðæèâàåìûå êëàññû îøèáîê, âêëþ÷àÿ ïîäêëàññû
Ïîíÿòíîñòü ñîîáùåíèé îá îøèáêàõ
Èíòåãðàöèÿ ñ CI
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 20 / 29
![Page 35: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/35.jpg)
Òðåáîâàíèÿ ê ñòàòè÷åñêèì àíàëèçàòîðàì
Âðåìÿ ðàáîòû
Ñîîòíîøåíèå "âûäàíî ïðåäóïðåæäåíèé/âíåñåíî èñïðàâëåíèé"
Ïîääåðæèâàåìûå êëàññû îøèáîê, âêëþ÷àÿ ïîäêëàññû
Ïîíÿòíîñòü ñîîáùåíèé îá îøèáêàõ
Èíòåãðàöèÿ ñ CI
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 20 / 29
![Page 36: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/36.jpg)
Òðåáîâàíèÿ ê ñòàòè÷åñêèì àíàëèçàòîðàì
Âðåìÿ ðàáîòû
Ñîîòíîøåíèå "âûäàíî ïðåäóïðåæäåíèé/âíåñåíî èñïðàâëåíèé"
Ïîääåðæèâàåìûå êëàññû îøèáîê, âêëþ÷àÿ ïîäêëàññû
Ïîíÿòíîñòü ñîîáùåíèé îá îøèáêàõ
Èíòåãðàöèÿ ñ CI
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 20 / 29
![Page 37: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/37.jpg)
Èíñòðóìåíòû ñòàòè÷åñêîãî àíàëèçà
Coverity
SharpChecker (íàø èíñòðóìåíò)
SonarLint
ReSharper
PVS-Studio
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 21 / 29
![Page 38: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/38.jpg)
Coverity
Äå ôàêòî ñòàíäàðò êà÷åñòâà äëÿ èíñòðóìåíòîâ ñòàòè÷åñêîãîàíàëèçà
Ïðîäàåòñÿ òîëüêî çà áîëüøèå äåíüãè
Áåñïëàòåí äëÿ OpenSource íà https://scan.coverity.com
Âñå âèäû àíàëèçà: AST, âíóòðèïðîöåäðóíûé, ìåæïðîöåäóðûíé
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 22 / 29
![Page 39: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/39.jpg)
SharpChecker
Ñòàòè÷åñêèé àíàëèç íà îñíîâå Roslyn, ðàçðàáîòàííûé â ÈÑÏ ÐÀÍ.
Öåëü ïðîåêòà: ðàçðàáîòàòü èíñòðóìåíò, ñîîòâåòñòâóþùèé óðîâíþëó÷øèõ ñîâðåìåííûõ ñòàòè÷åñêèõ àíàëèçàòîðîâ.
Âñå âèäû àíàëèçà: AST, âíóòðèïðîöåäðóíûé, ìåæïðîöåäóðûíé.
http://sharpchecker.ispras.ru
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 23 / 29
![Page 40: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/40.jpg)
SonarLint for VisualStudio
Áåñïëàòíàÿ êîëëåêöèÿ àíàëèçàòîðîâ äëÿ Roslyn
Èíòåãðàöèÿ ñ SonarQube
Èíòåãðàöèÿ ñ ñáîðêîé msbuild
Áîëåå 100 AST àíàëèçàòîðîâ
Èíòåãðàöèÿ ñ Visual Studio
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 24 / 29
![Page 41: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/41.jpg)
Ñðàâíåíèå ReSharper è PVS-Studio
ReSharper PVS-Studio
Êîëè÷åñòâî ñòàòåé íàõàðáðàõàáðå çà ôåâðàëü
0 8
Íàëè÷èå AST-äåòåêòîðîâ Äà Äà
Íàëè÷èå âíóòðèïðîöåäóðíîãîàíàëèçà ïîòîêîâ äàííûõ
Äà Íåò
Àíàëèç âî âðåìÿ ðàçðàáîòêè Äà Íåò
Èíòåãðàöèÿ ñ CI Äà Äà
Õîðîøàÿ äîêóìåíòàöèÿ Íåò Äà
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 25 / 29
![Page 42: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/42.jpg)
Ñðàâíåíèå ReSharper è PVS-Studio
ReSharper PVS-Studio
Êîëè÷åñòâî ñòàòåé íàõàðáðàõàáðå çà ôåâðàëü
0 8
Íàëè÷èå AST-äåòåêòîðîâ Äà Äà
Íàëè÷èå âíóòðèïðîöåäóðíîãîàíàëèçà ïîòîêîâ äàííûõ
Äà Íåò
Àíàëèç âî âðåìÿ ðàçðàáîòêè Äà Íåò
Èíòåãðàöèÿ ñ CI Äà Äà
Õîðîøàÿ äîêóìåíòàöèÿ Íåò Äà
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 25 / 29
![Page 43: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/43.jpg)
Ñðàâíåíèå ReSharper è PVS-Studio
ReSharper PVS-Studio
Êîëè÷åñòâî ñòàòåé íàõàðáðàõàáðå çà ôåâðàëü
0 8
Íàëè÷èå AST-äåòåêòîðîâ Äà Äà
Íàëè÷èå âíóòðèïðîöåäóðíîãîàíàëèçà ïîòîêîâ äàííûõ
Äà Íåò
Àíàëèç âî âðåìÿ ðàçðàáîòêè Äà Íåò
Èíòåãðàöèÿ ñ CI Äà Äà
Õîðîøàÿ äîêóìåíòàöèÿ Íåò Äà
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 25 / 29
![Page 44: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/44.jpg)
Ñðàâíåíèå ReSharper è PVS-Studio
ReSharper PVS-Studio
Êîëè÷åñòâî ñòàòåé íàõàðáðàõàáðå çà ôåâðàëü
0 8
Íàëè÷èå AST-äåòåêòîðîâ Äà Äà
Íàëè÷èå âíóòðèïðîöåäóðíîãîàíàëèçà ïîòîêîâ äàííûõ
Äà Íåò
Àíàëèç âî âðåìÿ ðàçðàáîòêè Äà Íåò
Èíòåãðàöèÿ ñ CI Äà Äà
Õîðîøàÿ äîêóìåíòàöèÿ Íåò Äà
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 25 / 29
![Page 45: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/45.jpg)
Ñðàâíåíèå ReSharper è PVS-Studio
ReSharper PVS-Studio
Êîëè÷åñòâî ñòàòåé íàõàðáðàõàáðå çà ôåâðàëü
0 8
Íàëè÷èå AST-äåòåêòîðîâ Äà Äà
Íàëè÷èå âíóòðèïðîöåäóðíîãîàíàëèçà ïîòîêîâ äàííûõ
Äà Íåò
Àíàëèç âî âðåìÿ ðàçðàáîòêè Äà Íåò
Èíòåãðàöèÿ ñ CI Äà Äà
Õîðîøàÿ äîêóìåíòàöèÿ Íåò Äà
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 25 / 29
![Page 46: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/46.jpg)
Ñðàâíåíèå ReSharper è PVS-Studio
ReSharper PVS-Studio
Êîëè÷åñòâî ñòàòåé íàõàðáðàõàáðå çà ôåâðàëü
0 8
Íàëè÷èå AST-äåòåêòîðîâ Äà Äà
Íàëè÷èå âíóòðèïðîöåäóðíîãîàíàëèçà ïîòîêîâ äàííûõ
Äà Íåò
Àíàëèç âî âðåìÿ ðàçðàáîòêè Äà Íåò
Èíòåãðàöèÿ ñ CI Äà Äà
Õîðîøàÿ äîêóìåíòàöèÿ Íåò Äà
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 25 / 29
![Page 47: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/47.jpg)
Ñðàâíåíèå ReSharper è PVS-Studio
ReSharper PVS-Studio
Êîëè÷åñòâî ñòàòåé íàõàðáðàõàáðå çà ôåâðàëü
0 8
Íàëè÷èå AST-äåòåêòîðîâ Äà Äà
Íàëè÷èå âíóòðèïðîöåäóðíîãîàíàëèçà ïîòîêîâ äàííûõ
Äà Íåò
Àíàëèç âî âðåìÿ ðàçðàáîòêè Äà Íåò
Èíòåãðàöèÿ ñ CI Äà Äà
Õîðîøàÿ äîêóìåíòàöèÿ Íåò Äà
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 25 / 29
![Page 48: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/48.jpg)
Äèíàìè÷åñêèé àíàëèç
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 26 / 29
![Page 49: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/49.jpg)
PEX / IntelliTest
http://www.pexforfun.com/
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 27 / 29
![Page 50: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/50.jpg)
Èäåÿ ðàáîòû IntelliTest
Àëãîðèòì ðàáîòû:
çàïóñòèì ìåòîä ñ êàêèìè-íèáóäü ïàðàìåòðàìè;
ïîñòðîèì ôîðìóëó, êîòîðàÿ îïèñûâàåò åãî âûïîëíåíèå;
ðåøèì çàäà÷ó: êàêèìè äîëæíû áûòü ïàðàìåòðû, ÷òîáûâûïîëíåíèå ïðîøëî ïî äðóãîé âåòêå è óâåëè÷èëî ïîêðûòèå;
çàïóñòèì ñ íîâûìè äàííûìè.
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 28 / 29
![Page 51: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/51.jpg)
Èäåÿ ðàáîòû IntelliTest
Àëãîðèòì ðàáîòû:
çàïóñòèì ìåòîä ñ êàêèìè-íèáóäü ïàðàìåòðàìè;
ïîñòðîèì ôîðìóëó, êîòîðàÿ îïèñûâàåò åãî âûïîëíåíèå;
ðåøèì çàäà÷ó: êàêèìè äîëæíû áûòü ïàðàìåòðû, ÷òîáûâûïîëíåíèå ïðîøëî ïî äðóãîé âåòêå è óâåëè÷èëî ïîêðûòèå;
çàïóñòèì ñ íîâûìè äàííûìè.
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 28 / 29
![Page 52: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/52.jpg)
Èäåÿ ðàáîòû IntelliTest
Àëãîðèòì ðàáîòû:
çàïóñòèì ìåòîä ñ êàêèìè-íèáóäü ïàðàìåòðàìè;
ïîñòðîèì ôîðìóëó, êîòîðàÿ îïèñûâàåò åãî âûïîëíåíèå;
ðåøèì çàäà÷ó: êàêèìè äîëæíû áûòü ïàðàìåòðû, ÷òîáûâûïîëíåíèå ïðîøëî ïî äðóãîé âåòêå è óâåëè÷èëî ïîêðûòèå;
çàïóñòèì ñ íîâûìè äàííûìè.
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 28 / 29
![Page 53: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/53.jpg)
Èäåÿ ðàáîòû IntelliTest
Àëãîðèòì ðàáîòû:
çàïóñòèì ìåòîä ñ êàêèìè-íèáóäü ïàðàìåòðàìè;
ïîñòðîèì ôîðìóëó, êîòîðàÿ îïèñûâàåò åãî âûïîëíåíèå;
ðåøèì çàäà÷ó: êàêèìè äîëæíû áûòü ïàðàìåòðû, ÷òîáûâûïîëíåíèå ïðîøëî ïî äðóãîé âåòêå è óâåëè÷èëî ïîêðûòèå;
çàïóñòèì ñ íîâûìè äàííûìè.
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 28 / 29
![Page 54: Владимир Кошелев «Автоматический поиск ошибок»](https://reader038.vdocuments.pub/reader038/viewer/2022102917/58e51ef91a28ab624e8b5881/html5/thumbnails/54.jpg)
Ñïàñèáî çà âíèìàíèå!
Âëàäèìèð Êîøåëåâ[email protected]
Ññûëêè:SharpChecker: http://sharpchecker.ispras.ru
Coverity: https://scan.coverity.comSonarLint : http://www.sonarlint.org/visualstudio/
Âëàäèìèð Êîøåëåâ (ÈÑÏ ÐÀÍ) Àâòîìàòè÷åñêèé ïîèñê îøèáîê 21 ôåâðàëÿ 2017 ã. 29 / 29