当前位置:网站首页>[quickstart to Digital IC Validation] 20. Basic syntax for system verilog Learning 7 (Coverage Driven... Including practical exercises)
[quickstart to Digital IC Validation] 20. Basic syntax for system verilog Learning 7 (Coverage Driven... Including practical exercises)
2022-07-07 15:26:00 【Lugant TCC】
Guide de lecture:L'auteur a eu le privilège d'être à l'avant - garde du domaine de l'information électronique en Chine“University of Electronic Science and Technology”Pendant les études supérieures,En contact avec le FrontNombreICValidation des connaissances,J'ai entendu des choses commeHuawei haisi、Tsinghua Purple light、Mediated Science and TechnologyCours en personne pour les principales entreprises de l'industrie liées aux circuits intégrés,Pour les chiffresICVérifier qu'il y a une certaine accumulation de connaissances et d'expériences d'apprentissage.Pour vous aider à démarrer le Front EndICAmis validés,Après avoir réfléchi un, deux,En particulier cette colonne,Dans l'espoir de prendre le plus de temps possible,Prenez le moins de virages possible,Le plus apprisICValidation des connaissances techniques.
Catalogue des articles
- Un.、Aperçu du contenu
- 2.、Technologie de vérification fondée sur la couverture
- Trois、Modèle de couverture fonctionnelle
- Quatre、Convergence de la couverture fonctionnelle
- Cinq、Données de couverture fonctionnelle
- Six、Normalisation et analyse des données de couverture fonctionnelle
- Sept、Type de couverture:RTLCouverture du Code
- Huit、Type de couverture:Couverture des assertions
- Neuf、Type de couverture:Couverture fonctionnelle
- Neuf、Type de couverture:Couverture fonctionnelle VS Couverture du Code
- Dix、Stratégie de validation fondée sur la couverture
- Onze、Couverture et défauts(Bug rate)La relation entre
- Douze、Définir un modèle de couverture fonctionnelle
- XIII.、Modélisation de la couverture fonctionnelle
- XIV.、Rapport de couverture fonctionnelle
- Quinze.、Événements d'échantillonnage pour la couverture fonctionnelle
- 16.、Couverture fonctionnelle:DéclencheurSystemVerilog Assertion
- XVII.、 Définir les points de couverture : Signaux et expressions
- Dix - huit.、 Définir les points de couverture :bins
- XIX.、 Définir les points de couverture :Couverture conditionnelle
- Vingt.、 Définir les points de couverture : Superposition du saut d'état
- Vingt et un.、 Définir les points de couverture : Couverture croisée
- Vingt - deux.、 Couverture paramétrique : Fournir la réutilisation du Code
- Vingt - trois.、covergroupComplément opérationnel(2021-10-15)
- Vingt - quatre.、Résumé
- X、Exercices pratiques
Un.、Aperçu du contenu
- Basé surFacteurs de couverture Technologie de validation pour
- Type de couverture:Couverture du Code(Outils générés automatiquement,Objectif) Et la couverture fonctionnelle ( Définir artificiellement les points de couverture ,Subjectivité)
- SV Couverture fonctionnelle en Modélisation
- Définir un modèle de couverture:
covergroup
- Définir les points de couverture :
coverpoint
- Couvrir les points
bins
- Fonction de couverture
Facteurs de couverture Peut être utilisé pour mesurer nos progrès de validation ,En bref,, Regarde ce qu'on a fait après une demi - journée . Le plus important, bien sûr, est de nous assurer que nous vérifions l'exhaustivité , Tous les points que nous pouvons identifier doivent être vérifiés .Ce qui doit être clarifié, Couverture requise , On ne peut pas dire que la validation est réelle. OKC'est, En fait, l'espace de validation est encore très grand , C'est juste que nos risques sont réduits , On ne peut pas dire qu'il n'y a aucun risque. !Donc..., La validation est parfois quelque chose que nous faisons de notre mieux .
2.、Technologie de vérification fondée sur la couverture
- La couverture est juste RTLConceptionFonction Pourcentage de couverture atteint après validation (Données quantitatives)
- Le processus d'inspection doit satisfaire aux exigences suivantes: IntégritéAvecExactitude, Pas de travail redondant
- Pour réduire au minimum la charge de travail de validation , Utiliser la couverture pour mesurer les fonctions testées d'une conception , Quelles fonctions n'ont pas été testées
- La couverture fonctionnelle est assurée par L'ingénieur de validation définit lui - même De, Utilisé pour mesurer si les spécifications de conception sont correctement mises en œuvre , Le contenu spécifique se reflète dans Plan de validation Moyenne
- Couverture fonctionnelle utilisée pour vérifier la conception Scénario d'application、Conditions limites、Variables spécialesOuConditions de conception Si elle a été entièrement testée ou confirmée
Trois、Modèle de couverture fonctionnelle
Définir un modèle de couverture
- Rédiger un modèle de couverture pour mesurer si les objectifs du plan de validation sont atteints
- Le modèle de couverture fonctionnelle ne peut pas être obtenu automatiquement à partir de la conception
- Le modèle de couverture fonctionnelle est défini par L'ingénieur de validation définit lui - même , Vérifier que l'intention de conception et les fonctions de conception sont correctement mises en œuvre dans un environnement de validation
- Selon Spécifications de conception et plan de vérification , Vérifier que l'Ingénieur doit définir ce qui doit être écrasé ( Testé ou vérifié )
Étapes
- Définir le signal échantillonné (coverage group)
- Définir le temps d'échantillonnage
Quatre、Convergence de la couverture fonctionnelle
- Convergence de la couverture
- Quelles stratégies et quels comportements adopter , Pour atteindre la couverture 100%
- La couverture fonctionnelle est utilisée pour mesurer les attributs de conception couverts par le cas d'essai. (design feathures)
- La convergence de couverture est une boucle de rétroaction , Utilisé pour analyser les résultats de la couverture et atteindre 100% Plan d'essai pour la détermination de la couverture
- Utiliser différentes graines(seed) Exécuter les tests existants où
- Nouvelles contraintes(new constraints)
- Quelles stratégies et quels comportements adopter , Pour atteindre la couverture 100%
Cinq、Données de couverture fonctionnelle
- Collecte de données sur la couverture
- Exécuter le même cas d'essai avec plus d'une graine
- Vérifier le cas d'essai (case)Fonctionnement correct(pass/fail)
- Seulement si le cas d'essai (case) Lorsque les résultats de la simulation sont corrects , Les données de couverture fonctionnelle sont valides
- CauseRTLDans la conceptionbug Lorsque les résultats de la simulation sont incorrects , Données de couverture fonctionnelle invalides ,Doit être jeté
- Couverture analytique
- Recueillir la couverture du Code dans la conception , Collecte de la couverture fonctionnelle lors de la validation
- La couverture de la collecte est RetourProcessus!
Six、Normalisation et analyse des données de couverture fonctionnelle
- Collecte de la base de données sur la couverture ,Et la normalisation
- Utiliser différentes graines, Exécution répétée de la plate - forme de validation aléatoire et des cas d'essai
- Normaliser les résultats de la couverture fonctionnelle pour tous les cas d'essai , Utilisé pour mesurer les progrès de la validation
- Analyser les données de couverture , Confirmer la modification des cas d'essai
- Si les données de couverture obtenues restent stables , Différents cas d'essai de semences sont nécessaires et le temps d'exécution des cas d'essai est prolongé.
- Si la couverture augmente Doucement.,Augmentation nécessaireContraintes Obtenir des incitations plus efficaces
- Si vous rencontrez un goulot d'étranglement , ..Besoin de créer plus de cas d'essai direct ,Respect des conditions limites
- Lorsque la couverture fonctionnelle approche 100%Heure,Inspection requisebugProbabilité d'apparition,Sibug On le trouve souvent , Description une partie du dessin ou modèle n'est pas entièrement couverte .Si ça n'arrive pasbug, Description vérification de la conception terminée .
Sept、Type de couverture:RTLCouverture du Code
Note:: La couverture des codes est une condition objective , C'est - à - dire que la dimension de style de code regarde la couverture , La couverture du Code est facile et nécessaire ( Ou peut - être pas, mais peut - être expliquer )Respect des exigences100%.
- Couverture du Code
- Mesurer les spécifications de conception couvertes par la validation des cas d'essai RTLDans la réalisation de, Au lieu de mesurer le plan de validation
- D'accord(
Line Coverage
):RTLLignes de code dans - Machine à l'état fini(
FSM Coverage
):RTL État de la machine à l'état fini dans le Code et transition entre les états - Chemin(
Path Coverage
):RTL Branche de chemin dans le Code (if-else
Déclarations) - Inversion du signal (
Toggle Coverage
):RTL Un signal dans le Code provient de 0Passer à1,Et de1Passer à0 - Que le mentor (
Expression Coverage
):RTL Expression conditionnelle dans le Code ,Par exempleif(a & b & c)
- D'accord(
- Mesurer les spécifications de conception couvertes par la validation des cas d'essai RTLDans la réalisation de, Au lieu de mesurer le plan de validation
Huit、Type de couverture:Couverture des assertions
Note:: Couverture fonctionnelle plus à vérifier LogiqueFonction, Impossible de voir si les informations de synchronisation sont correctes , Donc il y a une couverture d'assertion !
- Assertion Coverage Couverture des assertions
- Une affirmation est un code déclaratif ,Pour inspectionRTLDans le CodeEntre les signauxDe(Séries chronologiques)Relations
- Les affirmations peuvent être utilisées Processus Code ou utilisation
SystemVerilog Assertions
- L'assertion peut vérifier la valeur du signal ou l'état de la conception
cover property
Déclarations
Neuf、Type de couverture:Couverture fonctionnelle
- Est lié à l'intention de conception
- La couverture fonctionnelle dépend du plan de validation !
Neuf、Type de couverture:Couverture fonctionnelle VS Couverture du Code
- 100% La couverture du Code ne signifie pas 100% Couverture fonctionnelle de !
Dix、Stratégie de validation fondée sur la couverture
- Collecte d'informations plutôt que de données
- On ne peut mesurer que ce qui est utilisé
- Mesurer l'intégrité
Onze、Couverture et défauts(Bug rate)La relation entre
- Bug Probabilité d'apparition
- Bug rate C'est le nouveau RTL Probabilité de détection d'un défaut fonctionnel , La couverture peut être mesurée indirectement
- Bug rate Au fur et à mesure que le projet et la validation progressent
Douze、Définir un modèle de couverture fonctionnelle
- covergroup
- Spécification du modèle de couverture de l'emballage
- ChaquecovergroupContient ce qui suit
- Un événement d'horloge , Pour synchroniser les points de couverture de l'échantillonnage
- Un ensemble de points de couverture
- Couverture croisée entre les points de couverture
- Paramètres de forme optionnels
- Options de couverture
- Coverfroup Est un type de structure défini par l'utilisateur
- Après avoir défini le type , Vous pouvez l'instancier plusieurs fois dans différents programmes
- Suivez - moi.classSimilaire,Une fois la définition terminée,Vous pouvez utiliser le constructeur
new()
Générercovergroup
Exemples【OOP】 covergroup
Peut être défini dansmodule
,program
,interface
Ouclass
Moyenne- Un
covergroup
Peut contenir un ou plusieurs points de couverture- Un point de couverture peut être Une variableOuUne expression
- Chaque point de couverture a un ensemble
bins
Valeur, Cette valeur est liée à la variable échantillonnée ou à la conversion de la variable - Bins La valeur de peut être définie par l'utilisateur lui - même ,Ou parEDAOutils générés automatiquement
- covergroup Le nom doit être clair , Le nom vous permet de confirmer quelles fonctions sont écrasées , Il est préférable d'harmoniser avec le plan de validation
// Déclarez uncovergroup
covergroup cg;
….
endgroup
cg cg_inst = new;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
XIII.、Modélisation de la couverture fonctionnelle
- Commencez par le plan de validation , Écrivez un modèle de couverture fonctionnelle qui peut être simulé
- Valeurs des variables et expressions échantillonnées dans la plateforme de validation (
coverpoints
) - Dans l'exemple suivant, La plate - forme de validation génère des valeurs de port au hasard , Le plan de validation exige que toutes les valeurs soient traversées
XIV.、Rapport de couverture fonctionnelle
Quinze.、Événements d'échantillonnage pour la couverture fonctionnelle
- AveceventDéclenchécovergroup
- Lorsque la plate - forme de validation est déclenchée trans_ready Au moment de l'événement,ÉchantillonnageCovPort
16.、Couverture fonctionnelle:DéclencheurSystemVerilog Assertion
XVII.、 Définir les points de couverture : Signaux et expressions
Données d'échantillonnage
- Comment recueillir des renseignements sur la couverture ?
- Variables et expressions spécifiées dans le point de superposition ,SystemVerilog Un ensemble de bins, Pour enregistrer ces valeurs échantillonnées
- bins Est une mesure de la couverture fonctionnelle
- Après chaque Simulation , La base de données générée contient tous les bins
- EDA L'outil d'analyse peut lire cette base de données , Produire un rapport de couverture , Quelle partie de la conception est couverte par le rapport , Et la couverture totale
- Comment recueillir des renseignements sur la couverture ?
Privébins Et la couverture totale
- Calculer la couverture d'un point de couverture , Confirmer d'abord la quantité totale de toutes les valeurs possibles
- Couverture égale à l'échantillon bins Valeur divisée par le total binsValeur de
Expression d'échantillonnage
- Les expressions peuvent être échantillonnées , Mais vous devez vérifier le rapport de couverture , Assurez - vous que les valeurs d'échantillonnage sont correctes
Note::
lens32
La couverture devrait être :24 / 32 = 75%
. Méthode de calcul de la portée :hdr_len- Oui.3bit,Donc au total8Combinaisons,payload_lenHeure4bit,Donc au total16Combinaisons.Alors,Ça fait24Combinaisons0-23
, Et l'espace total est0-31
C'est - à - dire:32Combinaisons, Et enfin5'b0
Donc...32 Certaines des combinaisons doivent avoir des valeurs inférieures à ,Alors...lens32
La couverture de :24 / 32 = 75%
- Données d'échantillonnage:
bins
- Privébins Et la couverture totale
- SystemVerilog Création automatique de points de recouvrement bins
- UnN L'expression du BIT a
2 N 2^N </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.841331em; vertical-align: 0em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.841331em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight" style="margin-right: 0.10903em;">N</span></span></span></span></span></span></span></span></span></span></span></span>Valeurs valides</li><li>Un3bitVariable deportOui.8Valeur effective</li></ul> </li><li> Limiter la génération automatique binsNombre de <ul><li>covergroup Options<code>auto_bin_max</code> Spécifier la génération automatique binsNombre maximum de,La valeur par défaut est64bins</li></ul> </li></ul> </li></ul>
- Privébins Et la couverture totale
Note::Génération automatiquebins Ce genre de chose devrait être moins dans la pratique !
- Q: Qu'est - ce qu'un point de fonction ?
- A:UT/BT Points de fonction plus de modules de mise au point ;IT La correspondance peut être un flux de données ;ST Il peut s'agir d'un scénario d'application au niveau du système
- Donc..., Les points de fonction sont différents level Les points correspondant à la décomposition sur la validation sont différents
Dix - huit.、 Définir les points de couverture :bins
- Définition de l'utilisateurbins
- Nom explicite
bins
Peut améliorer la précision , Faciliter la couverture statistique
- Nom explicite
Note::Pourquoi23 Ça n'arrivera pas ?hdr_lenLa valeur maximale pour
7
,Etpayload_len
La valeur maximale pour22
,Donc...lenLa valeur maximale pour22
Ça n'arrivera pas.23!
- Point de couverturebinsNom de
- DéfinitionbinsHeure
- Valeur requise par l'utilisateur pour limiter les statistiques de couverture
- SystemVerilog Ne plus créer automatiquement bins, Et ignorer non défini par l'utilisateur binsValeur
- Seulement Défini par l'utilisateurbins Pour calculer la couverture fonctionnelle
- Utilisateur par défautbin Les valeurs peuvent être oubliées
- DéfinitionbinsHeure
XIX.、 Définir les points de couverture :Couverture conditionnelle
- Couverture conditionnelle( Les deux utilisations suivantes sont équivalentes )
- Utiliser des mots clés
iff
Ajouter une condition pour couvrir le point (Plus simple) - Utiliser
start
Etstop
Fonctions
- Utiliser des mots clés
Vingt.、 Définir les points de couverture : Superposition du saut d'état
Note:: Au - dessus, il y a des points de recouvrement statiques , Voici une collection de superpositions pour les points de commutation d'état .
- Transition Coverage Couverture des sauts
- Saut d'état du point de couverture défini par l'utilisateur , Et recueillir des informations pertinentes
- Utiliser
?
Les jokers égaux représentent l'état et le saut d'état
Attention!:Ci - dessus
t2
- Oui.1À3;1À4;2À3;2À4, Quatre situations de saut !
Note::Quand il y a plus d'états,Peut être utilisé?
Jokers
Vingt et un.、 Définir les points de couverture : Couverture croisée
Cross Coverage
Couverture croisée- Dans le Groupe de couverture , Vous pouvez définir l'intersection entre deux ou plusieurs points de couverture ou variables Couverture
Note::kind Total
16
Combinaisons d'espèces,portTotal8
Combinaisons d'espèces, Il y a16x8=128
Combinaisons d'espèces
Vingt - deux.、 Couverture paramétrique : Fournir la réutilisation du Code
- Paramétriquecovergroup
- SystemVerilog Autoriser la création de covergroup, Faciliter la création de définitions communes
Vingt - trois.、covergroupComplément opérationnel(2021-10-15)
Vingt - quatre.、Résumé
- Technologie de vérification fondée sur la couverture
- Pourquoi est - ce basé sur la couverture ? L'ensemble de la validation dépend de l'état d'avancement de la validation , La nécessité d'une couverture, un critère quantifiable, montre des progrès. . La couverture fonctionnelle est généralement 100%, Couverture du Code proche 100%( La couverture conditionnelle doit être basée sur le type de circuit spécifique , En général, il est difficile d'atteindre 100%, Doit être déterminé selon un code différent ). En résumé, il y a un objectif de couverture lors de la planification de la validation , Atteindre l'objectif de couverture , Pour satisfaire à nos exigences !Un autre point à souligner, Il ne s'agit pas d'atteindre la couverture, mais de vérifier OKC'est, Une fois la couverture atteinte , J'ai besoin de voir des choses comme des défauts, etc . Si la couverture ok, Mais les défauts restent élevés , Il n'est pas prouvé à ce stade que la validation est convergente !Un autre point, La couverture fonctionnelle est écrite par le validateur lui - même , Des mots écrits subjectivement , Peut - être pas tout à fait écrit au début , Donc même si 100%, On ne peut pas dire non plus que toutes les fonctions sont écrasées ! Parce que le scénario de couverture lui - même n'est pas écrit coverÀ, Donc tout le processus a besoin de plusieurs itérations pour finir .
- En dernier analyse, Souviens - toi de quelques points. .1、 Le taux de couverture est une échelle utilisée pour mesurer les progrès de la validation .2、 Incorporé dans le plan de validation , Un objectif de couverture doit être reflété au début de la validation .
- Type de couverture: Couverture des codes et des fonctions
- La couverture du Code est une couverture qui est automatiquement collectée par un outil objectif basé sur la structure de description du Code. ; Le taux de couverture fonctionnelle est le vérificateur qui analyse les spécifications fonctionnelles que nous voulons vérifier à partir du cahier des charges en tant qu'entrée. DUTQuelles sont les caractéristiques?, Puis écrivez ces points de fonction !
- La couverture du Code ne signifie pas que la fonctionnalité répond aux exigences ! Si la couverture du Code n'est pas suffisante , La validation est donc incomplète .
- SV Modélisation de la couverture fonctionnelle dans
- Définir un modèle de couverture:covergroup
- Définir les points de couverture :coverpoint
- Couvrir les points bins( Limites de contraintes similaires ,Il y a une couverture conditionnelle.、 Couverture croisée 、transitionÉcraser( Couverture au fil du temps ))
- Fonction de couverture (Paramètres de passage)
X、Exercices pratiques
X.1、Écrire le code source
ModifierMakefile
, Parce que nous devons voir la couverture ,Il faut doncMakefile
Ajouterdve
Commandes liées à l'outil .
Makefile
comp_file = ;
all: comp run dve_cov
comp:
vcs -full64 -sverilog -debug_all -timescale=1ns/1ps $(comp_file) -l comp.log
run:
./simv -l $(comp_file).log
dve_wave:
dve -vpd vcdplus.vpd &
dve_cov:
dve -full64 -covdir simv.vdb
log:
sed '/^[^*].*/d' $(comp_file).log > rslt.log
open:
gvim rslt.log
clean:
rm -rf csrc simv* *.log ucli.key
dve_wave
À l'arrièreSVAOn va utiliser,Pas pour le moment- Changement
all
Pour:comp run dve_cov
dve_cov
C'est ce dont nous avons besoin pour collecter la couverture
cov_demo.sv
module cov_demo();
class transaction;//Motivation
rand bit [31:0] data;
rand bit [2:0] port;
/* constraint data_c1{
data inside{
[0:100], [101:9999], [10000:12000]};
} */
endclass
covergroup cov_grp;
cport : coverpoint tr.port;
cdata : coverpoint tr.data;
/* cdata : coverpoint tr.data {
bins min = {
[0:100]};
bins mid = {
[101:9999]};
bins max = {
[10000:$]};
}*/
endgroup
transaction tr = new;
cov_grp ck = new;
initial begin
repeat(32) begin//Nombre de répétitions
tr.randomize;// Envoyer des incitations
ck.sample();// Couverture de la collecte
end
end
endmodule
port
Etdata
Juste un nom avant le point - virgule , N'importe quoi !
X.2、Exécuter le code source
Mise en œuvremake comp_file=cov_demo.sv
Sera automatiquement compilé et lancé et éjecté DVE
Fenêtre pour voir la couverture !
Cliquez sur le côté gauche<Function Groups>
De+
Élargissez cette option , Puis double - cliquez cov_demo::cov_grp Covergroup definition
Visible sur le port série droit cov_demo::cov_grp
La couverture correspondante n'est que de 14.84%
, C'est très bas ! Vous pouvez continuer à cliquer sur cdata
Etcport
Quelles sont les superpositions des variables que vous verrez à droite , Ce qui n'est pas couvert .Comme le montre la figure ci - dessous::
Note:: Parce que par défaut bins, Donc ce qui est marqué ici est
auto
.auto binsDans le cas de,bins Il y a beaucoup de catégories pour , La couverture est particulièrement faible !
Il n'est pas difficile de voir à partir de la figure ci - dessous ,cport
Couverture25%
, Des informations spécifiques sur la couverture sont disponibles à droite ,6
Et7
Un coup 1Et3Une fois,Et0-5
6 Les valeurs ne sont pas écrasées ,Donc la couverture est2/8=0.25
.
Dans les expériences ci - dessus, On a juste repeatC'est4Une fois, Ce qui réduit la portée du coup ,La couverture n'est que25%C'est logique..Ensuite, nous modifionsrepeatLire comme suit:32,Augmentation du nombre de fois, Il est possible d'étendre la portée des coups ,C'est - à - direcport
Etcdata
La couverture des variables augmentera également !
Cliquez sur le coin supérieur droit pour fermer DVE,Modifier le code sourcerepeatParamètres,Et redirigerMakefileScript.
Les résultats de l'opération sont présentés dans la figure ci - dessous., Vous pouvez voir que la couverture globale est 69.53%
,Augmentation significative.Parmi euxcport
De8 Tous les cas couverts ,Donc la couverture est100%!
Ensuite, nous utilisons la personnalisation bins,Annulation14-18Commentaire de ligne,Et mettre13Commentaire de ligne.Voici le général.dataDivisé en trois catégories, Prenez le premier type min
Par exemple,,Tant qu'il apparaît0~100
N'importe quel nombre de,Même s'il frappemin, Même un point d'essai équivalent ! Comme produire un 50,Donc ça veut dire0~100
Une telle portée a été testée !
Comme le montre la figure ci - dessous:,Je vois.cdata
C'est couvert.max
,Pourmid
Etmin
Pas de couverture , À ce stade, nous ne pouvons qu'ajuster les contraintes de l'excitation aléatoire , Qu'il produise des moyennes et des petites valeurs !
Annulez la 6-8
Commentaire de ligne,Paire de mise en œuvredata
Limiter la portée de . Pour faciliter DVE
,ExécutionMakefileScript,Je vois.cdata
Le taux de couverture et le taux de couverture global ont atteint 100%
!
Note:: Si une classe n'est pas écrasée , Nous pouvons réduire les contraintes , Pour l'écraser individuellement . Voici une révélation , Peut exécuter plusieurs cas d'utilisation , Exécuter plusieurs gammes par cas d'utilisation , Donc ça finit par arriver. merge,data La couverture de 100%C'est!
边栏推荐
- 【搞船日记】【Shapr3D的STL格式转Gcode】
- 知否|两大风控最重要指标与客群好坏的关系分析
- Bye, Dachang! I'm going to the factory today
- Basic knowledge sorting of mongodb database
- Niuke real problem programming - day15
- [quick start of Digital IC Verification] 26. Ahb-sramc of SystemVerilog project practice (6) (basic points of APB protocol)
- 众昂矿业:萤石继续引领新能源市场增长
- JSON parsing instance (QT including source code)
- Ctfshow, information collection: web8
- 广州开发区让地理标志产品助力乡村振兴
猜你喜欢
2. Heap sort "hard to understand sort"
[quick start of Digital IC Verification] 29. Ahb-sramc (9) (ahb-sramc svtb overview) of SystemVerilog project practice
[data mining] visual pattern mining: hog feature + cosine similarity /k-means clustering
Ctfshow, information collection: web8
What is data leakage
Niuke real problem programming - day16
简述keepalived工作原理
Niuke real problem programming - day13
Niuke real problem programming - day14
How to release NFT in batches in opensea (rinkeby test network)
随机推荐
What are PV and UV? pv、uv
PG basics -- Logical Structure Management (locking mechanism -- table lock)
【數字IC驗證快速入門】26、SystemVerilog項目實踐之AHB-SRAMC(6)(APB協議基本要點)
Connecting FTP server tutorial
CTFshow,信息搜集:web12
Pat grade a 1103 integer factorizatio
Niuke real problem programming - Day9
Runnable是否可以中断
Ctfshow, information collection: web9
Concurrency Control & NoSQL and new database
数学建模——什么是数学建模
Basic knowledge sorting of mongodb database
暑期安全很重要!应急安全教育走进幼儿园
【数字IC验证快速入门】22、SystemVerilog项目实践之AHB-SRAMC(2)(AMBA总线介绍)
How to enable radius two factor / two factor (2fa) identity authentication for Anheng fortress machine
Niuke real problem programming - day16
2.Golang基础知识
众昂矿业:萤石继续引领新能源市场增长
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
CTFshow,信息搜集:web4