?>Array ( [id] => 144 ) Grenzfall & Sicherheit: Schutz von geistigem Eigentum und Fehlerbehandlung - WeAreCAS
fcmpact addPrototypes

Grenzfall & Sicherheit: Schutz von geistigem Eigentum und Fehlerbehandlung

Scénario de test & Cas d'usage

Geschäftskontext

Ein Softwareanbieter lizenziert ein Set von Algorithmen für maschinelles Lernen (geschrieben in C++) an einen Kunden. Der Anbieter muss die Funktionsprototypen in der SAS Viya-Umgebung des Kunden bereitstellen, aber die Definitionen verschleiern, um geistiges Eigentum zu schützen (`encode=true`). Zusätzlich soll das Systemverhalten bei der Bereitstellung eines fehlerhaften Prototyps getestet werden, um die Robustheit der Fehlerbehandlung zu gewährleisten.
Datenaufbereitung

Dieses Szenario verwendet zwei Sätze von Prototyp-Definitionen: einen gültigen Satz zur Verschlüsselung und einen absichtlich fehlerhaften Satz zur Überprüfung der Fehlerbehandlung.

Kopiert!
1/* Gültige C++ Funktionen:
2extern "C" double predict_churn(double tenure, int services);
3extern "C" double score_sentiment(const char* text);
4 
5Fehlerhafte Definition (fehlendes Semikolon und Typ):
6extern "C" get_recommendations(int customerId)
7*/

Étapes de réalisation

1
Versuch, einen syntaktisch inkorrekten Prototyp hinzuzufügen. Es wird erwartet, dass die Aktion fehlschlägt und eine aussagekräftige Fehlermeldung im Log ausgibt.
Kopiert!
1PROC CAS;
2 ACTION fcmpact.addPrototypes /
3 routineCode={"proto get_recommendations(int) link='c' return"} /* Fehlendes Semikolon und Typ */
4 package="ML_Engine_Error"
5 funcTable={name="ml_prototypes_failed", caslib="casuser"};
6RUN; QUIT;
2
Hinzufügen der korrekten Prototypen mit aktivierter Verschlüsselung (`encode=true`), um die Definitionen in der Zieltabelle zu schützen.
Kopiert!
1PROC CAS;
2 ACTION fcmpact.addPrototypes /
3 routineCode={
4 "proto predict_churn(double, int) link='c' return=double;",
5 "proto score_sentiment(char[*]) link='c' return=double;"
6 }
7 package="ML_Engine_Secure"
8 encode=true
9 funcTable={name="ml_prototypes_secure", caslib="casuser", replace=true};
10RUN; QUIT;
3
Überprüfung der verschlüsselten Tabelle. Es wird erwartet, dass die Prototyp-Definitionen nicht im Klartext lesbar sind.
Kopiert!
1PROC CAS;
2 TABLE.fetch / TABLE={name="ml_prototypes_secure", caslib="casuser"};
3RUN; QUIT;

Erwartetes Ergebnis


Schritt 1 schlägt wie erwartet fehl. Das CAS-Log enthält eine Fehlermeldung, die auf einen Syntaxfehler in der `routineCode`-Definition hinweist. Schritt 2 wird erfolgreich ausgeführt. Die Fetch-Aktion in Schritt 3 zeigt die Tabelle 'ml_prototypes_secure', aber die Spalten, die die Funktionsdefinitionen enthalten (_Code_, _ProtoTxt_), sind verschlüsselt und nicht als Klartext lesbar, was den erfolgreichen Einsatz des `encode`-Parameters bestätigt.