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

184 lines
23 KiB
Plaintext
Raw Normal View History

2026-03-30 16:46:48 +08:00
<EFBFBD>
<00><0E>i<EFBFBD>T<00><00>j<00>dZddlZddlZddlmZmZmZmZmZm Z ddl
m Z m Z ddl mZ ddlmZmZmZmZej*e<16>ZGd<08>d <09>ZGd
<EFBFBD>d e<0E>Ze Gd <0C>d <0A><00>ZGd<0E>d<0F>ZGd<10>d<11>ZGd<12>d<13>ZGd<14>d<15>Zddedefd<18>Z y#e$rddlmZmZmZmZY<00>{wxYw)aD
Description : Diversity Constraint Injector (Layer 1)
- Analyze existing test sequences
- Detect overused patterns
- Generate diversity constraints for Prompt
- Recommend new test scenarios
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<75>)<04>TestHistoryManager<65>
TestRecord<EFBFBD> InputSequence<63>SequencePatternc<00>,<00>eZdZdZdZdZdZdZdZdZ dZ
y)<07>DiversityConfigu多样性约束配置<E9858D><00>
g<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?g333333<33>?N) <0B>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__<5F>MIN_EDIT_DISTANCE<43>OVERUSE_THRESHOLD<4C>NEW_SCENARIO_COUNT<4E>MAX_SEQUENCE_LENGTH<54>PATTERN_WEIGHT<48>EDIT_DISTANCE_WEIGHT<48>COVERAGE_WEIGHT<48><00><00>A/home/zhang/CorrectBench/TBgen_App/autoline/diversity_injector.pyrr)s7<00><00><1F><1A><15><1A><15><1B><16><1D><17><19>N<EFBFBD><1E><18><19>Or!rc<00>$<00>eZdZdZdZdZdZdZdZy)<08>ConstraintTypeu约束类型枚举<E69E9A>forbid_sequence<63>min_edit_distance<63> avoid_pattern<72> try_scenario<69> explore_rangeN) rrrr<00>FORBID_SEQUENCEr<00> AVOID_PATTERN<52> TRY_SCENARIO<49> EXPLORE_RANGEr r!r"r$r$Bs<00><00><1C>'<27>O<EFBFBD>+<2B><15>#<23>M<EFBFBD>!<21>L<EFBFBD>#<23>Mr!r$c<00>f<00>eZdZUdZeed<eed<ee<08><04>Z e
ee fed<dZ e ed<defd <09>Zy
) <0B>DiversityConstraintu<74>
多样性约束
Attributes:
constraint_type: 约束类型
description: 约束描述
details: 详细信息
priority: 优先级 (1-5, 5最高)
<20>constraint_type<70> description)<01>default_factory<72>detailsr<00>priority<74>returnc <00>l<00>|jtjk(rd|jj dd<03><00><00>S|jtj
k(r d|jj dd<06><00>d<07>S|jtj k(r^|jj dd <09>}|jj dd <09>}d
|<02>d |<01>d |jj d d<0E><00>d<0F>S|jtjk(rd|jj dd<03><00><00>S|jtjk(rYd|jj dd<0E><00>d|jj dd<16><00>d|jj dd<08><00><00>Sd|j<00><00>S)u转换为Prompt文本z%- AVOID using this sequence pattern: <20>pattern<72>unknownzG- Your test sequence MUST differ from previous tests (edit distance >= <20> min_distancer<00>)<29>signal<61>z- AVOID the pattern 'z' for signal 'z' (already used <20>countrz times)z- TRY this new approach: <20>scenarioz- EXPLORE values in range [<5B>minz, <20>max<61><78>z] for z- )
r0r$r*r3<00>getrr+r,r-r1)<03>selfr;r7s r"<00>to_prompt_textz"DiversityConstraint.to_prompt_text_s<><00><00> <0F> <1F> <1F>><3E>#A<>#A<> A<>:<3A>4<EFBFBD><<3C><<3C>;K<>;K<>I<EFBFBD>W`<60>;a<>:b<>c<> c<> <11> !<21> !<21>^<5E>%E<>%E<> E<>\<5C>]a<>]i<>]i<>]m<>]m<>n|<7C>~<>^A<02>]B<02>BC<02>D<02> D<02> <11> !<21> !<21>^<5E>%A<>%A<> A<><19>\<5C>\<5C>%<25>%<25>h<EFBFBD><02>3<>F<EFBFBD><1A>l<EFBFBD>l<EFBFBD>&<26>&<26>y<EFBFBD>"<22>5<>G<EFBFBD>*<2A>7<EFBFBD>)<29>><3E>&<26><18>IY<49>Z^<5E>Zf<5A>Zf<5A>Zj<5A>Zj<5A>kr<6B>tu<74>Zv<5A>Yw<59>w~<7E><> <> <11> !<21> !<21>^<5E>%@<40>%@<40> @<40>.<2E>t<EFBFBD>|<7C>|<7C>/?<3F>/?<3F>
<EFBFBD>I<EFBFBD>/V<>.W<>X<> X<> <11> !<21> !<21>^<5E>%A<>%A<> A<>0<><14><1C><1C>1A<31>1A<31>%<25><11>1K<31>0L<30>B<EFBFBD>t<EFBFBD>|<7C>|<7C>O_<4F>O_<4F>`e<>gj<67>Ok<4F>Nl<4E>lr<6C>sw<73>s<73>s<73>tD<02>tD<02>EM<02>OW<02>tX<02>sY<02>Z<02> Z<02><13>D<EFBFBD>$<24>$<24>%<25>&<26>&r!N)rrrrr$<00>__annotations__<5F>strr
<00>dictr3rrr4<00>intrDr r!r"r/r/OsB<00><00><08>$<24>#<23><14><14>#<23>D<EFBFBD>9<>G<EFBFBD>T<EFBFBD>#<23>s<EFBFBD>(<28>^<5E>9<><15>H<EFBFBD>c<EFBFBD><15>'<27><03>'r!r/c<00><><00>eZdZdZedeeeefdeeeffd<04><04>Z edeeeefde
fd<05><04>Z ede
defd<07><04>Z y) <09>SequenceAnalyzeruG
序列分析器
分析输入序列的特征和模式
<20>valuesr5c<00><><00>|syg}|D]<5D>\}}t|ttf<02>r|j|<03><00>.t|t<00>s<01>?|dvr,|j|j <00>r t|<03>nd<03>t jd|<03>}|s<01><> |jt|jd<05>d<06><00><00><>|rt|<01>t|<01>fSy#Y<00><>xYw)u提取值范围)rr)<04>0<>1<>x<>zrz!(\d+)'[bdh]([0-9a-fA-fA-FxXzZ_]+)<29><00>) <0B>
isinstancerH<00>float<61>appendrF<00>isdigit<69>re<72>match<63>groupr?r@)rK<00>numeric_values<65>_<>vrXs r"<00>extract_value_rangez$SequenceAnalyzer.extract_value_range~s<><00><00><16><19><1B><0E><1A> <1D>D<EFBFBD>A<EFBFBD>q<EFBFBD><19>!<21>c<EFBFBD>5<EFBFBD>\<5C>*<2A><1E>%<25>%<25>a<EFBFBD>(<28><1B>A<EFBFBD>s<EFBFBD>#<23><14>,<2C>,<2C>"<22>)<29>)<29>A<EFBFBD>I<EFBFBD>I<EFBFBD>K<EFBFBD>#<23>a<EFBFBD>&<26>Q<EFBFBD>G<><1A><08><08>!E<>q<EFBFBD>I<><05><18><1D>&<26>-<2D>-<2D>c<EFBFBD>%<25>+<2B>+<2B>a<EFBFBD>.<2E>"<22>.E<>F<> <1D> <1A><17><0E>'<27><13>^<5E>)<<3C>=<3D> =<3D><15><> <1D><1C>s <00>*C<02>Cc<00><><00><03>t|<00>dkry|D<00><01>cgc]\}}|<02><02> c}}<01>t<00>fd<03>tt<00><03>dz
<00>D<00><00>ryt<00>fd<06>tt<00><03>dz
<00>D<00><00>ryt<00><03>dk\r<17>d <00>dk(r <0C>d<00>d
k(ry t<00><03>d
k(r<17>d <00>dcxk(r<08>dk7ry y y cc}}w)u检测转换模式rQ<00>singlec3<00>^<00>K<00>|]$}t<00>|<00>t<00>|dz<00>k<00><01><00>&y<01>w<01>r N<>rF<00><03>.0<EFBFBD>i<>val_seqs <20>r"<00> <genexpr>z=SequenceAnalyzer.detect_transition_pattern.<locals>.<genexpr><3E><00>+<00><><00><><00>S<><01>s<EFBFBD>7<EFBFBD>1<EFBFBD>:<3A><EFBFBD>#<23>g<EFBFBD>a<EFBFBD><01>c<EFBFBD>l<EFBFBD>"3<>3<>S<><53><00>*-r <00> incrementalc3<00>^<00>K<00>|]$}t<00>|<00>t<00>|dz<00>k\<00><01><00>&y<01>wrarbrcs <20>r"rgz=SequenceAnalyzer.detect_transition_pattern.<locals>.<genexpr><3E>rhri<00> decremental<61>rr<00> alternating<6E>pulse<73>random)<03>len<65>all<6C>range)rKr[r\rfs @r"<00>detect_transition_patternz*SequenceAnalyzer.detect_transition_pattern<72>s<><00><><00> <0F>v<EFBFBD>;<3B><11>?<3F><1B>"(<28>(<28><14><11>A<EFBFBD>1<EFBFBD>(<28><07> <0F>S<>U<EFBFBD>3<EFBFBD>w<EFBFBD><<3C>PQ<50>><3E>=R<>S<> S<> <20> <0F>S<>U<EFBFBD>3<EFBFBD>w<EFBFBD><<3C>PQ<50>><3E>=R<>S<> S<> <20> <0F>w<EFBFBD><<3C>1<EFBFBD> <1C><16>q<EFBFBD>z<EFBFBD>W<EFBFBD>Q<EFBFBD>Z<EFBFBD>'<27>G<EFBFBD>A<EFBFBD>J<EFBFBD>'<27>!<21>*<2A>,D<>$<24> <0F>w<EFBFBD><<3C>1<EFBFBD> <1C><17><11><1A>w<EFBFBD>q<EFBFBD>z<EFBFBD>!G<>W<EFBFBD>Q<EFBFBD>Z<EFBFBD>!G<><1A>"H<01><18><>')s<00> C<06>codec<00><><00>ttjd|<00><00>}tjd|<00>}td<03>|D<00><00>}||zS)u$计算代码中的操作序列长度z\w+\s*=\s*\S+\s*;zrepeat\s*\(\s*(\d+)\s*\)c3<00>2K<00>|]}t|<01><00><01><00>y<00>w<01>N)rH)rd<00>rs r"rgz=SequenceAnalyzer.calculate_sequence_length.<locals>.<genexpr><3E>s<00><00><><00>4<>q<EFBFBD>C<EFBFBD><01>F<EFBFBD>4<>s<00>)rqrW<00>findall<6C>sum)ru<00> assignments<74>repeats<74> repeat_cycless r"<00>calculate_sequence_lengthz*SequenceAnalyzer.calculate_sequence_length<74>sF<00><00><1A>"<22>*<2A>*<2A>%9<>4<EFBFBD>@<40>A<> <0B><14>*<2A>*<2A>8<>$<24>?<3F><07><1B>4<>G<EFBFBD>4<>4<> <0A><1A>]<5D>*<2A>*r!N) rrrr<00> staticmethodrrrHrr]rFrtrr r!r"rJrJws<><00><00><08> <12><16>D<EFBFBD><15>s<EFBFBD>C<EFBFBD>x<EFBFBD><1F>$9<><16>e<EFBFBD>C<EFBFBD><13>H<EFBFBD>o<EFBFBD><16><12><16>4<12><18>$<24>u<EFBFBD>S<EFBFBD>#<23>X<EFBFBD><EFBFBD>*?<3F><18>C<EFBFBD><18><12><18>6<12>+<2B><03>+<2B><03>+<2B><12>+r!rJc<00>~<00>eZdZdZgd<02>gd<03>gd<04>gd<05>gd<06>d<07>Zdefd <09>Z dd eed e e
d ee
fd<0E>Z de
ded e
fd<11>Z y
)<13>ScenarioRecommenderu_
场景推荐器
根据历史记录和未覆盖功能点推荐新测试场景
)z1Test state transition from {state_a} to {state_b}z&Test illegal state transition handlingz!Test state machine reset behaviorz&Test state holding under stable inputs)z3Test counter overflow behavior (count to max value)z&Test counter underflow (if applicable)z"Test counter reset during countingz#Test counter enable/disable control)z1Test boundary condition: {condition} at thresholdz#Test all branches of nested if-elsez,Test case statement with all possible values)zTest handshake timeout scenariozTest back-to-back transactionsz Test protocol violation handling)z1Apply random input patterns for extended durationz*Test with boundary values (all 0s, all 1s)zTest rapid signal transitionsz'Test power-on/reset sequence variations)<05>fsm<73>counter<65>branch<63>protocol<6F>general<61>history_managerc<00><00>||_yrx)<01>history<72>rCr<>s r"<00>__init__zScenarioRecommender.__init__<5F>s <00><00>&<26><04> r!N<>uncovered_functions<6E>covered_patternsr5c<00>><00>g}|xs
t<00>}|ddD]<5D>}|jdd<04>}|jdd<06>}|jj||jd<00>}|ddD]*}|j||<04>} | |vs<01>|j | <09><00>,<00><>|j
j r<>t<00>}
|j
j D]C} | jD]2} tj| j<00>} |
j| <0A><00>4<00>Ehd<08>}||
z
}|r!|j d t|<0F>d
<00>d <0B><03>t|<03>tjkr.|j d <0C>t|<03>tjkr<01>.|dtjS) u<>
推荐新的测试场景
Args:
uncovered_functions: 未覆盖的功能点列表
covered_patterns: 已覆盖的模式集合
Returns:
推荐场景列表
Nr<00>typer<65><00>namer<r >rorprnrlrjzTry rz3 input pattern (different from your usual approach)z9Explore a completely different input sequence than before)<10>setrB<00>SCENARIO_TEMPLATES<45>_fill_templaterUr<><00>records<64>input_sequencesrJrtrK<00>add<64>listrqrr)rCr<>r<><00>recommendations<6E>func<6E> func_type<70> func_name<6D> templates<65>templater><00> used_patterns<6E>record<72>seqr7<00> all_patterns<6E>unused_patternss r"<00>recommend_scenariosz'ScenarioRecommender.recommend_scenarios<6F>s<><00><00><1D><0F>+<2B>4<>s<EFBFBD>u<EFBFBD><18>(<28><02><11>+<2B> 5<>D<EFBFBD><1C><08><08><16><19>3<>I<EFBFBD><1C><08><08><16><12>,<2C>I<EFBFBD><1C>/<2F>/<2F>3<>3<>I<EFBFBD>t<EFBFBD>?V<>?V<>W`<60>?a<>b<>I<EFBFBD>%<25>b<EFBFBD>q<EFBFBD>M<EFBFBD> 5<><08><1F>.<2E>.<2E>x<EFBFBD><14>><3E><08><1B>#3<>3<>#<23>*<2A>*<2A>8<EFBFBD>4<> 5<> 5<> <10><<3C><<3C> <1F> <1F><1F>E<EFBFBD>M<EFBFBD><1E>,<2C>,<2C>.<2E>.<2E> /<2F><06>!<21>1<>1<>/<2F>C<EFBFBD>.<2E>H<>H<><13><1A><1A>T<>G<EFBFBD>!<21>%<25>%<25>g<EFBFBD>.<2E>/<2F> /<2F> \<01>L<EFBFBD>*<2A>]<5D>:<3A>O<EFBFBD><1F><1F>&<26>&<26><14>d<EFBFBD>?<3F>.C<>A<EFBFBD>.F<>-G<>Gz<47>'{<7B>|<7C><12>/<2F>"<22>_<EFBFBD>%G<>%G<>G<> <1B> "<22> "<22>#^<5E> _<><12>/<2F>"<22>_<EFBFBD>%G<>%G<>G<><1F>B<><0F> B<> B<>C<>Cr!r<>r<>c<00><00>|}d|vsd|vrL|jdddg<02>}t|<04>dk\r*|jd|d<00>}|jd|d<00>}d |vr$|jd
d <0B>}|jd |<05>}|S) u填充场景模板z {state_a}z {state_b}<7D>states<65>STATE_A<5F>STATE_BrQrr z {condition}<7D> conditionr;)rBrq<00>replace)rCr<>r<><00>resultr<74>r<>s r"r<>z"ScenarioRecommender._fill_template"s<><00><00><19><06> <17>(<28> "<22>k<EFBFBD>X<EFBFBD>&=<3D><19>X<EFBFBD>X<EFBFBD>h<EFBFBD><19>I<EFBFBD>(><3E>?<3F>F<EFBFBD><12>6<EFBFBD>{<7B>a<EFBFBD><1F><1F><1E><1E> <0B>V<EFBFBD>A<EFBFBD>Y<EFBFBD>?<3F><06><1F><1E><1E> <0B>V<EFBFBD>A<EFBFBD>Y<EFBFBD>?<3F><06> <18>H<EFBFBD> $<24><1C><08><08><1B>h<EFBFBD>7<>I<EFBFBD><1B>^<5E>^<5E>M<EFBFBD>9<EFBFBD>=<3D>F<EFBFBD><15> r!rx) rrrrr<>r r<>rrrrFr<>r<>r r!r"r<>r<><00>s<><00><00><08>
<EFBFBD> 
<EFBFBD> 
<EFBFBD>

<EFBFBD>

<EFBFBD>/<06><16>>'<27>(:<3A>'<27>
9=<3D>1D<01>04<30>T<EFBFBD>
<EFBFBD>1D<01>-0<><13>X<EFBFBD>1D<01>AE<41>c<EFBFBD><19>1D<01>f<16>s<EFBFBD><16>$<24><16>3<EFBFBD>r!r<>c<00>N<00>eZdZdZdefd<03>Z d
dedeedee fd<08>Z
defd <09>Z y) <0B>ConstraintGeneratoruJ
约束生成器
根据历史分析生成多样性约束
r<>c<00>0<00>||_t<00>|_yrx)r<>rJ<00>analyzerr<72>s r"r<>zConstraintGenerator.__init__?s<00><00>&<26><04> <0C>(<28>*<2A><04> r!N<>target_functionr<6E>r5c <00>:<00>g}|jjs|S|jjtj<00>}|ddD]]}|j t tjd|j<00><00>|j|j|jd<04>d<05><06><00><00>_tdt|jj<00><00>}|dkDr=|j t tjdtj|d <09>d
<EFBFBD><06><00>|rq|dd D]i}|jd <0C>d k(s<01>|jdd<0F>}|j t tj d|jdd <0A>d|d<12>d<02><06><00><00>k|j#d<13>d<14><15>|S)u<>
生成多样性约束
Args:
target_function: 当前目标功能点
uncovered_functions: 未覆盖功能点列表
Returns:
约束列表
NrzAvoid overused pattern for )r;r7r=<00>)r0r1r3r4rz0Maintain minimum edit distance from recent tests)r9<00>reference_countrmrQr<>r<><00> max_valuerAzExplore counter boundary valuesr<73>)r;r?r@c<00><00>|jSrx)r4)<01>cs r"<00><lambda>z:ConstraintGenerator.generate_constraints.<locals>.<lambda><3E>s
<00><00>q<EFBFBD>z<EFBFBD>z<EFBFBD>r!T)<02>key<65>reverse)r<>r<><00>get_overused_patternsrrrUr/r$r+<00> signal_namer7r=r?rqrrBr-<00>sort) rCr<>r<><00> constraints<74>overusedr7<00> recent_countr<74><00>max_vals r"<00>generate_constraintsz(ConstraintGenerator.generate_constraintsCs<><00><00><19> <0B><13>|<7C>|<7C>#<23>#<23><1E> <1E><18><<3C><<3C>5<>5<>o<EFBFBD>6W<36>6W<36>X<><08><1F><02><11>|<7C>
<0F>G<EFBFBD> <17> <1E> <1E>2<> .<2E> <<3C> <<3C>9<>'<27>:M<>:M<>9N<39>O<>%<25>1<>1<>&<26><EFBFBD><EFBFBD>$<24>]<5D>]<5D><12>
<1B> <0E> <0F>
<0F><1B>1<EFBFBD>c<EFBFBD>$<24>,<2C>,<2C>"6<>"6<>7<>8<> <0C> <17>"<22> <1C> <17> <1E> <1E>2<> .<2E> @<40> @<40>N<>$3<>$E<>$E<>'3<><12><1B> <0E> <0F> <1F>+<2B>B<EFBFBD>Q<EFBFBD>/<2F> <17><04><17>8<EFBFBD>8<EFBFBD>F<EFBFBD>#<23>y<EFBFBD>0<>"<22>h<EFBFBD>h<EFBFBD>{<7B>C<EFBFBD>8<>G<EFBFBD><1F>&<26>&<26>':<3A>(6<>(D<>(D<>&E<>&*<2A>h<EFBFBD>h<EFBFBD>v<EFBFBD>y<EFBFBD>&A<>#$<24>#*<2A>!<1A>
"#<23> (<16> <17> <17> <14><18><18>1<>4<EFBFBD><18>@<40><1A>r!c
<00>p<00>|jjtj<00>}|sydg}t |ddd<05>D]T\}}|j |<03>d|j <00>d|jdd<00><00><05>|j d |j<00>d
<EFBFBD><03><00>V|j d <0B>d j|<02>S) u生成禁止序列提示r<z7[DIVERSITY CONSTRAINTS - AVOID THESE OVERUSED PATTERNS]Nr<4E>r z
. Signal 'z': <20>2z (This pattern has been used z times already)zD
Please create a DIFFERENT input sequence to improve test diversity.<2E>
)
r<EFBFBD>r<>rr<00> enumeraterUr<>r7r=<00>join)rCr<><00>linesrer7s r"<00>"generate_forbidden_sequence_promptz6ConstraintGenerator.generate_forbidden_sequence_prompt<70>s<><00><00><17><<3C><<3C>5<>5<>o<EFBFBD>6W<36>6W<36>X<><08><17><15>J<>K<><05>#<23>H<EFBFBD>R<EFBFBD>a<EFBFBD>L<EFBFBD>!<21>4<> [<01>J<EFBFBD>A<EFBFBD>w<EFBFBD> <11>L<EFBFBD>L<EFBFBD>A<EFBFBD>3<EFBFBD>j<EFBFBD><17>)<<3C>)<<3C>(=<3D>S<EFBFBD><17><1F><1F>QT<51>RT<52>AU<41>@V<>W<> X<> <11>L<EFBFBD>L<EFBFBD>:<3A>7<EFBFBD>=<3D>=<3D>/<2F><1F>Y<> Z<> [<01> <0E> <0C> <0C>\<5C>]<5D><13>y<EFBFBD>y<EFBFBD><15><1F>r!<00>NN) rrrrr r<>rFrrr/r<>r<>r r!r"r<>r<>8sT<00><00><08> +<2B>(:<3A>+<2B>
48<34>>B<>A<1B>-0<>A<1B>15<31>d<EFBFBD><1A>A<1B>GK<47>L_<4C>G`<60>A<1B>F <20>C<EFBFBD> r!r<>c<00><><00>eZdZdZddefd<04>Z ddededeedefd <09>Z d
ee
d eedefd <0C>Z defd <0A>Z ddedeedeee ffd<10>Z ddedede dededeedefd<15>Zdeeeffd<16>Zdefd<17>Zy)<1B>DiversityInjectoru<72>
多样性约束注入器 - 第1层主入口
整合序列分析、模式检测、约束生成,提供统一的多样性约束接口
Nr<4E>c<00><><00>|xs
t<00>|_t|j<00>|_t |j<00>|_y)uJ
Args:
history_manager: 测试历史管理器
N)r r<>r<><00>constraint_generatorr<72><00>scenario_recommenderr<72>s r"r<>zDiversityInjector.__init__<5F>s6<00><00>
'<27>><3E>*<<3C>*><3E><04> <0C>$7<><04> <0C> <0C>$E<><04>!<21>$7<><04> <0C> <0C>$E<><04>!r!<00>promptr<74>r<>r5c<00>@<00>|jjs|S|jj||<03><01>}|jj |xsg<00><02>}|j ||<05>}d}||vr(|j|d<04>}|d|zdz|z|dz} | S|dz|z} | S)u
将多样性约束注入到Prompt中
Args:
prompt: 废始Prompt
target_function: 当前目标功能点
uncovered_functions: 未覆盖功能点列表
Returns:
注入约束后的Prompt
)r<>r<>)r<>z[OUTPUT REQUIREMENTSr rz
)r<>r<>r<>r<>r<>r<><00>_build_constraint_section<6F>split)
rCr<>r<>r<>r<>r<><00>constraint_text<78> insert_marker<65>parts<74>enhanced_prompts
r"<00>inject_diversity_constraintsz.DiversityInjector.inject_diversity_constraints<74>s<><00><00><14>|<7C>|<7C>#<23>#<23><19>M<EFBFBD><1B>/<2F>/<2F>D<>D<>+<2B> 3<>E<01>
<EFBFBD> <0B> <1F>3<>3<>G<>G<> 3<> 9<>r<EFBFBD>H<01>
<EFBFBD><0F>
<1F>8<>8<><1B>o<EFBFBD>V<><0F>/<2F> <0A> <18>F<EFBFBD> "<22><1A>L<EFBFBD>L<EFBFBD><1D><01>2<>E<EFBFBD>#<23>A<EFBFBD>h<EFBFBD><1F>8<>6<EFBFBD>A<>M<EFBFBD>Q<>TY<54>Z[<5B>T\<5C>\<5C>O<EFBFBD>
<1F><1E>%<25>v<EFBFBD>o<EFBFBD><0F>?<3F>O<EFBFBD><1E>r!r<>r<>c<00><><00>g}|jd<01>|jd<02>|jd<03>|D]!}|j|j<00><00><00>#|jd<03>|r;|jd<04>t|d<05>D]\}}|j|<05>d|<06><00><03><00>|jd<03>|jd<07>|jd<08>d j|<03>S)
u构建约束章节z"[DIVERSITY CONSTRAINTS - CRITICAL]zCTo improve test effectiveness, follow these diversity requirements:r<z[RECOMMENDED NEW APPROACHES]r z. zIIMPORTANT: Repeated test patterns reduce coverage improvement efficiency.zEGenerate a DISTINCTLY DIFFERENT test sequence from previous attempts.r<>)rUrDr<>r<>)rCr<>r<>r<><00>
constraintre<00>recs r"r<>z+DiversityInjector._build_constraint_section<6F>s<><00><00><13><05> <0A> <0C> <0C>9<>:<3A> <0A> <0C> <0C>Z<>[<5B> <0A> <0C> <0C>R<EFBFBD><18>&<26> 6<>J<EFBFBD> <11>L<EFBFBD>L<EFBFBD><1A>2<>2<>4<> 5<> 6<> <0E> <0C> <0C>R<EFBFBD><18> <1B> <11>L<EFBFBD>L<EFBFBD>7<> 8<>#<23>O<EFBFBD>Q<EFBFBD>7<> ,<2C><06><01>3<EFBFBD><15> <0C> <0C><01>s<EFBFBD>"<22>S<EFBFBD>E<EFBFBD>]<5D>+<2B> ,<2C> <0E> <0C> <0C>R<EFBFBD><18> <0A> <0C> <0C>`<60>a<> <0A> <0C> <0C>\<5C>]<5D><13>y<EFBFBD>y<EFBFBD><15><1F>r!c<00>z<00>|jjsy|jj<00>}|jjtj
<00>}g}|j d|d<00>d<04><03>|j d|d<00><00><02>|r|j dt|<02><00>d<08><03>d j|<03>S)
u0获取多样性上下文信息用于Promptr<zTest History: <20> total_testsz tests generatedzUnique Patterns: <20>total_patternszOverused Patterns: z (avoid these)r<>) r<>r<><00>get_statisticsr<73>rrrUrqr<>)rC<00>statsr<73><00> context_liness r"<00>get_diversity_contextz'DiversityInjector.get_diversity_context<78>s<><00><00><13>|<7C>|<7C>#<23>#<23><15><14> <0C> <0C>+<2B>+<2B>-<2D><05><17><<3C><<3C>5<>5<>o<EFBFBD>6W<36>6W<36>X<><08><1A> <0A><15><1C><1C>~<7E>e<EFBFBD>M<EFBFBD>.B<>-C<>CS<43>T<>U<><15><1C><1C>0<><15>7G<37>1H<31>0I<30>J<>K<> <13> <19> <20> <20>#6<>s<EFBFBD>8<EFBFBD>}<7D>o<EFBFBD>^<5E>!T<> U<><13>y<EFBFBD>y<EFBFBD><1D>'<27>'r!<00>new_code<64> known_signalsc<00>z<00>i}|r%|jjj|<02>|jjj|<01>}|jj |<04>|d<|jj |<01>|d<t j|dzt j|dzz|d<|S)u<>
评估新代码的多样性
Args:
new_code: 新生成的测试代码
known_signals: 已知信号列表
Returns:
多样性评估结果
<20>sequence_diversity<74>edit_distance_diversity<74>overall_diversity) r<><00>sequence_extractor<6F>set_known_signals<6C>extract<63>calculate_sequence_diversity<74>!calculate_edit_distance_diversityrrr)rCr<>r<><00>results<74> new_sequencess r"<00>evaluate_diversityz$DiversityInjector.evaluate_diversitys<><00><00><15><07> <19> <10>L<EFBFBD>L<EFBFBD> +<2B> +<2B> =<3D> =<3D>m<EFBFBD> L<><1C> <0C> <0C>7<>7<>?<3F>?<3F><08>I<> <0A>(,<2C> <0C> <0C>(Q<>(Q<>R_<52>(`<60><07>$<24>%<25>.2<EFBFBD>\<5C>\<5C>-[<5B>-[<5B>\d<>-e<><07>)<29>*<2A> <1C> *<2A> *<2A>W<EFBFBD>5I<35>-J<> J<> <1B> 0<> 0<>7<EFBFBD>;T<>3U<33> U<> V<01> <10>#<23>$<24>
<17>r!ru<00>coverage_score<72>success<73> iterationc<00>D<00>|jj||||||<06><01>S)ud
记录新的测试用例
Args:
code: 测试代码
target_function: 目标功能点
coverage_score: 覆盖率分数
success: 是否成功
iteration: 迭代次数
known_signals: 已知信号列表
Returns:
测试记录
)rur<>r<>r<>r<>r<>)r<><00>
add_record)rCrur<>r<>r<>r<>r<>s r"<00> record_testzDiversityInjector.record_test#s2<00><00>*<14>|<7C>|<7C>&<26>&<26><15>+<2B>)<29><1B><1F>'<27> '<27>
<EFBFBD>
r!c<00>6<00>|jj<00>S)u获取统计信息)r<>r<><00>rCs r"r<>z DiversityInjector.get_statisticsAs<00><00><13>|<7C>|<7C>*<2A>*<2A>,<2C>,r!c<00>6<00>|jj<00>S)u生成多样性报告)r<><00>get_diversity_reportr<74>s r"<00>generate_diversity_reportz+DiversityInjector.generate_diversity_reportEs<00><00><13>|<7C>|<7C>0<>0<>2<>2r!rxr<>)r<gFrN)rrrrr r<>rFrrr<>r/r<>r<>rTr<><00>boolrHrr<>rr<>r<>r r!r"r<>r<><00>s/<00><00><08> F<01>(:<3A>F<01>=A<01>GK<47>)<1F>-0<>)<1F>69<36>)<1F>;?<3F>t<EFBFBD>*<2A>)<1F>QT<01>)<1F>V <20>/3<>4G<34>/H<> <20>37<33><03>9<EFBFBD> <20>AD<41> <20>6(<28>s<EFBFBD>(<28>&6:<3A><17>$'<27><17>)-<2D>c<EFBFBD><19><17>>B<>3<EFBFBD><05>:<3A>>N<><17>D+-<2D>+.<2E>#(<28>$%<25>.2<EFBFBD> 
<EFBFBD><1C>
<EFBFBD>$'<27>
<EFBFBD>$)<29>
<EFBFBD>!<21> 
<EFBFBD>
"<22> 
<EFBFBD> #'<27>s<EFBFBD>)<29> 
<EFBFBD> 8B<01> 
<EFBFBD><-<2D><04>S<EFBFBD>#<23>X<EFBFBD><0E>-<2D>3<>3<EFBFBD>3r!r<><00> history_filer5c<00>2<00>t|<00><01>}t|<01><02>S)u<>
创建多样性约束注入器
Args:
history_file: 屆史记录文件路径
Returns:
初始化完成的多样性约束注入器
)r<>)r<>)r r<>)r<>r<>s r"<00>create_diversity_injectorr<72>Ns<00><00>)<29>l<EFBFBD>C<>O<EFBFBD> <1C>_<EFBFBD> =<3D>=r!rx)!r<00>loggingrW<00>typingrrrrrr<00> dataclassesr r
<00>enumr <00> test_historyr rrr<00> ImportError<6F> getLoggerr<00>loggerrr$r/rJr<>r<>r<>rFr<>r r!r"<00><module>rs<><00><01><04><0F> <09>8<>8<>(<28><15><06><06><06>
<1B><17> <1A> <1A>8<EFBFBD> $<24><06><1A><1A>2$<24>T<EFBFBD>$<24> <0B>"'<27>"'<27> <0B>"'<27>NG+<2B>G+<2B>\l<16>l<16>f] <20>] <20>Hk3<>k3<>d ><3E>C<EFBFBD> ><3E>;L<> ><3E><>i<13><06><06><06><06>s<00> B<00>B2<03>1B2