Files
TBgen_App/autoline/__pycache__/quality_evaluator.cpython-312.pyc

379 lines
39 KiB
Plaintext
Raw Normal View History

2026-03-30 16:46:48 +08:00
<EFBFBD>
,l<>i<EFBFBD><69><00><00><><00>dZddlZddlZddlZddlZddlmZmZmZm Z m
Z
m Z ddl m Z mZddlmZddlmZej&e<14>ZGd<07>d<08>ZGd <09>d
e<10>Ze Gd <0B>d <0C><00>Ze Gd <0A>d<0E><00>Ze Gd<0F>d<10><00>ZGd<11>d<12>ZGd<13>d<14>ZGd<15>d<16>ZGd<17>d<18>ZGd<19>d<1A>Zd!deee e fdefd<1D>Z!de de de"fd <20>Z#y)"a
Description : Quality Evaluation Layer (Layer 3)
- Diversity Evaluator (4-dimension)
- Semantic Coverage Calculator
- Test Case Quality Scorer
Author : CGA Enhancement Project
Time : 2026/03/16
<EFBFBD>N)<06>List<73>Dict<63>Optional<61>Any<6E>Tuple<6C>Set)<02> dataclass<73>field)<01>Enum)<01> defaultdictc<00>4<00>eZdZdZdZdZdZdZdZdZ dZ
dZ d Z y
) <0B> QualityConfigu质量评估配置g333333<33>?g<00>?g<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?g<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?gffffff<66>?g333333<33>?<3F>g<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?N) <0A>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__<5F>SEQUENCE_DIVERSITY_WEIGHT<48>SEMANTIC_VECTOR_WEIGHT<48>EXECUTION_PATH_WEIGHT<48>FUNCTION_COVERAGE_WEIGHT<48>MIN_DIVERSITY_THRESHOLD<4C>HIGH_DIVERSITY_THRESHOLD<4C>SEMANTIC_COVERAGE_TARGET<45>MIN_EDIT_DISTANCE<43>SIMILARITY_THRESHOLD<4C><00><00>@/home/zhang/CorrectBench/TBgen_App/autoline/quality_evaluator.pyrrsE<00><00><1C>!%<25><1D>!<21><1A> <20><19>#<23><1C>"<22><1B>"<22><1C> $<24><1C><1A><15><1F>rrc<00> <00>eZdZdZdZdZdZdZy)<07>DiversityDimensionu多样性维度枚举<E69E9A>sequence<63>semantic<69>path<74>functionN)rrrr<00>SEQUENCE<43>SEMANTIC_VECTOR<4F>EXECUTION_PATH<54>FUNCTION_COVERAGErrrr!r!5s<00><00><1F><19>H<EFBFBD> <20>O<EFBFBD><1B>N<EFBFBD>"<22>rr!c<00><><00>eZdZUdZdZeed<dZeed<dZeed<dZ eed<dZ
eed<e e <0C><08>Z eeefed <d
efd <0B>Zd
eeeffd <0C>Zy )<0E>DiversityScoreuU
多样性评分
Attributes:
sequence_diversity: 输入序列多样性得分
semantic_diversity: 语义向量多样性得分
path_diversity: 执行路径多样性得分
function_diversity: 功能覆盖多样性得分
overall_score: 综合多样性得分
details: 详细信息
<20><00>sequence_diversity<74>semantic_diversity<74>path_diversity<74>function_diversity<74> overall_score<72><01>default_factory<72>details<6C>returnc<00><00>tj|jztj|jzztj
|j zztj|jzz|_ |jS)u计算综合多样性得分)
rrr-rr.rr/rr0r1<00><01>selfs r<00>calculate_overallz DiversityScore.calculate_overallQs~<00><00> <1A> 3<> 3<>d<EFBFBD>6M<36>6M<36> M<> <19> 0<> 0<>4<EFBFBD>3J<33>3J<33> J<> K<01> <19> /<2F> /<2F>$<24>2E<32>2E<32> E<> F<01> <1A> 2<> 2<>T<EFBFBD>5L<35>5L<35> L<> M<01> <0A><1A> <14>!<21>!<21>!rc<00><><00>t|jd<01>t|jd<01>t|jd<01>t|jd<01>t|j
d<01>|j d<02>S)<03>转换为字典<E5AD97>)r-r.r/r0r1r4)<07>roundr-r.r/r0r1r4r7s r<00>to_dictzDiversityScore.to_dict[se<00><00>#(<28><04>(?<3F>(?<3F><11>"C<>"'<27><04>(?<3F>(?<3F><11>"C<>#<23>D<EFBFBD>$7<>$7<><11>;<3B>"'<27><04>(?<3F>(?<3F><11>"C<>"<22>4<EFBFBD>#5<>#5<>q<EFBFBD>9<><1B>|<7C>|<7C> 
<EFBFBD>
rN)rrrrr-<00>float<61>__annotations__r.r/r0r1r
<00>dictr4r<00>strrr9r>rrrr+r+=su<00><00>
<08>!$<24><16><05>#<23> #<23><16><05>#<23><1F>N<EFBFBD>E<EFBFBD><1F> #<23><16><05>#<23><1E>M<EFBFBD>5<EFBFBD><1E>#<23>D<EFBFBD>9<>G<EFBFBD>T<EFBFBD>#<23>s<EFBFBD>(<28>^<5E>9<>"<22>5<EFBFBD>"<22> 
<EFBFBD><14>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E> 
rr+c<00><><00>eZdZUdZdZeed<dZeed<dZe ed<e
e <0B><07>Z e ee fed<e
e<0F><07>Zee eefed <d
e eeffd <0B>Zy ) <0A>SemanticCoverageResultu:
语义覆盖率结果
Attributes:
total_function_points: 总功能点数
covered_function_points: 已覆盖功能点数
semantic_coverage: 语义覆盖率
coverage_by_type: 按类型统计的覆盖率
uncovered_important: 未覆盖的高重要性功能点
r<00>total_function_points<74>covered_function_pointsr,<00>semantic_coverager2<00>coverage_by_type<70>uncovered_importantr5c<00><><00>|j|jt|jd<01>|j|j
d<02>S)r;r<)rErFrGrHrI)rErFr=rGrHrIr7s rr>zSemanticCoverageResult.to_dictysB<00><00>&*<2A>%?<3F>%?<3F>'+<2B>'C<>'C<>!&<26>t<EFBFBD>'=<3D>'=<3D>q<EFBFBD>!A<> $<24> 5<> 5<>#'<27>#;<3B>#;<3B> 
<EFBFBD>
rN)rrrrrE<00>intr@rFrGr?r
rArHrrB<00>listrIrrr>rrrrDrDgst<00><00> <08>"#<23><19>3<EFBFBD>"<22>#$<24><1B>S<EFBFBD>$<24>"<22><15>u<EFBFBD>"<22>).<2E>t<EFBFBD>)D<><14>d<EFBFBD>3<EFBFBD><05>:<3A>&<26>D<>05<30>d<EFBFBD>0K<30><17><14>d<EFBFBD>3<EFBFBD><03>8<EFBFBD>n<EFBFBD>-<2D>K<>
<EFBFBD><14>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E>
rrDc<00>n<00>eZdZUdZeed<eed<eed<dZeed<e e
<EFBFBD><07>Z e eed<d Z eed
<y ) <0C>FunctionCoverageStateu0
功能点覆盖状态
Attributes:
name: 功能点名称
fp_type: 功能点类型
importance: 重要性评分
covered: 是否已覆盖
covered_by: 覆盖该功能点的测试用例ID列表
last_check_iteration: 最后检查的迭代次数
<20>name<6D>fp_type<70>
importanceF<EFBFBD>coveredr2<00>
covered_byr<00>last_check_iterationN)rrrrrBr@r?rR<00>boolr
rLrSrrTrKrrrrNrN<00>sA<00><00>
<08> <0E>I<EFBFBD> <10>L<EFBFBD><15><15><19>G<EFBFBD>T<EFBFBD><19>!<21>$<24>7<>J<EFBFBD><04>S<EFBFBD> <09>7<> !<21><18>#<23>!rrNc<00>j<00>eZdZdZedededefd<05><04>Zedededefd<06><04>Z edededefd<07><04>Z
y) <09>EditDistanceCalculatoru编辑距离计算器<E7AE97>s1<73>s2r5c <00><><00>t|<00>t|<01>krtj||<00>St|<01>dk(r t|<00>Stt|<01>dz<00>}t |<00>D]Z\}}|dzg}t |<01>D]?\}}||dzdz}||dz} ||||k7z}
|j t || |
<EFBFBD><00><00>A|}<02>\|dS)u<>
计算Levenshtein编辑距离
Args:
s1: 字符串1
s2: 字符串2
Returns:
编辑距离
r<00><00><><EFBFBD><EFBFBD><EFBFBD>)<07>lenrW<00>levenshtein_distance<63>range<67> enumerate<74>append<6E>min) rXrY<00> previous_row<6F>i<>c1<63> current_row<6F>j<>c2<63>
insertions<EFBFBD> deletions<6E> substitutionss rr^z+EditDistanceCalculator.levenshtein_distance<63>s<><00><00> <0F>r<EFBFBD>7<EFBFBD>S<EFBFBD><12>W<EFBFBD> <1C>)<29>><3E>><3E>r<EFBFBD>2<EFBFBD>F<> F<> <0E>r<EFBFBD>7<EFBFBD>a<EFBFBD><<3C><16>r<EFBFBD>7<EFBFBD>N<EFBFBD><1C>S<EFBFBD><12>W<EFBFBD>q<EFBFBD>[<5B>)<29> <0C><1E>r<EFBFBD>]<5D> '<27>E<EFBFBD>A<EFBFBD>r<EFBFBD><1C>q<EFBFBD>5<EFBFBD>'<27>K<EFBFBD>"<22>2<EFBFBD><1D> N<01><05><01>2<EFBFBD>)<29>!<21>a<EFBFBD>%<25>0<>1<EFBFBD>4<>
<EFBFBD>'<27><01>N<EFBFBD>Q<EFBFBD>.<2E> <09> ,<2C>Q<EFBFBD><0F>2<EFBFBD><12>8<EFBFBD> <<3C> <0A><1B>"<22>"<22>3<EFBFBD>z<EFBFBD>9<EFBFBD>m<EFBFBD>#L<>M<>  N<01> '<27>L<EFBFBD> '<27><1C>B<EFBFBD><1F>rc<00><><00>|s|sytt|<00>t|<01><00>}|dk(rytj||<01>}||z S)u<>
计算归一化的编辑距离 (0-1范围)
Args:
s1: 字符串1
s2: 字符串2
Returns:
归一化编辑距离 (0表示相同1表示完全不同)
r,r)<04>maxr]rWr^)rXrY<00>max_len<65>distances r<00>normalized_distancez*EditDistanceCalculator.normalized_distance<63>sG<00><00><12>"<22><16><15>c<EFBFBD>"<22>g<EFBFBD>s<EFBFBD>2<EFBFBD>w<EFBFBD>'<27><07> <12>a<EFBFBD><<3C><16>)<29>><3E>><3E>r<EFBFBD>2<EFBFBD>F<><08><17>'<27>!<21>!rc<00>4<00>dtj||<01>z
S)u<>
计算相似度 (1 - 归一化编辑距离)
Args:
s1: 字符串1
s2: 字符串2
Returns:
相似度 (1表示相同0表示完全不同)
<20><00>?<3F>rWrp)rXrYs r<00>
similarityz!EditDistanceCalculator.similarity<74>s<00><00><13>+<2B>?<3F>?<3F><02>B<EFBFBD>G<>G<>GrN) rrrr<00> staticmethodrBrKr^r?rprtrrrrWrW<00>s<><00><00><1F><11> <20><13> <20>#<23> <20>#<23> <20><12> <20><<12>"<22><03>"<22><13>"<22><15>"<22><12>"<22>&<12> H<01>s<EFBFBD> H<01><03> H<01><05> H<01><12> HrrWc <00>l<00>eZdZdZededeeeffd<04><04>Zeddede ede e
eeeffd<07><05>Z y) <09>SequenceFeatureExtractoru序列特征提取器<E58F96>coder5c<00>,<00>gggigdd<02>}d}tj||<00>D]n}|jd<04>}|jd<05>j<00>}|dj ||f<02>||dvrg|d|<|d|j |<05><00>pd}tj
||<00>D<00>cgc] }t |<07><00><02>}}||d <d
} tj
| |<00>D<00>
cgc] }
t |
<EFBFBD><00><02>} }
|d j| D<00>
cgc]}
d |
f<02><02>c}
<EFBFBD>d } tj
| |<00>} |d j| D<00>cgc]}d|f<02><02>c}<0E>g}tjd|<00>D]0}|j |jd<04>j<00><00><00>2||d<tjdd|<00>j<00>}tj|j<00><00>j<00>dd|d<|Scc}wcc}
wcc}
wcc}w)u<>
从代码中提取序列特征
Args:
code: 测试代码
Returns:
特征字典
<20>)<06>signal_assignments<74>delay_patterns<6E>control_structures<65> signal_values<65>operation_sequence<63> code_hash<73>(\w+)\s*=\s*([^;]+);r[<00>r{r~z#(\d+)r|zrepeat\s*\(\s*(\d+)\s*\)r}<00>repeatz@(?:posedge|negedge)\s+(\w+)<29>edgezJ((?:\w+\s*=\s*[^;]+;)|(?:#\d+;)|(?:repeat\s*\(\d+\)[^;]+;)|(?:@\([^)]+\)))rz\s+<2B> N<>r<>) <0A>re<72>finditer<65>group<75>stripra<00>findallrK<00>extend<6E>sub<75>hashlib<69>md5<64>encode<64> hexdigest)rx<00>features<65>assign_pattern<72>match<63>signal<61>value<75> delay_pattern<72>d<>delays<79>repeat_pattern<72>r<>repeats<74> edge_pattern<72>edges<65>e<>all_operations<6E>normalized_codes r<00>extract_featuresz)SequenceFeatureExtractor.extract_features<65>s<00><00>#%<25> <20>"$<24><1F>"$<24><1B> 
<EFBFBD><08>1<><0E><17>[<5B>[<5B><1E><14>6<> <<3C>E<EFBFBD><1A>[<5B>[<5B><11>^<5E>F<EFBFBD><19>K<EFBFBD>K<EFBFBD><01>N<EFBFBD>(<28>(<28>*<2A>E<EFBFBD> <14>)<29> *<2A> 1<> 1<>6<EFBFBD>5<EFBFBD>/<2F> B<><15>X<EFBFBD>o<EFBFBD>6<>6<>46<34><08><1F>)<29>&<26>1<> <14>_<EFBFBD> %<25>f<EFBFBD> -<2D> 4<> 4<>U<EFBFBD> ;<3B>  <<3C>"<22> <0A>"$<24>*<2A>*<2A>]<5D>D<EFBFBD>"A<>B<>Q<EFBFBD>#<23>a<EFBFBD>&<26>B<><06>B<>%+<2B><08>!<21>"<22>5<><0E>#%<25>:<3A>:<3A>n<EFBFBD>d<EFBFBD>#C<>D<>a<EFBFBD>3<EFBFBD>q<EFBFBD>6<EFBFBD>D<><07>D<><10>%<25>&<26>-<2D>-<2D>g<EFBFBD>.N<><11><08>!<21>}<7D>.N<>O<>7<> <0C><12>
<EFBFBD>
<EFBFBD><<3C><14>.<2E><05><10>%<25>&<26>-<2D>-<2D>E<EFBFBD>.J<>q<EFBFBD><06><01>{<7B>.J<>K<><1C><0E><18>[<5B>[<5B>!n<>pt<70>u<> :<3A>E<EFBFBD> <1A> !<21> !<21>%<25>+<2B>+<2B>a<EFBFBD>.<2E>"6<>"6<>"8<> 9<> :<3A>*8<><08>%<25>&<26><1D>&<26>&<26><16><13>d<EFBFBD>3<>9<>9<>;<3B><0F> '<27> <0B> <0B>O<EFBFBD>,B<>,B<>,D<> E<> O<> O<> Q<>RU<52>SU<53> V<><08><1B><1D><17><0F><>5C<01><>
E<01><>.N<><4E>
/Ks<00>-H<04> H<04> H <08> HN<>signalsc<00>N<00>g}|jd<01>}d}|D]<5D>}|j<00>}|jd<03>r|}<04>'tjd|<06>}|s<01>@|j d<05>}|j d<06>j<00>} |<01>||vs<01>w|j || |f<03><00><>|S)u<>
提取信号赋值序列
Args:
code: 测试代码
signals: 关注的信号列表(可选)
Returns:
(信号名, 值, 上下文) 元组列表
<20>
rzz//r<>r[r<>)<07>splitr<74><00>
startswithr<EFBFBD>r<>r<>ra)
rxr<><00> sequences<65>lines<65>context<78>line<6E>stripped<65> assign_matchr<68>r<>s
r<00>extract_signal_sequencez0SequenceFeatureExtractor.extract_signal_sequence%s<><00><00><17> <09><15>
<EFBFBD>
<EFBFBD>4<EFBFBD> <20><05><14><07><19> ?<3F>D<EFBFBD><1B>z<EFBFBD>z<EFBFBD>|<7C>H<EFBFBD><18>"<22>"<22>4<EFBFBD>(<28>"<22><07><18><1E>8<EFBFBD>8<EFBFBD>$;<3B>X<EFBFBD>F<>L<EFBFBD><1B>%<25>+<2B>+<2B>A<EFBFBD>.<2E><06>$<24>*<2A>*<2A>1<EFBFBD>-<2D>3<>3<>5<><05><1B>?<3F>f<EFBFBD><07>&7<><1D>$<24>$<24>f<EFBFBD>e<EFBFBD>W<EFBFBD>%=<3D>><3E>! ?<3F>$<19>r<00>N) rrrrrurBrrr<>rrr<>rrrrwrw<00>so<00><00><1F><11>9<18>s<EFBFBD>9<18>t<EFBFBD>C<EFBFBD><13>H<EFBFBD>~<7E>9<18><12>9<18>v<12>#<19>c<EFBFBD>#<19>D<EFBFBD><13>I<EFBFBD>#<19><14>e<EFBFBD>TW<54>Y\<5C>^a<>Ta<54>Nb<4E>Ic<49>#<19><12>#rrwc <00><00>eZdZdZd<02>Z ddedeedeedefd<08>Z dd ed
eed eed e
fd <0A>Z d ede d e fd<0F>Zde d e fd<10>Zd
eed e fd<11>Zd eed e fd<12>Zde d e ee ffd<14>Zde ee fde ee fd e fd<17>Zd e eeffd<18>Zy)<1B>DiversityEvaluatoruK
多样性评估器
四维度多样性评估:
1. 输入序列多样性:计算与已有序列的编辑距离
2. 语义向量多样性:计算代码特征向量的相似度
3. 执行路径多样性:计算新覆盖代码行的比例
4. 功能覆盖多样性:计算新覆盖功能点的比例
c<00>N<00>g|_t<00>|_t<00>|_y)u初始化多样性评估器N)<05>historyrw<00>feature_extractorrW<00>edit_distance_calcr7s r<00>__init__zDiversityEvaluator.__init__[s<00><00>-/<2F><04> <0C>!9<>!;<3B><04><1E>"8<>":<3A><04>rNrx<00> covered_lines<65>covered_functions<6E>test_idc<00><><00>|jj|<01>}||||xs
t<00>|xsg|dd<02>}|jj |<06>y)u<>
添加测试用例到历史记录
Args:
code: 测试代码
covered_lines: 覆盖的代码行
covered_functions: 覆盖的功能点列表
test_id: 测试用例ID
r<>)r<>rxr<>r<>r<>r<>N)r<>r<><00>setr<74>ra)r8rxr<>r<>r<>r<><00>records r<00>add_to_historyz!DiversityEvaluator.add_to_historyasZ<00><00><18>)<29>)<29>:<3A>:<3A>4<EFBFBD>@<40><08><1F><18> <20>*<2A>3<>c<EFBFBD>e<EFBFBD>!2<>!8<>b<EFBFBD>!<21>+<2B>.<2E> 
<EFBFBD><06> <0A> <0C> <0C><1B><1B>F<EFBFBD>#r<00>new_code<64>new_covered_lines<65>new_covered_functionsr5c<00>D<00>t<00>}|js7d|_d|_d|_d|_|j <00>ddi|_|S|jj|<01>}|xs
t<00>}|xsg}|j||<05>|_|j|<05>|_|j|<02>|_|j|<03>|_|j <00>t|j<00>|dt|d<00>t|d<00>d<07>|_|S)u
评估新测试用例的多样性
Args:
new_code: 新测试代码
new_covered_lines: 新覆盖的代码行
new_covered_functions: 新覆盖的功能点列表
Returns:
多样性评分
rr<00>reason<6F>first_test_caser<65>r~r)<04> history_size<7A> new_code_hash<73> signal_count<6E>operation_count)r+r<>r-r.r/r0r9r4r<>r<>r<><00>_evaluate_sequence_diversity<74>_evaluate_semantic_diversity<74>_evaluate_path_diversity<74>_evaluate_function_diversityr])r8r<>r<>r<><00>score<72> new_featuress r<00>evaluatezDiversityEvaluator.evaluate|s(<00><00><1F> <20><05><13>|<7C>|<7C>'*<2A>E<EFBFBD> $<24>'*<2A>E<EFBFBD> $<24>#&<26>E<EFBFBD> <20>'*<2A>E<EFBFBD> $<24> <11> #<23> #<23> %<25>%<25>'8<>9<>E<EFBFBD>M<EFBFBD><18>L<EFBFBD><1C>-<2D>-<2D>><3E>><3E>x<EFBFBD>H<> <0C>-<2D>6<><13><15><19> 5<> ;<3B><12><1D>$(<28>#D<>#D<>X<EFBFBD>|<7C>#\<5C><05> <20>$(<28>#D<>#D<>\<5C>#R<><05> <20> $<24><<3C><<3C>=N<>O<><05><1C>$(<28>#D<>#D<>EZ<45>#[<5B><05> <20> <0E><1F><1F>!<21> <20><04> <0C> <0C>-<2D>)<29>+<2B>6<><1F> <0C>_<EFBFBD> =<3D>><3E>"<22><<3C>0D<30>#E<>F<> 
<EFBFBD><05> <0A><15> rr<>c<00><00>|jsy|d}d}|jddD]Y}|dd}dj|<03>}dj|<06>}|jj||<08>} d| z
}
t ||
<EFBFBD>}<04>[|S)u评估输入序列多样性rrrr,<00><><EFBFBD><EFBFBD><EFBFBD>Nr<4E>r<>)r<><00>joinr<6E>rtrm) r8r<>r<><00>new_ops<70> max_distancer<65><00>hist_ops<70> new_ops_str<74> hist_ops_strrtros rr<>z/DiversityEvaluator._evaluate_sequence_diversity<74>s<><00><00><13>|<7C>|<7C><16><1F>3<>4<><07><1B> <0C><1A>l<EFBFBD>l<EFBFBD>3<EFBFBD>4<EFBFBD>(<28> 7<>F<EFBFBD><1D>j<EFBFBD>)<29>*><3E>?<3F>H<EFBFBD><1E>(<28>(<28>7<EFBFBD>+<2B>K<EFBFBD><1E>8<EFBFBD>8<EFBFBD>H<EFBFBD>-<2D>L<EFBFBD><1D>0<>0<>;<3B>;<3B>K<EFBFBD><1C>V<>J<EFBFBD><1A>Z<EFBFBD>'<27>H<EFBFBD><1E>|<7C>X<EFBFBD>6<>L<EFBFBD> 7<><1C>rc<00><><00>|jsy|j|<01>}d}|jddD]9}|j|d<00>}|j||<05>}d|z
}t||<07>}<03>;|S)u评估语义向量多样性rrr,r<>Nr<4E>)r<><00>_build_feature_vector<6F>_cosine_similarityrm)r8r<><00>
new_vectorr<EFBFBD>r<><00> hist_vectorrtros rr<>z/DiversityEvaluator._evaluate_semantic_diversity<74>s<><00><00><13>|<7C>|<7C><16><1A>/<2F>/<2F> <0C>=<3D>
<EFBFBD><1B> <0C><1A>l<EFBFBD>l<EFBFBD>3<EFBFBD>4<EFBFBD>(<28> 7<>F<EFBFBD><1E>4<>4<>V<EFBFBD>J<EFBFBD>5G<35>H<>K<EFBFBD><1D>0<>0<><1A>[<5B>I<>J<EFBFBD><1A>Z<EFBFBD>'<27>H<EFBFBD><1E>|<7C>X<EFBFBD>6<>L<EFBFBD>  7<> <1C>rc<00><><00>|jsy|syt<00>}|jD]}|j|d<00><00>||z
}|syt|<04>t|<01>z }|S)u评估执行路径多样性rrr,r<><00>r<>r<><00>updater])r8r<><00> all_coveredr<64><00> new_lines<65> novelty_ratios rr<>z+DiversityEvaluator._evaluate_path_diversity<74>so<00><00><13>|<7C>|<7C><16> <20><16><1A>e<EFBFBD> <0B><1A>l<EFBFBD>l<EFBFBD> 8<>F<EFBFBD> <17> <1E> <1E>v<EFBFBD>o<EFBFBD>6<> 7<> 8<>&<26> <0B>3<> <09> <20><16><1C>I<EFBFBD><0E><13>-><3E>)?<3F>?<3F> <0A><1C>rc<00><><00>|jsy|syt<00>}|jD]}|j|d<00><00>t|<01>|z
}|syt|<04>t|<01>z }|S)u评估功能覆盖多样性rrr,r<>r<>)r8r<>r<>r<><00> new_functionsr<73>s rr<>z/DiversityEvaluator._evaluate_function_diversity<74>sw<00><00><13>|<7C>|<7C><16>$<24><16><1A>e<EFBFBD> <0B><1A>l<EFBFBD>l<EFBFBD> <<3C>F<EFBFBD> <17> <1E> <1E>v<EFBFBD>&9<>:<3A> ;<3B> <<3C><1C>1<>2<>[<5B>@<40> <0A>$<24><16><1C>M<EFBFBD>*<2A>S<EFBFBD>1F<31>-G<>G<> <0A><1C>rr<>c<00>><00>i}t|d<00>|d<t|d<00>|d<t|d<00>|d<t|d<00>|d<t|d<00>|d <td
<EFBFBD>|dD<00><00>}||d <td <0C>|dD<00><00>}||d <t|d<00>|d<|S)u构建特征向量r~r<>rr<>r|<00> delay_count<6E> delay_sumr}<00> control_countc3<00>2K<00>|]}|ddk(s<01> d<02><01><00>y<03>w)rr<>r[Nr<00><02>.0<EFBFBD>cs r<00> <genexpr>z;DiversityEvaluator._build_feature_vector.<locals>.<genexpr>"s<00><00><><00>Y<><11><01>!<21><04>PX<50>HX<48>1<EFBFBD>Y<><59><00> <01><01> repeat_countc3<00>2K<00>|]}|ddk(s<01> d<02><01><00>y<03>w)rr<>r[Nrr<>s rr<>z;DiversityEvaluator._build_feature_vector.<locals>.<genexpr>&s<00><00><><00>U<>q<EFBFBD>a<EFBFBD><01>d<EFBFBD>f<EFBFBD>n<EFBFBD><11>U<>r<EFBFBD><00>
edge_countr{<00>assignment_count)r]<00>sum)r8r<><00>vectorr<72>r<>s rr<>z(DiversityEvaluator._build_feature_vectors<><00><00><13><06>"%<25>X<EFBFBD>o<EFBFBD>%><3E>!?<3F><06>~<7E><1E>%(<28><08>1E<31>(F<>$G<><06> <20>!<21>!$<24>H<EFBFBD>-=<3D>$><3E> ?<3F><06>}<7D><1D>"<22>(<28>+;<3B>"<<3C>=<3D><06>{<7B><1B>#&<26>h<EFBFBD>/C<>&D<>"E<><06><EFBFBD><1F><1B>Y<>h<EFBFBD>/C<>&D<>Y<>Y<> <0C>!-<2D><06>~<7E><1E><19>U<>H<EFBFBD>-A<>$B<>U<>U<>
<EFBFBD>)<29><06>|<7C><1C>&)<29><18>2F<32>)G<>%H<><06>!<21>"<22><15> r<00>v1<76>v2c<00>2<00>t|j<00><00>t|j<00><00>z}|syd}d}d}|D]>}|j|d<01>}|j|d<01>} ||| zz }|||zz }|| | zz }<06>@|dk(s|dk(ry||dz|dzzz S)u计算余弦相似度r,r<00><00>?)r<><00>keys<79>get)
r8r<>r<><00>all_keys<79> dot_product<63>norm1<6D>norm2<6D>key<65>val1<6C>val2s
rr<>z%DiversityEvaluator._cosine_similarity.s<><00><00><17>r<EFBFBD>w<EFBFBD>w<EFBFBD>y<EFBFBD>><3E>C<EFBFBD><02><07><07> <09>N<EFBFBD>2<><08><17><16><1A> <0B><13><05><13><05><1B> !<21>C<EFBFBD><15>6<EFBFBD>6<EFBFBD>#<23>s<EFBFBD>#<23>D<EFBFBD><15>6<EFBFBD>6<EFBFBD>#<23>s<EFBFBD>#<23>D<EFBFBD> <17>4<EFBFBD>$<24>;<3B> &<26>K<EFBFBD> <11>T<EFBFBD>D<EFBFBD>[<5B> <20>E<EFBFBD> <11>T<EFBFBD>D<EFBFBD>[<5B> <20>E<EFBFBD>  !<21> <11>A<EFBFBD>:<3A><15>!<21><1A><16><1A>e<EFBFBD>s<EFBFBD>l<EFBFBD>U<EFBFBD>c<EFBFBD>\<5C>9<>:<3A>:rc<00><><00>|jsddddd<03>Sttd<04>|jD<00><00><00>}t|j<00>||jrd|t|j<00>z z
d<06>Sdd<06>S)u获取多样性统计信息rr,)<04> total_tests<74> unique_hashes<65> avg_diversity<74>duplicate_ratioc3<00>&K<00>|] }|d<00><01><00> y<01>w)r<>Nr)r<>r<>s rr<>z>DiversityEvaluator.get_diversity_statistics.<locals>.<genexpr>Ws<00><00><><00>E<>1<EFBFBD><01>+<2B><0E>E<><45><00>rr)rrr)r<>r]r<>)r8rs r<00>get_diversity_statisticsz+DiversityEvaluator.get_diversity_statisticsGs<><00><00><14>|<7C>|<7C><1C><1E> <20>"<22> <0E> <0E><1C>C<EFBFBD>E<><04> <0C> <0C>E<>E<>F<> <0A><1F>t<EFBFBD>|<7C>|<7C>,<2C>*<2A>LP<4C>L<EFBFBD>L<EFBFBD>s<EFBFBD>m<EFBFBD>c<EFBFBD>$<24>,<2C>,<2C>6G<36>&G<>H<>
<EFBFBD>
<EFBFBD>_b<01>
<EFBFBD>
r)NNrz)NN)rrrrr<>rBrrKrr<>r+r<>rr?r<>r<>r<>r<>r<>r<>rrrrrr<>r<>Ps><00><00><08>;<3B>26<32>6:<3A>&(<28> $<24> <20>$<24>&)<29>#<23>h<EFBFBD>$<24>+/<2F>s<EFBFBD>)<29>$<24>!$<24> $<24>:04<30>48<34>7<15><1E>7<15>$'<27><03>H<EFBFBD>7<15>)-<2D>S<EFBFBD> <09>7<15>>L<01>7<15>r<1C>S<EFBFBD><1C><04><1C>QV<51><1C>0<1C><14><1C>%<25><1C>&<1D>#<23>c<EFBFBD>(<28><1D>u<EFBFBD><1D>.<1D>$<24>s<EFBFBD>)<29><1D>PU<50><1D>.<16>d<EFBFBD><16>t<EFBFBD>C<EFBFBD><15>J<EFBFBD>7G<37><16>@;<3B>T<EFBFBD>#<23>u<EFBFBD>*<2A>%5<>;<3B>4<EFBFBD><03>U<EFBFBD>
<EFBFBD>;K<>;<3B>PU<50>;<3B>2
<EFBFBD>$<24>s<EFBFBD>C<EFBFBD>x<EFBFBD>.<2E>
rr<>c <00><><00>eZdZdZddeeeeffd<04>Zdeeeefdeeeffd<06>Z dde
e deed ed
e de f
d <0B>Z de fd <0C>Zd edeefd<0E>Z ddededeefd<11>Zdefd<12>Zdeeeffd<13>Zy)<17>SemanticCoverageCalculatoru<72>
语义覆盖率计算器
计算基于功能点重要性的语义覆盖率:
语义覆盖率 = Σ(已覆盖功能点重要性) / Σ(所有功能点重要性)
N<>function_pointsc<00>V<00>i|_d|_d|_|r|j|<01>yy)uw
初始化语义覆盖率计算器
Args:
function_points: 功能点列表
r,N)r <00>total_importance<63>covered_importance<63>
initialize<EFBFBD>r8r s rr<>z#SemanticCoverageCalculator.__init__ls2<00><00>BD<01><04><1C> #<23><04><1D>"%<25><04><1F> <1A> <10>O<EFBFBD>O<EFBFBD>O<EFBFBD> ,<2C> rr5c <00>v<00>|jj<00>d|_d|_|D]k}|j dd<03>}|j dd<05>}|j dd<01>}t |||dgd<08> <09>|j|<|xj|z c_<00>mt |j<00>|jd
<EFBFBD>S) u<>
初始化功能点覆盖状态
Args:
function_points: 功能点列表
Returns:
初始化结果
r,rOrz<00>type<70>unknownrQFr)rOrPrQrRrSrT)rEr )r <00>clearr rr<>rNr])r8r <00>fprOrPrQs rrz%SemanticCoverageCalculator.initializezs<><00><00> <0A><1C><1C>"<22>"<22>$<24> #<23><04><1D>"%<25><04><1F>!<21> 0<>B<EFBFBD><15>6<EFBFBD>6<EFBFBD>&<26>"<22>%<25>D<EFBFBD><18>f<EFBFBD>f<EFBFBD>V<EFBFBD>Y<EFBFBD>/<2F>G<EFBFBD><1B><16><16> <0C>c<EFBFBD>2<>J<EFBFBD>)><3E><19><1F>%<25><1D><1D>%&<26> *<0E>D<EFBFBD> <20> <20><14> &<26> <11> !<21> !<21>Z<EFBFBD> /<2F> !<21> 0<>"&)<29><14>)=<3D>)=<3D>%><3E> $<24> 5<> 5<>
<EFBFBD>
rr<>r<>r<><00> iterationc<00><00>|rz|D]u}||jvs<01>|j|}|jr<01>.d|_|jj|<03>||_|xj
|j z c_<00>w|j<00>S)u>
更新功能点覆盖状态
Args:
covered_lines: 覆盖的代码行
covered_functions: 覆盖的功能点名称列表
test_id: 测试用例ID
iteration: 当前迭代次数
Returns:
语义覆盖率结果
T)r rRrSrarTrrQ<00>calculate_coverage)r8r<>r<>r<>r<00> func_namers r<00>update_coveragez*SemanticCoverageCalculator.update_coverage<67>s<><00><00>$ <1D>.<2E> A<01> <09><1C><04> 4<> 4<>4<><1D>-<2D>-<2D>i<EFBFBD>8<>B<EFBFBD><1D>:<3A>:<3A>%)<29><02>
<EFBFBD><1A> <0A> <0A>,<2C>,<2C>W<EFBFBD>5<>2;<3B><02>/<2F><1C>/<2F>/<2F>2<EFBFBD>=<3D>=<3D>@<40>/<2F> A<01><14>&<26>&<26>(<28>(rc<00> <00>t<00>}t|j<00>|_t d<01>|jj <00>D<00><00>|_|jdkDr|j|jz |_ td<03><00>}|jj <00>D]<5D>}||jdxxdz cc<||jdxx|jz cc<|js<01>N||jdxxdz cc<||jdxx|jz cc<<00><>|j<00>D]5\}}|ddkDr|d|dz |j|<<00>'d |j|<<00>7|jj <00>D<00>cgc]A}|js3|jd
k\r$|j |j|jd <0B><03><02>C}}|j#d <0C>d <0A><0E>|dd|_|Scc}w)ui
计算当前语义覆盖率
Returns:
语义覆盖率结果
c3<00>:K<00>|]}|js<01>d<00><01><00>y<01>w)r[N)rR)r<>rs rr<>z@SemanticCoverageCalculator.calculate_coverage.<locals>.<genexpr><3E>s<00><00><><00>,e<>2<EFBFBD>Z\<5C>Zd<5A>Zd<5A>Q<EFBFBD>,e<>s<00><01>rc<00><00>ddddd<03>S)Nrr,)<04>totalrRrQrrrrr<00><lambda>z?SemanticCoverageCalculator.calculate_coverage.<locals>.<lambda><3E>s<00><00>1<EFBFBD><11>RU<52>mp<6D>)q<>rrr[rQrRrr,r<>)rOrrQc<00> <00>|dS)NrQr<00><01>xs rrz?SemanticCoverageCalculator.calculate_coverage.<locals>.<lambda><3E>s
<00><00>q<EFBFBD><1C><EFBFBD>rT<>r<><00>reverseN<65>)rDr]r rEr<><00>valuesrFr rrGr rPrQrR<00>itemsrHrO<00>sortrI)r8<00>result<6C>
type_statsrrP<00>statsrIs rrz-SemanticCoverageCalculator.calculate_coverage<67>s<><00><00>(<28>)<29><06>'*<2A>4<EFBFBD>+?<3F>+?<3F>'@<40><06>$<24>),<2C>,e<><14>9M<39>9M<39>9T<39>9T<39>9V<39>,e<>)e<><06>&<26> <10> <20> <20>1<EFBFBD> $<24>'+<2B>'><3E>'><3E><14>AV<41>AV<41>'V<>F<EFBFBD> $<24>!<21>!q<>r<>
<EFBFBD><16>&<26>&<26>-<2D>-<2D>/<2F> N<01>B<EFBFBD> <16>r<EFBFBD>z<EFBFBD>z<EFBFBD> "<22>7<EFBFBD> +<2B>q<EFBFBD> 0<> +<2B> <16>r<EFBFBD>z<EFBFBD>z<EFBFBD> "<22><<3C> 0<>B<EFBFBD>M<EFBFBD>M<EFBFBD> A<> 0<><11>z<EFBFBD>z<EFBFBD><1A>2<EFBFBD>:<3A>:<3A>&<26>y<EFBFBD>1<>Q<EFBFBD>6<>1<><1A>2<EFBFBD>:<3A>:<3A>&<26>';<3B><<3C><02> <0A> <0A>M<><<3C>  N<01>)<29>.<2E>.<2E>0<> 7<>N<EFBFBD>G<EFBFBD>U<EFBFBD><14>\<5C>"<22>Q<EFBFBD>&<26>38<33>9M<39>3N<33>QV<51>Wc<57>Qd<51>3d<33><06>'<27>'<27><07>0<>36<33><06>'<27>'<27><07>0<>  7<><1B>*<2A>*<2A>1<>1<>3<> 
<EFBFBD> <13><15>:<3A>:<3A>"<22>-<2D>-<2D>3<EFBFBD>"6<> <1B><07><07><1A>
<EFBFBD>
<EFBFBD> <20>m<EFBFBD>m<EFBFBD> <0E>
<EFBFBD><1B>
<EFBFBD> <1C> <20> <20>%><3E><04> <20>M<>%8<><12>!<21>%<<3C><06>"<22><15> <0A><>
s<00>AHrOc<00>8<00>|jj|<01>S)u$获取指定功能点的覆盖状态)r r<>)r8rOs r<00>get_function_point_statusz4SemanticCoverageCalculator.get_function_point_status<75>s<00><00><13>#<23>#<23>'<27>'<27><04>-<2D>-r<00>min_importancerPc<00><><00>g}|jj<00>D]B}|jr<01>|j|kr<01> |r|j|k7r<01>2|j |<04><00>D|j d<01>d<02><03>|S)u<>
获取未覆盖的功能点
Args:
min_importance: 最小重要性阈值
fp_type: 功能点类型过滤(可选)
Returns:
未覆盖的功能点列表
c<00><00>|jSr<>)rQr!s rrzJSemanticCoverageCalculator.get_uncovered_function_points.<locals>.<lambda>s
<00><00>Q<EFBFBD>\<5C>\<5C>rTr#)r r&rRrQrPrar()r8r.rP<00> uncoveredrs r<00>get_uncovered_function_pointsz8SemanticCoverageCalculator.get_uncovered_function_points<74>sx<00><00><17> <09><16>&<26>&<26>-<2D>-<2D>/<2F> !<21>B<EFBFBD><11>z<EFBFBD>z<EFBFBD><18><11>}<7D>}<7D>~<7E>-<2D><18><16>2<EFBFBD>:<3A>:<3A><17>0<><18> <15> <1C> <1C>R<EFBFBD> <20> !<21> <12><0E><0E>1<>4<EFBFBD><0E>@<40><18>rc
<00>H<00>|j<00>}g}|jd<01>|jd<02>|jd<01>|jd<03>|jd|j<00><00><02>|jd|j<00><00><02>|jd|jd<07><04><02>|jd<03>|jd<08>|j
j <00>D]\}}|jd |<03>d
|d<07><04><04><00>|jd<03>|jrF|jd <0B>|jD]&}|jd |d <00>d |d<00>d|dd<11><04><06><00>(|jd<03>|jd<01>dj|<02>S)u生成覆盖率报告z<============================================================zSEMANTIC COVERAGE REPORTrzzTotal Function Points: zCovered Function Points: zSemantic Coverage: <20>.2%zCoverage by Type:z - z: z*Uncovered High-Importance Function Points:rOz (rz): importance=rQ<00>.2fr<EFBFBD>) rrarErFrGrHr'rIr<>)r8r)r<>rP<00>coveragers r<00>get_coverage_reportz.SemanticCoverageCalculator.get_coverage_report
s<><00><00><15>(<28>(<28>*<2A><06><12><05> <0A> <0C> <0C>X<EFBFBD><1E> <0A> <0C> <0C>/<2F>0<> <0A> <0C> <0C>X<EFBFBD><1E> <0A> <0C> <0C>R<EFBFBD><18> <0A> <0C> <0C>.<2E>v<EFBFBD>/K<>/K<>.L<>M<>N<> <0A> <0C> <0C>0<><16>1O<31>1O<31>0P<30>Q<>R<> <0A> <0C> <0C>*<2A>6<EFBFBD>+C<>+C<>C<EFBFBD>*H<>I<>J<> <0A> <0C> <0C>R<EFBFBD><18> <0A> <0C> <0C>(<28>)<29>!'<27>!8<>!8<>!><3E>!><3E>!@<40> ;<3B> <1D>G<EFBFBD>X<EFBFBD> <11>L<EFBFBD>L<EFBFBD>4<EFBFBD><07>y<EFBFBD><02>8<EFBFBD>C<EFBFBD>.<2E>9<> :<3A> ;<3B> <0A> <0C> <0C>R<EFBFBD><18> <11> %<25> %<25> <11>L<EFBFBD>L<EFBFBD>E<> F<><1C>0<>0<> d<01><02><15> <0C> <0C>t<EFBFBD>B<EFBFBD>v<EFBFBD>J<EFBFBD><<3C>r<EFBFBD>"<22>V<EFBFBD>*<2A><1C>^<5E>B<EFBFBD>|<7C>L\<5C>]`<60>Ka<4B>b<>c<> d<01> <0E> <0C> <0C>R<EFBFBD><18> <0A> <0C> <0C>X<EFBFBD><1E><13>y<EFBFBD>y<EFBFBD><15><1F>rc <00><><00>|j|j|jj<00>D<00><01>cic]5\}}||j|j
|j |jd<01><04><02>7c}}d<02>Scc}}w)r;)rrQrRrS)r rr )r rr r'rPrQrRrS)r8rOrs rr>z"SemanticCoverageCalculator.to_dict&sx<00><00>!%<25> 5<> 5<>"&<26>"9<>"9<>!%<25> 4<> 4<> :<3A> :<3A> <<3C> <0E><1D>D<EFBFBD>"<22> <15><1E>J<EFBFBD>J<EFBFBD>"$<24>-<2D>-<2D>!<21>z<EFBFBD>z<EFBFBD>"$<24>-<2D>-<2D> <12><12> <0E> 
<EFBFBD>
<EFBFBD><EFBFBD> s<00>:A4
r<EFBFBD><00>NNrzr)r,N)rrrrrrrBrr<>rrrKrDrrrrNr-r?r2r7r>rrrr
r
ds<00><00><08> -<2D><04>T<EFBFBD>#<23>s<EFBFBD>(<28>^<5E>(<<3C> -<2D>!
<EFBFBD>$<24>t<EFBFBD>C<EFBFBD><13>H<EFBFBD>~<7E>*><3E>!
<EFBFBD>4<EFBFBD><03>S<EFBFBD><08>><3E>!
<EFBFBD>H37<33>7;<3B>')<29>)*<2A> )<29>'*<2A>3<EFBFBD>x<EFBFBD>)<29>+/<2F><03>9<EFBFBD>)<29>"%<25>)<29>$'<27> )<29>0F<01> )<29><-<16>$:<3A>-<16>^.<2E>c<EFBFBD>.<2E>h<EFBFBD>?T<>6U<36>.<2E>
?B<01>59<35><19>6;<3B><19>/2<><19>>B<>CX<43>>Y<><19>8 <20>S<EFBFBD> <20>8
<EFBFBD><14>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E>
rr
c<00><00>eZdZdZddeeeeffd<04>Zdeeeefdeeeffd<06>Z ddede
e d eed
ed e deeeff d <0C>Z d e dedefd<0F>Zej$fdeeefdedeeeffd<12>Zdeeeffd<13>Zdefd<14>Zy)<17>QualityEvaluatoru<72>
质量评估器 - 第3层主入口
整合多样性评估和语义覆盖率计算,提供统一的质量评估接口
Nr c<00>P<00>t<00>|_t|<01>|_g|_y)un
初始化质量评估器
Args:
function_points: 功能点列表
N)r<><00>diversity_evaluatorr
rG<00>evaluation_historyrs rr<>zQualityEvaluator.__init__Bs$<00><00>$6<>#7<><04> <20>!;<3B>O<EFBFBD>!L<><04><1E>8:<3A><04>rr5c<00>p<00>|jj|<01>}|jj<00>|S)u<>
初始化质量评估器
Args:
function_points: 功能点列表
Returns:
初始化结果
)rGrr>r)r8r r)s rrzQualityEvaluator.initializeMs1<00><00><16>'<27>'<27>2<>2<>?<3F>C<><06> <0C><1F><1F>%<25>%<25>'<27><15> rrxr<>r<>r<>rc<00>`<00>|jj|||<03><01>}|jj||||<05><02>}|j ||<07>}|||j <00>|j <00>|d<03>} |j j| <09>|jj||||<04><04>| S)uQ
评估测试用例质量
Args:
code: 测试代码
covered_lines: 覆盖的代码行
covered_functions: 覆盖的功能点列表
test_id: 测试用例ID
iteration: 当前迭代次数
Returns:
评估结果字典
)r<>r<>r<>)r<>r<>r<>r)r<>r<00> diversityr6<00> quality_score)rxr<>r<>r<>) r=r<>rGr<00>_calculate_quality_scorer>r>rar<>)
r8rxr<>r<>r<>r<00>diversity_score<72>coverage_resultrB<00>evaluation_results
r<00>evaluate_test_casez#QualityEvaluator.evaluate_test_case[s<><00><00>(<1F>2<>2<>;<3B>;<3B><19>+<2B>"3<><<3C>
<EFBFBD><0F><1F>0<>0<>@<40>@<40>'<27>/<2F><1B><1F> A<01>
<EFBFBD><0F><1D>5<>5<>o<EFBFBD><EFBFBD>W<> <0A><1F>"<22>(<28>0<>0<>2<>'<27>/<2F>/<2F>1<>*<2A> 
<EFBFBD><19> <0A><1F><1F>&<26>&<26>'8<>9<> <0A> <20> <20>/<2F>/<2F><15>'<27>/<2F><1B> 0<>
<EFBFBD>!<21> rrAr6c<00>t<00>d}d}||jz||jzz}tdtd|<05><00>S)u<>
计算综合质量得分
Args:
diversity: 多样性评分
coverage: 语义覆盖率结果
Returns:
质量得分 (0-1)
g<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?g333333<33>?rrr,)r1rGrbrm)r8rAr6<00>diversity_weight<68>coverage_weightr<74>s rrCz)QualityEvaluator._calculate_quality_score<72>sN<00><00><1F><18><1E><0F> <1D>y<EFBFBD>6<>6<> 6<> <1B>h<EFBFBD>8<>8<> 8<> 9<> <0E>
<13>3<EFBFBD><03>C<EFBFBD><15><0F>(<28>(rrF<00> min_diversityc<00>l<00>|jdi<00>}|jdd<03>}||kr dd|d<06>d|<02><00>fSy) u<>
判断是否应该接受该测试用例
Args:
evaluation_result: 评估结果
min_diversity: 最低多样性阈值
Returns:
(是否接受, 原因)
rAr1r,FzDiversity too low: r5z < )TzPassed quality check)r<>)r8rFrKrA<00>overall_diversitys r<00> should_acceptzQualityEvaluator.should_accept<70>sO<00><00>&<26>)<29>)<29>+<2B>r<EFBFBD>:<3A> <09>%<25>M<EFBFBD>M<EFBFBD>/<2F>3<EFBFBD>?<3F><19> <1C>}<7D> ,<2C><18>/<2F>0A<30>#<23>/F<>c<EFBFBD>-<2D><1F>Y<>Y<> Y<>+rc<00><><00>|jj<00>}|jj<00>}||j <00>t |j <00>d<01>S)u获取统计信息)rAr6<00>total_evaluations)r=rrGrr>r]r>)r8<00>diversity_statsrEs r<00>get_statisticszQualityEvaluator.get_statistics<63>sS<00><00><1E>2<>2<>K<>K<>M<><0F><1E>0<>0<>C<>C<>E<><0F>)<29>'<27>/<2F>/<2F>1<>!$<24>T<EFBFBD>%<<3C>%<<3C>!=<3D>
<EFBFBD>
rc<00><><00>g}|jd<01>|jd<02>|jd<01>|jd<03>|j<00>}|jd<04>|jd|dd<00><00><02>|jd|dd <00><00><02>|jd
|dd d <0C><04><02>|jd<03>|jd <0A>|j|jj<00><00>|jd<03>|jr<>|jd<0E>t d<0F>|jD<00><00>t |j<00>z }t d<10>|jD<00><00>t |j<00>z }|jd|d<12><04><02>|jd|d<12><04><02>|jd<03>|jd<01>dj|<01>S)u生成完整报告zF======================================================================z#QUALITY EVALUATION REPORT - LAYER 3rzz[DIVERSITY STATISTICS]z Total Tests: rArzUnique Tests: rzDuplicate Ratio: rr4z[SEMANTIC COVERAGE]z[QUALITY TREND]c3<00>&K<00>|] }|d<00><01><00> y<01>w)rBNr<00>r<>r<>s rr<>z3QualityEvaluator.generate_report.<locals>.<genexpr><3E>s<00><00><><00>R<>Q<EFBFBD>a<EFBFBD><0F>0<>R<>rc3<00>,K<00>|] }|dd<00><01><00>y<02>w)rAr1NrrUs rr<>z3QualityEvaluator.generate_report.<locals>.<genexpr><3E>s<00><00><><00>a<>A<EFBFBD><01>+<2B><0E><EFBFBD> ?<3F>a<>s<00>zAverage Quality Score: r5zAverage Diversity Score: r<>)rarRrGr7r>r<>r]r<>)r8r<>r+<00> avg_qualityrs r<00>generate_reportz QualityEvaluator.generate_report<72>s<><00><00><12><05> <0A> <0C> <0C>X<EFBFBD><1E> <0A> <0C> <0C>:<3A>;<3B> <0A> <0C> <0C>X<EFBFBD><1E> <0A> <0C> <0C>R<EFBFBD><18><15>#<23>#<23>%<25><05> <0A> <0C> <0C>-<2D>.<2E> <0A> <0C> <0C>}<7D>U<EFBFBD>;<3B>%7<> <0A>%F<>$G<>H<>I<> <0A> <0C> <0C>~<7E>e<EFBFBD>K<EFBFBD>&8<><1F>&I<>%J<>K<>L<> <0A> <0C> <0C>(<28><15>{<7B>);<3B><M<>)N<>s<EFBFBD>(S<>T<>U<> <0A> <0C> <0C>R<EFBFBD><18> <0E> <0C> <0C>*<2A>+<2B> <0A> <0C> <0C>T<EFBFBD>+<2B>+<2B>?<3F>?<3F>A<>B<> <0A> <0C> <0C>R<EFBFBD><18> <10> "<22> "<22> <11>L<EFBFBD>L<EFBFBD>*<2A> +<2B><1D>R<>$<24>:Q<>:Q<>R<>R<>UX<55>Y]<5D>Yp<59>Yp<59>Uq<55>q<>K<EFBFBD><1F>a<><14>I`<60>I`<60>a<>a<>dg<64>hl<68>h<68>h<68>eA<02>A<02>M<EFBFBD> <11>L<EFBFBD>L<EFBFBD>2<>;<3B>s<EFBFBD>2C<32>D<> E<> <11>L<EFBFBD>L<EFBFBD>4<>]<5D>3<EFBFBD>4G<34>H<> I<> <11>L<EFBFBD>L<EFBFBD><12> <1C> <0A> <0C> <0C>X<EFBFBD><1E><13>y<EFBFBD>y<EFBFBD><15><1F>rr<>r9)rrrrrrrBrr<>rrrKrGr+rDr?rCrrrrUrNrRrXrrrr;r;;s<00><00><08> ;<3B><04>T<EFBFBD>#<23>s<EFBFBD>(<28>^<5E>(<<3C> ;<3B> <16>$<24>t<EFBFBD>C<EFBFBD><13>H<EFBFBD>~<7E>*><3E> <16>4<EFBFBD><03>S<EFBFBD><08>><3E> <16> 59<35>9=<3D>)+<2B>+,<2C> 7!<21> #<23>7!<21>),<2C>S<EFBFBD><18>7!<21>.2<EFBFBD>#<23>Y<EFBFBD>7!<21>$'<27> 7!<21>
&)<29> 7!<21>
26<32>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E> 7!<21>r)<29>,:<3A>)<29>+A<>)<29>FK<46>)<29>:.;<3B>-R<>-R<>,<2C>)-<2D>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E>,<2C>%*<2A>,<2C>W\<5C>]a<>cf<63>]f<>Wg<57>,<2C>* 
<EFBFBD><04>S<EFBFBD>#<23>X<EFBFBD><0E> 
<EFBFBD>  <20><13>  rr;r r5c<00><00>t|<00><01>S)u<>
创建质量评估器
Args:
function_points: 功能点列表
Returns:
初始化完成的质量评估器
<20>r )r;rZs r<00>create_quality_evaluatorr[<00>s<00><00> <1C>O<EFBFBD> <<3C><r<00>code1<65>code2c<00>:<00>t<00>}|j||<01>S)u<>
快速评估两个代码的多样性
Args:
code1: 代码1
code2: 代码2
Returns:
多样性得分 (0-1, 1表示完全不同)
rs)r\r]<00>calcs r<00>evaluate_diversityr`s<00><00> "<22> #<23>D<EFBFBD> <0F> #<23> #<23>E<EFBFBD>5<EFBFBD> 1<>1rr<>)$rr<><00>loggingr<67><00>json<6F>typingrrrrrr<00> dataclassesr r
<00>enumr <00> collectionsr <00> getLoggerr<00>loggerrr!r+rDrNrWrwr<>r
r;rBr[r?r`rrr<00><module>ris<00><01><04>
<EFBFBD><0E><0E> <0B>8<>8<>(<28><15>#<23> <1A><17> <1A> <1A>8<EFBFBD> $<24><06><1F><1F>6#<23><14>#<23> <0B>&
<EFBFBD>&
<EFBFBD> <0B>&
<EFBFBD>R <0B>
<EFBFBD>
<EFBFBD> <0B>
<EFBFBD>8 <0B>"<22>"<22> <0B>"<22>0BH<01>BH<01>Rc<19>c<19>TM
<EFBFBD>M
<EFBFBD>hP
<EFBFBD>P
<EFBFBD>nt <20>t <20>v
=<3D>d<EFBFBD>4<EFBFBD><03>S<EFBFBD><08>><3E>.B<>
=<3D>N^<5E>
=<3D> 2<>c<EFBFBD> 2<>#<23> 2<>%<25> 2r