
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><title>Python: package debugging</title>
</head><body bgcolor="#f0f0f8">

<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="heading">
<tr bgcolor="#7799ee">
<td valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong>debugging</strong></big></big></font></td
><td align=right valign=bottom
><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:e:\vslprf\dlr\languages\ironpython\tests\debugging\__init__.py">e:\vslprf\dlr\languages\ironpython\tests\debugging\__init__.py</a></font></td></tr></table>
    <p><tt>-------------------------------------------------------------------------------<br>
INTRODUCTION<br>
This&nbsp;test&nbsp;plan&nbsp;addresses&nbsp;debugging&nbsp;test&nbsp;coverage&nbsp;for&nbsp;the&nbsp;2.x&nbsp;series&nbsp;of&nbsp;<br>
IronPython&nbsp;interpreter&nbsp;releases.<br>
&nbsp;<br>
EDITORS&nbsp;NOTES<br>
Throughout&nbsp;this&nbsp;document&nbsp;you&nbsp;will&nbsp;find&nbsp;references&nbsp;to&nbsp;documentation&nbsp;in<br>
other&nbsp;packages&nbsp;similar&nbsp;to&nbsp;"See&nbsp;documentation&nbsp;for&nbsp;debugging.pdb_module".&nbsp;&nbsp;This&nbsp;simply<br>
means&nbsp;that&nbsp;relative&nbsp;to&nbsp;this&nbsp;package&nbsp;(i.e.,&nbsp;debugging),&nbsp;you&nbsp;should&nbsp;follow<br>
the&nbsp;'pdb_module&nbsp;(package)'&nbsp;link&nbsp;at&nbsp;the&nbsp;bottom&nbsp;of&nbsp;this&nbsp;page.<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
FEATURE&nbsp;GOALS<br>
The&nbsp;goals&nbsp;of&nbsp;IP's&nbsp;debugging&nbsp;feature&nbsp;is&nbsp;to&nbsp;provide&nbsp;IronPython&nbsp;users&nbsp;with&nbsp;<br>
complete&nbsp;use&nbsp;of&nbsp;CPython's&nbsp;existing&nbsp;debugger&nbsp;functionality,&nbsp;the&nbsp;"pdb"&nbsp;and<br>
"bdb"&nbsp;modules&nbsp;respectively,&nbsp;while&nbsp;also&nbsp;providing&nbsp;a&nbsp;great&nbsp;interactive&nbsp;debugging&nbsp;<br>
experience&nbsp;using&nbsp;Microsoft&nbsp;tools&nbsp;such&nbsp;as&nbsp;mdbg&nbsp;and&nbsp;the&nbsp;Visual&nbsp;Studio&nbsp;IDE.<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
PRIMARY&nbsp;TESTING&nbsp;CONCERNS<br>
-&nbsp;new&nbsp;builtin&nbsp;module&nbsp;attributes&nbsp;added&nbsp;to&nbsp;IP&nbsp;to&nbsp;support&nbsp;CPython's&nbsp;"bdb"&nbsp;and&nbsp;"pdb"<br>
&nbsp;&nbsp;modules<br>
-&nbsp;compatibility&nbsp;with&nbsp;CPython's&nbsp;use&nbsp;of&nbsp;the&nbsp;"bdb"&nbsp;and&nbsp;"pdb"&nbsp;modules<br>
-&nbsp;what&nbsp;happens&nbsp;breakpoint-wise&nbsp;when&nbsp;IP&nbsp;steps&nbsp;into&nbsp;.NET&nbsp;code&nbsp;from&nbsp;"pdb"?<br>
-&nbsp;.NET&nbsp;applications&nbsp;hosting&nbsp;IP&nbsp;should&nbsp;be&nbsp;able&nbsp;to&nbsp;debug&nbsp;Python&nbsp;code<br>
-&nbsp;the&nbsp;experience&nbsp;of&nbsp;debugging&nbsp;IP&nbsp;under&nbsp;Microsoft's&nbsp;mdbg&nbsp;and&nbsp;Visual&nbsp;<br>
&nbsp;&nbsp;Studio&nbsp;tools&nbsp;is&nbsp;what&nbsp;existing&nbsp;CSharp&nbsp;and&nbsp;VB.Net&nbsp;would&nbsp;expect;&nbsp;but&nbsp;still<br>
&nbsp;&nbsp;Pythonic<br>
-&nbsp;"-D"&nbsp;command-line&nbsp;flag<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
PRIMARY&nbsp;TESTING&nbsp;FOCUS<br>
Our&nbsp;principal&nbsp;testing&nbsp;focus&nbsp;will&nbsp;be&nbsp;on&nbsp;testing&nbsp;that&nbsp;IP's&nbsp;support&nbsp;of&nbsp;the<br>
"pdb"&nbsp;module&nbsp;is&nbsp;completely&nbsp;compatible&nbsp;with&nbsp;that&nbsp;of&nbsp;CPython&nbsp;by&nbsp;running&nbsp;existing<br>
CPython&nbsp;tests,&nbsp;and&nbsp;also&nbsp;by&nbsp;creating&nbsp;a&nbsp;new&nbsp;generic&nbsp;side-by-side&nbsp;testing&nbsp;framework.<br>
&nbsp;<br>
The&nbsp;secondardy&nbsp;focus&nbsp;will&nbsp;be&nbsp;testing&nbsp;that&nbsp;debugging&nbsp;IP&nbsp;under&nbsp;mdbg&nbsp;is&nbsp;a<br>
pleasant&nbsp;experience.&nbsp;&nbsp;This&nbsp;will&nbsp;initially&nbsp;be&nbsp;acheived&nbsp;by&nbsp;using&nbsp;the&nbsp;CLR&nbsp;Team's<br>
existing&nbsp;debugging&nbsp;test&nbsp;framework,&nbsp;but&nbsp;in&nbsp;the&nbsp;long&nbsp;run&nbsp;we&nbsp;will&nbsp;move&nbsp;to&nbsp;a<br>
new&nbsp;generic,&nbsp;side-by-side&nbsp;testing&nbsp;framework&nbsp;which&nbsp;can&nbsp;be&nbsp;reused&nbsp;for&nbsp;other&nbsp;<br>
side-by-side&nbsp;testing&nbsp;areas.<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
REFERENCES<br>
*&nbsp;IronPython&nbsp;Test&nbsp;Plan&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Internal&nbsp;IP&nbsp;SharePoint&nbsp;site<br>
*&nbsp;Feature&nbsp;Specifications&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None...<br>
*&nbsp;Development&nbsp;Documents&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None...<br>
*&nbsp;Schedule&nbsp;Documents&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None...<br>
*&nbsp;CPython&nbsp;pdb&nbsp;module&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://docs.python.org/library/pdb.html">http://docs.python.org/library/pdb.html</a><br>
*&nbsp;CPython&nbsp;bdb&nbsp;module&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://docs.python.org/library/bdb.html">http://docs.python.org/library/bdb.html</a><br>
*&nbsp;pdb&nbsp;tutorial&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://onlamp.com/pub/a/python/2005/09/01/debugger.html">http://onlamp.com/pub/a/python/2005/09/01/debugger.html</a><br>
*&nbsp;MDbg.exe&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://msdn.microsoft.com/en-us/library/ms229861.aspx">http://msdn.microsoft.com/en-us/library/ms229861.aspx</a><br>
*&nbsp;Debugging&nbsp;IP&nbsp;in&nbsp;Visual&nbsp;Studio&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://devhawk.net/2008/05/08/Debugging+IronPython+Code+In+Visual+Studio.aspx">http://devhawk.net/2008/05/08/Debugging+IronPython+Code+In+Visual+Studio.aspx</a><br>
*&nbsp;Bug&nbsp;queries&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://ironpython.codeplex.com/WorkItem/AdvancedList.aspx">http://ironpython.codeplex.com/WorkItem/AdvancedList.aspx</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;set&nbsp;the&nbsp;component&nbsp;to&nbsp;"Debugging"<br>
*&nbsp;Build&nbsp;drop&nbsp;location&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Updated&nbsp;at&nbsp;<a href="http://ironpython.codeplex.com/SourceControl/ListDownloadableCommits.aspx">http://ironpython.codeplex.com/SourceControl/ListDownloadableCommits.aspx</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;on&nbsp;weekdays<br>
*&nbsp;source&nbsp;file&nbsp;tree&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$/.../dlr/Debugging/&nbsp;and&nbsp;also&nbsp;$/.../dlr/.../IronPython/*<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
PERSONNEL<br>
Program&nbsp;Manager:&nbsp;&nbsp;&nbsp;&nbsp;hpierson<br>
Developer:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dinov<br>
Tester:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfugate<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
TESTING&nbsp;SCHEDULE<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;Phase&nbsp;I&nbsp;-&nbsp;Test&nbsp;Plan&nbsp;and&nbsp;Enabling&nbsp;Existing&nbsp;Tests<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Write&nbsp;test&nbsp;plan&nbsp;for&nbsp;IronPython&nbsp;Debugging&nbsp;feature<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Enable&nbsp;any&nbsp;existing&nbsp;CPython&nbsp;test&nbsp;cases&nbsp;for&nbsp;"pdb"&nbsp;and&nbsp;"bdb"&nbsp;in&nbsp;SNAP<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Enable&nbsp;any&nbsp;existing&nbsp;CPython&nbsp;test&nbsp;cases&nbsp;for&nbsp;Python&nbsp;features&nbsp;supporting&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"pdb"&nbsp;and&nbsp;"bdb"&nbsp;in&nbsp;SNAP<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;Phase&nbsp;II&nbsp;-&nbsp;Examine&nbsp;Coverage&nbsp;of&nbsp;Existing&nbsp;Cases&nbsp;and&nbsp;Write&nbsp;High-priority&nbsp;Cases<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Verify&nbsp;that&nbsp;developer&nbsp;tests&nbsp;for&nbsp;new&nbsp;additions&nbsp;to&nbsp;IP&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;supporting&nbsp;"pdb"&nbsp;and&nbsp;"bdb"&nbsp;modules&nbsp;are&nbsp;sufficient.&nbsp;Write&nbsp;more&nbsp;test<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cases&nbsp;if&nbsp;not<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Write&nbsp;additional&nbsp;test&nbsp;cases&nbsp;for&nbsp;the&nbsp;"pdb"&nbsp;module&nbsp;if&nbsp;CPython's&nbsp;test&nbsp;cases&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;are&nbsp;insufficient<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Examine&nbsp;our&nbsp;existing&nbsp;mdbg&nbsp;test&nbsp;(cases)&nbsp;looking&nbsp;for&nbsp;holes.&nbsp;Write&nbsp;new&nbsp;test<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cases&nbsp;if&nbsp;needed<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Author&nbsp;a&nbsp;few&nbsp;manual&nbsp;sanity&nbsp;test&nbsp;cases&nbsp;for&nbsp;verifying&nbsp;IP&nbsp;can&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;be&nbsp;debugged&nbsp;under&nbsp;the&nbsp;Visual&nbsp;Studio&nbsp;IDE.&nbsp;These&nbsp;should&nbsp;be&nbsp;folded&nbsp;into<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;CodePlex&nbsp;test&nbsp;pass&nbsp;signoff&nbsp;procedure&nbsp;for&nbsp;major&nbsp;releases<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;Phase&nbsp;III&nbsp;-&nbsp;Design&nbsp;and&nbsp;Implement&nbsp;Side-by-Side&nbsp;Testing&nbsp;Framework<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Based&nbsp;on&nbsp;the&nbsp;needs&nbsp;of&nbsp;test&nbsp;cases&nbsp;added&nbsp;in&nbsp;the&nbsp;previous&nbsp;phase&nbsp;either:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp;Design&nbsp;a&nbsp;side-by-side&nbsp;testing&nbsp;infrastructure&nbsp;to&nbsp;be&nbsp;used&nbsp;with&nbsp;testing<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IP's&nbsp;CPython&nbsp;debugging&nbsp;compatibility&nbsp;OR<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;Look&nbsp;for&nbsp;existing&nbsp;side-by-side&nbsp;testing&nbsp;frameworks&nbsp;we&nbsp;could&nbsp;reuse.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;pexpect&nbsp;package&nbsp;might&nbsp;be&nbsp;useful&nbsp;here<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Implement&nbsp;(or&nbsp;add&nbsp;existing)&nbsp;side-by-side&nbsp;testing&nbsp;framework<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;Phase&nbsp;IV&nbsp;-&nbsp;Implement&nbsp;High-priority&nbsp;Cases<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Implement&nbsp;test&nbsp;cases&nbsp;for&nbsp;additions&nbsp;to&nbsp;IP&nbsp;which&nbsp;support&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"pdb"&nbsp;module&nbsp;IF&nbsp;NEEDED<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Implement&nbsp;test&nbsp;cases&nbsp;for&nbsp;the&nbsp;"pdb"&nbsp;module&nbsp;IF&nbsp;NEEDED<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Implement&nbsp;test&nbsp;cases&nbsp;for&nbsp;mdbg&nbsp;IF&nbsp;NEEDED<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;Phase&nbsp;IV&nbsp;-&nbsp;Write&nbsp;Lower&nbsp;Priority&nbsp;Cases<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Write&nbsp;test&nbsp;cases&nbsp;around&nbsp;stepping&nbsp;into&nbsp;(hosted)&nbsp;Python&nbsp;code&nbsp;from&nbsp;a&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.NET&nbsp;application<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Write&nbsp;test&nbsp;cases&nbsp;around&nbsp;stepping&nbsp;into&nbsp;.NET&nbsp;code&nbsp;from&nbsp;an&nbsp;ipy.exe<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;process<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Write&nbsp;performance&nbsp;test&nbsp;cases<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;Phase&nbsp;V&nbsp;-&nbsp;Implement&nbsp;Lower&nbsp;Priority&nbsp;Cases<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Implement&nbsp;test&nbsp;cases&nbsp;around&nbsp;stepping&nbsp;into&nbsp;(hosted)&nbsp;Python&nbsp;code&nbsp;from&nbsp;a&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.NET&nbsp;application<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Implement&nbsp;test&nbsp;cases&nbsp;around&nbsp;stepping&nbsp;into&nbsp;.NET&nbsp;code&nbsp;from&nbsp;an&nbsp;ipy.exe<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;process<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Implement&nbsp;performance&nbsp;test&nbsp;cases<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;Phase&nbsp;VI&nbsp;-&nbsp;Future<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Develop&nbsp;test&nbsp;cases&nbsp;for&nbsp;the&nbsp;"bdb"&nbsp;module&nbsp;if&nbsp;CPython's&nbsp;test&nbsp;cases&nbsp;are<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insufficient<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Automate&nbsp;manual&nbsp;sanity&nbsp;Visual&nbsp;Studio&nbsp;debugging&nbsp;tests<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Migrate&nbsp;existing&nbsp;mdbg&nbsp;tests&nbsp;to&nbsp;the&nbsp;new&nbsp;side-by-side&nbsp;testing&nbsp;framework<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Low-resource&nbsp;test&nbsp;cases&nbsp;and&nbsp;implementation<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Reliability&nbsp;test&nbsp;cases&nbsp;and&nbsp;implementation<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Scalability&nbsp;test&nbsp;cases&nbsp;and&nbsp;implementation<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Stress&nbsp;test&nbsp;cases&nbsp;and&nbsp;implementation<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Internationalization&nbsp;test&nbsp;cases&nbsp;and&nbsp;implementation<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;Phase&nbsp;P&nbsp;-&nbsp;All&nbsp;Public&nbsp;Releases<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Verify&nbsp;all&nbsp;user&nbsp;documentation&nbsp;with&nbsp;respect&nbsp;to&nbsp;debugging<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Setup&nbsp;testing&nbsp;-&nbsp;verify&nbsp;pdb.py&nbsp;and&nbsp;all&nbsp;supporting&nbsp;modules&nbsp;are&nbsp;installed&nbsp;by&nbsp;the&nbsp;MSI<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Generate&nbsp;code&nbsp;coverage&nbsp;report&nbsp;and&nbsp;verify&nbsp;block&nbsp;coverage&nbsp;as&nbsp;greater<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;than&nbsp;80%<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
FEATURE&nbsp;HISTORY<br>
2.0:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tests&nbsp;implemented&nbsp;for&nbsp;IronPython&nbsp;under&nbsp;mdbg.&nbsp;Scenarios&nbsp;which&nbsp;still&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;need&nbsp;to&nbsp;be&nbsp;covered&nbsp;are:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Attach&nbsp;scenario&nbsp;with&nbsp;and&nbsp;without&nbsp;the&nbsp;-D&nbsp;option<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Step&nbsp;into/out&nbsp;when&nbsp;there&nbsp;is&nbsp;no&nbsp;pdb&nbsp;file&nbsp;for&nbsp;IP&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;binaries<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Multiple&nbsp;statements&nbsp;in&nbsp;one&nbsp;line&nbsp;(e.g.,&nbsp;"x&nbsp;=&nbsp;1;y=2"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;if&nbsp;x&nbsp;and&nbsp;\n&nbsp;y:&nbsp;print&nbsp;1<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;dict/tuple&nbsp;spanning&nbsp;multiple&nbsp;lines<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;break/continue,&nbsp;explicit&nbsp;raise<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;other&nbsp;multi-line&nbsp;statement&nbsp;scenarios&nbsp;such&nbsp;as:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;True:&nbsp;print&nbsp;1<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;True:\n&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;1<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;MdbgInterop<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;able&nbsp;to&nbsp;break&nbsp;into&nbsp;the&nbsp;C#&nbsp;code&nbsp;from&nbsp;Python<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;able&nbsp;to&nbsp;break&nbsp;back&nbsp;into&nbsp;Python&nbsp;code&nbsp;from&nbsp;C#<br>
&nbsp;<br>
2.6B2:&nbsp;&nbsp;&nbsp;First&nbsp;release&nbsp;of&nbsp;IronPython&nbsp;to&nbsp;include&nbsp;support&nbsp;of&nbsp;CPython's&nbsp;pdb&nbsp;module.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Only&nbsp;works&nbsp;if&nbsp;-X:Frames&nbsp;or&nbsp;-X:FullFrames&nbsp;option&nbsp;supplied&nbsp;to&nbsp;ipy.exe.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;No&nbsp;pdb-related&nbsp;tests&nbsp;running&nbsp;in&nbsp;SNAP&nbsp;at&nbsp;this&nbsp;point,&nbsp;but&nbsp;we&nbsp;are&nbsp;running<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;of&nbsp;CPython's&nbsp;tests&nbsp;WRT&nbsp;supporting&nbsp;functions&nbsp;in&nbsp;the&nbsp;sys&nbsp;module.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debugging&nbsp;test&nbsp;plan&nbsp;completely&nbsp;rewritten&nbsp;in&nbsp;the&nbsp;form&nbsp;of&nbsp;pydoc&nbsp;strings,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;made&nbsp;public.<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
FEATURES:<br>
-&nbsp;sys.settrace,&nbsp;sys.gettrace,&nbsp;and&nbsp;sys.call_tracing.&nbsp;&nbsp;NOTE:&nbsp;while&nbsp;each&nbsp;of&nbsp;these<br>
&nbsp;&nbsp;three&nbsp;builtin&nbsp;module&nbsp;members&nbsp;needs&nbsp;to&nbsp;be&nbsp;tested&nbsp;within&nbsp;unit&nbsp;tests&nbsp;on&nbsp;their<br>
&nbsp;&nbsp;own,&nbsp;the&nbsp;real&nbsp;use&nbsp;case&nbsp;here&nbsp;is&nbsp;through&nbsp;the&nbsp;"bdb"&nbsp;and&nbsp;"pdb"&nbsp;modules<br>
-&nbsp;ipy.exe's&nbsp;generation&nbsp;of&nbsp;PDBs<br>
-&nbsp;ipy.exe's&nbsp;PDB&nbsp;visualizers<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
FILES&nbsp;AND&nbsp;MODULES:<br>
&nbsp;<br>
-&nbsp;FILES&nbsp;LIST:<br>
&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;everything&nbsp;under&nbsp;Microsoft.Scripting.Debugging,&nbsp;although&nbsp;the&nbsp;DLR&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;officially&nbsp;owns&nbsp;this<br>
&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;sys.cs<br>
&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;IronPython.Runtime.PythonTracebackListener<br>
-&nbsp;REGISTRY,&nbsp;INI&nbsp;SETTINGS:&nbsp;None<br>
-&nbsp;SETUP&nbsp;PROCEDURES:&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;CPython&nbsp;standard&nbsp;library&nbsp;must&nbsp;be&nbsp;installed&nbsp;and&nbsp;present&nbsp;in&nbsp;sys.path&nbsp;to&nbsp;be&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;usable<br>
-&nbsp;DE-INSTALLATION&nbsp;PROCEDURES<br>
&nbsp;&nbsp;&nbsp;&nbsp;N/A<br>
-&nbsp;DATABASE&nbsp;SETUP&nbsp;AND&nbsp;PROCEDURES<br>
&nbsp;&nbsp;&nbsp;&nbsp;N/A<br>
-&nbsp;NETWORK&nbsp;DOMAIN/TOPOLOGIES&nbsp;CONFIGURATION&nbsp;PROCEDURES<br>
&nbsp;&nbsp;&nbsp;&nbsp;N/A<br>
-&nbsp;PERFORMANCE&nbsp;MONITORING&nbsp;COUNTERS&nbsp;SETUP&nbsp;AND&nbsp;CONFIGURATIONS<br>
&nbsp;&nbsp;&nbsp;&nbsp;N/A<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
OPERATIONAL&nbsp;ISSUES<br>
N/A.&nbsp;&nbsp;This&nbsp;feature&nbsp;of&nbsp;IP&nbsp;is&nbsp;not&nbsp;being&nbsp;monitored/maintained&nbsp;by&nbsp;operational&nbsp;<br>
staff,&nbsp;and&nbsp;IP&nbsp;is&nbsp;provided&nbsp;on&nbsp;an&nbsp;as-is&nbsp;basis.<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
SCOPE&nbsp;OF&nbsp;TEST&nbsp;CASES<br>
We'll&nbsp;be&nbsp;getting&nbsp;most&nbsp;of&nbsp;our&nbsp;test&nbsp;coverage&nbsp;on&nbsp;the&nbsp;debugging&nbsp;feature&nbsp;of&nbsp;<br>
IP&nbsp;by&nbsp;unit&nbsp;testing&nbsp;the&nbsp;CPython&nbsp;'pdb'&nbsp;module.&nbsp;&nbsp;Doing&nbsp;this&nbsp;thoroughly<br>
should&nbsp;guarantee&nbsp;we&nbsp;hit&nbsp;nearly&nbsp;all&nbsp;blocks&nbsp;of&nbsp;code&nbsp;supporting&nbsp;debugging&nbsp;in&nbsp;<br>
IP&nbsp;DLLs.&nbsp;This&nbsp;will&nbsp;be&nbsp;validated&nbsp;and&nbsp;verified&nbsp;through&nbsp;monthly&nbsp;code&nbsp;<br>
coverage&nbsp;runs.&nbsp;&nbsp;As&nbsp;an&nbsp;aside,&nbsp;this&nbsp;should&nbsp;in&nbsp;theory&nbsp;hit&nbsp;most&nbsp;of&nbsp;the&nbsp;DLR's<br>
Microsoft.Scripting.Debugging.dll&nbsp;as&nbsp;well.<br>
&nbsp;<br>
As&nbsp;IP&nbsp;currently&nbsp;has&nbsp;no&nbsp;tie-in&nbsp;into&nbsp;the&nbsp;Visual&nbsp;Studio&nbsp;IDE,&nbsp;this&nbsp;is&nbsp;<br>
arguably&nbsp;far&nbsp;less&nbsp;important&nbsp;to&nbsp;test&nbsp;than&nbsp;our&nbsp;support&nbsp;of&nbsp;the&nbsp;'pdb'&nbsp;module&nbsp;or&nbsp;<br>
even&nbsp;mdbg.&nbsp;&nbsp;As&nbsp;a&nbsp;result,&nbsp;the&nbsp;Microsoft&nbsp;toolset&nbsp;testing&nbsp;emphasis&nbsp;will&nbsp;involve<br>
exahaustively&nbsp;covering&nbsp;all&nbsp;aspects&nbsp;of&nbsp;mdbg.&nbsp;That&nbsp;said,&nbsp;some&nbsp;of&nbsp;our&nbsp;users&nbsp;do&nbsp;in<br>
fact&nbsp;have&nbsp;VS&nbsp;Pro&nbsp;installed&nbsp;implying&nbsp;that&nbsp;we&nbsp;should&nbsp;perform&nbsp;at&nbsp;least&nbsp;minimal,<br>
manual&nbsp;sanity&nbsp;tests&nbsp;before&nbsp;every&nbsp;major&nbsp;public&nbsp;release&nbsp;of&nbsp;IP.&nbsp;&nbsp;Should&nbsp;we<br>
ever&nbsp;provide&nbsp;visualizers&nbsp;for&nbsp;our&nbsp;debug&nbsp;symbols&nbsp;we'll&nbsp;need&nbsp;much&nbsp;more&nbsp;<br>
comprehensive&nbsp;and&nbsp;automated&nbsp;tests&nbsp;for&nbsp;VS&nbsp;of&nbsp;course.<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
ACCEPTANCE&nbsp;CRITERIA<br>
-&nbsp;no&nbsp;debugging&nbsp;related&nbsp;feature&nbsp;should&nbsp;be&nbsp;checked&nbsp;into&nbsp;the&nbsp;internal&nbsp;source&nbsp;<br>
&nbsp;&nbsp;repository&nbsp;without&nbsp;some&nbsp;form&nbsp;of&nbsp;unit&nbsp;test&nbsp;hooked&nbsp;into&nbsp;SNAP&nbsp;checked&nbsp;in&nbsp;as<br>
&nbsp;&nbsp;well<br>
-&nbsp;we&nbsp;should&nbsp;not&nbsp;publically&nbsp;advertise&nbsp;the&nbsp;existance&nbsp;of&nbsp;any&nbsp;new&nbsp;debugging&nbsp;features<br>
&nbsp;&nbsp;in&nbsp;an&nbsp;IP&nbsp;release&nbsp;unless:<br>
&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if&nbsp;the&nbsp;feature&nbsp;is&nbsp;CPython-based;&nbsp;the&nbsp;majority&nbsp;of&nbsp;it's&nbsp;corresponding&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPython&nbsp;unit&nbsp;test&nbsp;cases&nbsp;have&nbsp;been&nbsp;enabled&nbsp;in&nbsp;SNAP&nbsp;and&nbsp;pass<br>
&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if&nbsp;the&nbsp;feature&nbsp;is&nbsp;novel&nbsp;to&nbsp;IP;&nbsp;block&nbsp;coverage&nbsp;should&nbsp;be&nbsp;greater<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;than&nbsp;70%<br>
&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;the&nbsp;feature&nbsp;needs&nbsp;to&nbsp;be&nbsp;documented&nbsp;in&nbsp;some&nbsp;form&nbsp;other&nbsp;than&nbsp;a&nbsp;blog<br>
&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;performance&nbsp;of&nbsp;the&nbsp;feature&nbsp;needs&nbsp;to&nbsp;be&nbsp;"within&nbsp;reason"<br>
&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if&nbsp;the&nbsp;feature&nbsp;is&nbsp;not&nbsp;CPython-based;&nbsp;it&nbsp;needs&nbsp;a&nbsp;Pythonic&nbsp;feel&nbsp;to&nbsp;it<br>
&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;at&nbsp;least&nbsp;half&nbsp;of&nbsp;all&nbsp;bugs&nbsp;opened&nbsp;on&nbsp;the&nbsp;feature&nbsp;since&nbsp;its&nbsp;inception&nbsp;are<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fixed<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
KEY&nbsp;FEATURE&nbsp;ISSUES<br>
-&nbsp;no&nbsp;spec&nbsp;on&nbsp;debugging&nbsp;IP&nbsp;from&nbsp;mdbg,&nbsp;VS,&nbsp;or&nbsp;what&nbsp;debugging&nbsp;symbols&nbsp;<br>
&nbsp;&nbsp;should&nbsp;be&nbsp;generated&nbsp;for&nbsp;various&nbsp;Python&nbsp;constructs<br>
-&nbsp;insufficient&nbsp;test&nbsp;resources&nbsp;to&nbsp;adequately&nbsp;test&nbsp;this&nbsp;feature<br>
-&nbsp;insufficient&nbsp;resources&nbsp;to&nbsp;implement&nbsp;all&nbsp;debugging&nbsp;features&nbsp;called&nbsp;out&nbsp;in&nbsp;this<br>
&nbsp;&nbsp;test&nbsp;plan<br>
-&nbsp;existing&nbsp;mdbg&nbsp;tests&nbsp;are&nbsp;based&nbsp;on&nbsp;CLR&nbsp;infrastructure&nbsp;and&nbsp;require&nbsp;a&nbsp;Perl&nbsp;<br>
&nbsp;&nbsp;installation.&nbsp;We&nbsp;cannot&nbsp;redistribute&nbsp;this&nbsp;publically<br>
-&nbsp;existing&nbsp;mdbg&nbsp;tests&nbsp;in&nbsp;SNAP&nbsp;are&nbsp;flakey<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
TEST&nbsp;APPROACH<br>
-&nbsp;DESIGN&nbsp;VALIDATION<br>
&nbsp;&nbsp;&nbsp;&nbsp;We&nbsp;have&nbsp;no&nbsp;part&nbsp;in&nbsp;the&nbsp;design&nbsp;of&nbsp;the&nbsp;"pdb"&nbsp;and&nbsp;"bdb"&nbsp;standard&nbsp;modules.&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;As&nbsp;for&nbsp;debugging&nbsp;under&nbsp;mdbg...there&nbsp;is&nbsp;no&nbsp;current&nbsp;design&nbsp;document&nbsp;on&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;debugging&nbsp;Python&nbsp;sessions.&nbsp;&nbsp;Generally&nbsp;speaking&nbsp;test&nbsp;will&nbsp;simply&nbsp;ensure&nbsp;that<br>
&nbsp;&nbsp;&nbsp;&nbsp;whatever&nbsp;mdbg&nbsp;functionality&nbsp;exists&nbsp;with&nbsp;regard&nbsp;to&nbsp;IP&nbsp;is&nbsp;"Pythonic",<br>
&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;at&nbsp;the&nbsp;same&nbsp;time&nbsp;familiar&nbsp;to&nbsp;CSharp&nbsp;and&nbsp;VB&nbsp;developers.<br>
&nbsp;<br>
-&nbsp;DATA&nbsp;VALIDATION<br>
&nbsp;&nbsp;&nbsp;&nbsp;pdb/bdb:&nbsp;at&nbsp;a&nbsp;very&nbsp;low-level,&nbsp;all&nbsp;we&nbsp;need&nbsp;to&nbsp;validate&nbsp;is&nbsp;that&nbsp;parameters&nbsp;passed<br>
&nbsp;&nbsp;&nbsp;&nbsp;to&nbsp;a&nbsp;trace&nbsp;function&nbsp;we&nbsp;set&nbsp;via&nbsp;sys.settrace&nbsp;are&nbsp;as&nbsp;expected.&nbsp;&nbsp;In&nbsp;particular,<br>
&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;first&nbsp;parameter&nbsp;passed&nbsp;in&nbsp;is&nbsp;the&nbsp;current&nbsp;stack&nbsp;frame&nbsp;which&nbsp;we&nbsp;have&nbsp;a&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;very&nbsp;solid&nbsp;chance&nbsp;of&nbsp;getting&nbsp;wrong.<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;mdbg/VS:&nbsp;need&nbsp;to&nbsp;validate&nbsp;that&nbsp;generation&nbsp;of&nbsp;PDB&nbsp;symbols&nbsp;"make&nbsp;sense"<br>
&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;respect&nbsp;to&nbsp;whatever&nbsp;Python&nbsp;source&nbsp;is&nbsp;being&nbsp;compiled.&nbsp;There&nbsp;are&nbsp;at&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;least&nbsp;two&nbsp;ways&nbsp;to&nbsp;accomplish&nbsp;this:<br>
&nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp;Create&nbsp;a&nbsp;regression&nbsp;test&nbsp;in&nbsp;which&nbsp;we&nbsp;compare&nbsp;the&nbsp;generated&nbsp;PDB&nbsp;of&nbsp;a&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;known&nbsp;Python&nbsp;script&nbsp;to&nbsp;an&nbsp;expected&nbsp;PDB&nbsp;file.&nbsp;&nbsp;The&nbsp;Python&nbsp;script&nbsp;should<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exhaustively&nbsp;cover&nbsp;everything&nbsp;that's&nbsp;possible&nbsp;in&nbsp;the&nbsp;Python&nbsp;grammar.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Testing&nbsp;in&nbsp;this&nbsp;manner&nbsp;is&nbsp;not&nbsp;really&nbsp;maintainable&nbsp;in&nbsp;the&nbsp;long&nbsp;run&nbsp;as&nbsp;we<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;expect&nbsp;the&nbsp;PDB&nbsp;generated&nbsp;for&nbsp;a&nbsp;given&nbsp;Python&nbsp;script&nbsp;to&nbsp;change&nbsp;over&nbsp;time<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reflecting&nbsp;optimizations&nbsp;and&nbsp;new&nbsp;features&nbsp;added&nbsp;to&nbsp;IP<br>
&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;Test&nbsp;that&nbsp;the&nbsp;behavior&nbsp;of&nbsp;mdbg,&nbsp;given&nbsp;a&nbsp;known&nbsp;Python&nbsp;script,&nbsp;does&nbsp;not&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regress.&nbsp;&nbsp;Again,&nbsp;this&nbsp;Python&nbsp;script&nbsp;should&nbsp;exhaustively&nbsp;cover&nbsp;everything<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;that's&nbsp;possible&nbsp;in&nbsp;Python's&nbsp;grammar,&nbsp;but&nbsp;this&nbsp;time&nbsp;around&nbsp;we'll&nbsp;also<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;need&nbsp;to&nbsp;cover&nbsp;everything&nbsp;that's&nbsp;possible&nbsp;under&nbsp;mdbg<br>
&nbsp;<br>
-&nbsp;API&nbsp;TESTING<br>
&nbsp;&nbsp;&nbsp;&nbsp;We'll&nbsp;exhaustively&nbsp;cover&nbsp;the&nbsp;entire&nbsp;"pdb"&nbsp;standard&nbsp;module&nbsp;without&nbsp;ever&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;touching&nbsp;the&nbsp;CSharp&nbsp;APIs&nbsp;directly.&nbsp;&nbsp;Prior&nbsp;coverage&nbsp;runs&nbsp;have&nbsp;shown&nbsp;that&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;(generally&nbsp;speaking)&nbsp;any&nbsp;block&nbsp;of&nbsp;code&nbsp;that&nbsp;is&nbsp;not&nbsp;directly&nbsp;hittable&nbsp;through&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;Python&nbsp;API&nbsp;is&nbsp;likely&nbsp;dead&nbsp;code.&nbsp;&nbsp;Also,&nbsp;testing&nbsp;"bdb"&nbsp;module&nbsp;is&nbsp;lower&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;priority&nbsp;as&nbsp;"pdb"&nbsp;uses&nbsp;this&nbsp;for&nbsp;its&nbsp;own&nbsp;implementation.&nbsp;&nbsp;The&nbsp;final&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;justification&nbsp;for&nbsp;this&nbsp;is&nbsp;that&nbsp;there&nbsp;is&nbsp;actually&nbsp;very&nbsp;little&nbsp;in&nbsp;terms&nbsp;of&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;debugging&nbsp;APIs&nbsp;in&nbsp;IP&nbsp;DLLs.&nbsp;&nbsp;Most&nbsp;of&nbsp;the&nbsp;debugging&nbsp;support&nbsp;is&nbsp;built<br>
&nbsp;&nbsp;&nbsp;&nbsp;directly&nbsp;into&nbsp;the&nbsp;DLR's&nbsp;Microsoft.Scripting.Debugging.dll.<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;mdbg/VS,&nbsp;we'll&nbsp;exhaustively&nbsp;cover&nbsp;all&nbsp;mdbg&nbsp;commands.<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
-&nbsp;CONTENT&nbsp;TESTING<br>
&nbsp;&nbsp;All&nbsp;debugging&nbsp;documentation&nbsp;should&nbsp;be&nbsp;thoroughly&nbsp;reviewed&nbsp;by&nbsp;Test&nbsp;before&nbsp;any<br>
&nbsp;&nbsp;public&nbsp;release&nbsp;of&nbsp;IronPython.&nbsp;&nbsp;Careful&nbsp;attention&nbsp;will&nbsp;be&nbsp;given&nbsp;to&nbsp;duplicating<br>
&nbsp;&nbsp;exactly&nbsp;any&nbsp;command&nbsp;fed&nbsp;into&nbsp;ipy.exe&nbsp;or&nbsp;mdbg.exe,&nbsp;and&nbsp;this&nbsp;should&nbsp;be&nbsp;<br>
&nbsp;&nbsp;automated&nbsp;entirely&nbsp;if&nbsp;feasible.<br>
&nbsp;&nbsp;<br>
-&nbsp;LOW-RESOURCE&nbsp;TESTING<br>
&nbsp;&nbsp;Use&nbsp;of&nbsp;the&nbsp;debugging&nbsp;feature&nbsp;has&nbsp;a&nbsp;few&nbsp;side&nbsp;effects&nbsp;which&nbsp;might&nbsp;be&nbsp;interesting<br>
&nbsp;&nbsp;from&nbsp;a&nbsp;limited&nbsp;resources&nbsp;perspective.&nbsp;&nbsp;First&nbsp;and&nbsp;foremost,&nbsp;use&nbsp;of&nbsp;the&nbsp;-X:Frames<br>
&nbsp;&nbsp;and&nbsp;-X:FullFrames&nbsp;IP&nbsp;console&nbsp;flags&nbsp;imply&nbsp;that&nbsp;IP&nbsp;will&nbsp;consume&nbsp;more&nbsp;<br>
&nbsp;&nbsp;memory&nbsp;than&nbsp;under&nbsp;normal&nbsp;circumstances.&nbsp;&nbsp;We&nbsp;should&nbsp;check&nbsp;that&nbsp;IP&nbsp;does&nbsp;not&nbsp;<br>
&nbsp;&nbsp;consume&nbsp;"too&nbsp;much"&nbsp;extra&nbsp;memory.&nbsp;&nbsp;Next,&nbsp;use&nbsp;of&nbsp;the&nbsp;debugging&nbsp;flag,&nbsp;'-D',&nbsp;in<br>
&nbsp;&nbsp;conjunction&nbsp;with&nbsp;the&nbsp;'-X:SaveAssemblies'&nbsp;flag&nbsp;will&nbsp;generate&nbsp;<br>
&nbsp;&nbsp;Snippets.debug.scripting.pdb&nbsp;in&nbsp;the&nbsp;%TMP%&nbsp;directory.&nbsp;What&nbsp;occurs&nbsp;if&nbsp;the&nbsp;drive<br>
&nbsp;&nbsp;containing&nbsp;%TMP%&nbsp;is&nbsp;full?<br>
&nbsp;<br>
&nbsp;&nbsp;NOTE:&nbsp;while&nbsp;this&nbsp;is&nbsp;an&nbsp;interesting&nbsp;test&nbsp;area&nbsp;to&nbsp;explore,&nbsp;there&nbsp;are&nbsp;no&nbsp;current<br>
&nbsp;&nbsp;plans&nbsp;to&nbsp;test&nbsp;it.&nbsp;&nbsp;We&nbsp;should&nbsp;perform&nbsp;general&nbsp;low-resource&nbsp;testing&nbsp;of&nbsp;<br>
&nbsp;&nbsp;IP&nbsp;before&nbsp;tackling&nbsp;it&nbsp;for&nbsp;this&nbsp;specific&nbsp;feature.<br>
&nbsp;&nbsp;<br>
-&nbsp;SETUP&nbsp;TESTING<br>
&nbsp;&nbsp;The&nbsp;only&nbsp;option&nbsp;of&nbsp;IP's&nbsp;MSI&nbsp;installer&nbsp;capable&nbsp;of&nbsp;affecting<br>
&nbsp;&nbsp;the&nbsp;debugging&nbsp;feature&nbsp;is&nbsp;the&nbsp;ability&nbsp;to&nbsp;selectively&nbsp;install&nbsp;CPython's&nbsp;standard<br>
&nbsp;&nbsp;library.&nbsp;&nbsp;As&nbsp;we&nbsp;generate&nbsp;the&nbsp;list&nbsp;of&nbsp;CPython&nbsp;modules&nbsp;to&nbsp;include&nbsp;in&nbsp;the&nbsp;MSI<br>
&nbsp;&nbsp;dynamically,&nbsp;it&nbsp;would&nbsp;be&nbsp;worthwhile&nbsp;to&nbsp;always&nbsp;check&nbsp;that&nbsp;pdb.py&nbsp;is&nbsp;included.<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;NOTE:&nbsp;IronPython&nbsp;currently&nbsp;has&nbsp;no&nbsp;automated&nbsp;tests&nbsp;for&nbsp;the&nbsp;MSI.&nbsp;Once&nbsp;we<br>
&nbsp;&nbsp;do,&nbsp;we&nbsp;need&nbsp;to&nbsp;add&nbsp;a&nbsp;check&nbsp;to&nbsp;ensure&nbsp;pdb.py&nbsp;is&nbsp;always&nbsp;included.&nbsp;&nbsp;For&nbsp;the&nbsp;time<br>
&nbsp;&nbsp;being&nbsp;this&nbsp;will&nbsp;have&nbsp;to&nbsp;be&nbsp;done&nbsp;manually.<br>
&nbsp;&nbsp;<br>
-&nbsp;MODES&nbsp;AND&nbsp;RUNTIME&nbsp;OPTIONS<br>
&nbsp;&nbsp;We&nbsp;should&nbsp;focus&nbsp;our&nbsp;efforts&nbsp;on&nbsp;testing&nbsp;IP&nbsp;with&nbsp;the&nbsp;following&nbsp;modes:<br>
&nbsp;&nbsp;*&nbsp;-D&nbsp;-X:Frames<br>
&nbsp;&nbsp;*&nbsp;-D&nbsp;-X:FullFrames<br>
&nbsp;&nbsp;*&nbsp;-D&nbsp;-X:Frames&nbsp;-X:SaveAssemblies<br>
&nbsp;&nbsp;*&nbsp;-D<br>
&nbsp;&nbsp;*&nbsp;-X:Frames<br>
&nbsp;&nbsp;*&nbsp;<br>
&nbsp;&nbsp;using&nbsp;both&nbsp;debug&nbsp;and&nbsp;release&nbsp;IP&nbsp;assemblies.&nbsp;&nbsp;Also&nbsp;note&nbsp;that&nbsp;this<br>
&nbsp;&nbsp;needs&nbsp;to&nbsp;be&nbsp;performed&nbsp;for&nbsp;both&nbsp;Python&nbsp;interactive&nbsp;sessions&nbsp;and&nbsp;Python&nbsp;scripts<br>
&nbsp;&nbsp;passed&nbsp;into&nbsp;ipy.exe&nbsp;(e.g.,&nbsp;"ipy.exe&nbsp;test_str.py").&nbsp;&nbsp;Last&nbsp;but<br>
&nbsp;&nbsp;not&nbsp;least,&nbsp;there's&nbsp;the&nbsp;%PYTHONDEBUG%&nbsp;environment&nbsp;variable&nbsp;to&nbsp;consider.<br>
&nbsp;&nbsp;<br>
-&nbsp;INTEROPERABILITY<br>
&nbsp;&nbsp;Of&nbsp;primary&nbsp;concern&nbsp;is&nbsp;that&nbsp;IP&nbsp;produces&nbsp;an&nbsp;identical&nbsp;experience&nbsp;as<br>
&nbsp;&nbsp;CPython&nbsp;when&nbsp;given&nbsp;input&nbsp;which&nbsp;utilizes&nbsp;the&nbsp;pdb&nbsp;module.&nbsp;This&nbsp;will&nbsp;be&nbsp;<br>
&nbsp;&nbsp;accomplished&nbsp;via&nbsp;side-by-side&nbsp;testing&nbsp;and&nbsp;verification&nbsp;that&nbsp;the&nbsp;output&nbsp;of&nbsp;<br>
&nbsp;&nbsp;IP&nbsp;is&nbsp;the&nbsp;same&nbsp;as&nbsp;CPython&nbsp;given&nbsp;an&nbsp;identical&nbsp;input.<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;We&nbsp;will&nbsp;also&nbsp;verify&nbsp;that&nbsp;IP&nbsp;can&nbsp;be&nbsp;debugged&nbsp;from&nbsp;mdbg&nbsp;and&nbsp;the&nbsp;Visual<br>
&nbsp;&nbsp;Studio&nbsp;IDE.<br>
&nbsp;&nbsp;<br>
-&nbsp;INTEGRATION&nbsp;TESTING<br>
&nbsp;&nbsp;*&nbsp;Silverlight&nbsp;support&nbsp;of&nbsp;debugging?<br>
&nbsp;&nbsp;*&nbsp;breaking&nbsp;into&nbsp;.NET&nbsp;code&nbsp;from&nbsp;pdb<br>
&nbsp;&nbsp;*&nbsp;breaking&nbsp;into&nbsp;COM&nbsp;from&nbsp;pdb<br>
&nbsp;&nbsp;*&nbsp;breaking&nbsp;into&nbsp;IronRuby&nbsp;from&nbsp;pdb<br>
&nbsp;&nbsp;*&nbsp;breaking&nbsp;into&nbsp;Python&nbsp;code&nbsp;from&nbsp;DLR&nbsp;hosting&nbsp;APIs<br>
&nbsp;&nbsp;*&nbsp;breaking&nbsp;into&nbsp;Python&nbsp;code&nbsp;from&nbsp;IronRuby<br>
&nbsp;<br>
-&nbsp;BETA&nbsp;TESTING<br>
&nbsp;&nbsp;The&nbsp;second&nbsp;beta&nbsp;release&nbsp;of&nbsp;IronPython&nbsp;2.6&nbsp;will&nbsp;support&nbsp;the&nbsp;debugging&nbsp;feature<br>
&nbsp;&nbsp;in&nbsp;the&nbsp;form&nbsp;of&nbsp;very&nbsp;limited&nbsp;pdb&nbsp;module&nbsp;support&nbsp;with&nbsp;the&nbsp;-X:Frames&nbsp;flag&nbsp;<br>
&nbsp;&nbsp;passed&nbsp;to&nbsp;ipy.exe.&nbsp;As&nbsp;with&nbsp;all&nbsp;beta&nbsp;releases&nbsp;of&nbsp;IP,&nbsp;this&nbsp;will&nbsp;be&nbsp;<br>
&nbsp;&nbsp;released&nbsp;on&nbsp;CodePlex&nbsp;to&nbsp;the&nbsp;general&nbsp;public.&nbsp;We&nbsp;will&nbsp;then&nbsp;use&nbsp;feedback<br>
&nbsp;&nbsp;from&nbsp;the&nbsp;IronPython&nbsp;Community&nbsp;to&nbsp;determine&nbsp;the&nbsp;amount&nbsp;of&nbsp;effort&nbsp;that&nbsp;goes&nbsp;<br>
&nbsp;&nbsp;into&nbsp;fully&nbsp;testing&nbsp;this&nbsp;feature.<br>
&nbsp;&nbsp;<br>
-&nbsp;ENVIRONMENT/SYSTEM&nbsp;-&nbsp;GENERAL<br>
&nbsp;&nbsp;The&nbsp;%PYTHONDEBUG%&nbsp;environment&nbsp;variable&nbsp;may&nbsp;have&nbsp;some&nbsp;impact&nbsp;on&nbsp;this&nbsp;feature.<br>
&nbsp;&nbsp;Other&nbsp;than&nbsp;this,&nbsp;the&nbsp;VS&nbsp;IDE&nbsp;will&nbsp;of&nbsp;course&nbsp;need&nbsp;to&nbsp;be&nbsp;installed&nbsp;for&nbsp;testing<br>
&nbsp;&nbsp;the&nbsp;VS&nbsp;debugging&nbsp;experience.<br>
&nbsp;&nbsp;<br>
-&nbsp;CONFIGURATION<br>
&nbsp;&nbsp;Need&nbsp;.NET&nbsp;2.0&nbsp;Service&nbsp;Pack&nbsp;1&nbsp;installed&nbsp;to&nbsp;run&nbsp;IP,&nbsp;and&nbsp;.NET&nbsp;3.5<br>
&nbsp;&nbsp;Service&nbsp;Pack&nbsp;1&nbsp;to&nbsp;build&nbsp;the&nbsp;feature.<br>
&nbsp;&nbsp;<br>
-&nbsp;USER&nbsp;INTERFACE<br>
&nbsp;&nbsp;IP&nbsp;provides&nbsp;no&nbsp;user&nbsp;interfaces.<br>
&nbsp;&nbsp;<br>
-&nbsp;PERFORMANCE&nbsp;&amp;&nbsp;CAPACITY&nbsp;TESTING<br>
&nbsp;&nbsp;Minimally,&nbsp;we&nbsp;need&nbsp;to&nbsp;run&nbsp;one&nbsp;or&nbsp;more&nbsp;tests&nbsp;in&nbsp;the&nbsp;perf&nbsp;lab&nbsp;under&nbsp;the&nbsp;-X:Frames<br>
&nbsp;&nbsp;and&nbsp;-X:FullFrames&nbsp;test&nbsp;modes.&nbsp;&nbsp;We&nbsp;should&nbsp;also&nbsp;measure&nbsp;the&nbsp;end-to-end&nbsp;run&nbsp;time<br>
&nbsp;&nbsp;of&nbsp;a&nbsp;complete,&nbsp;yet&nbsp;minimal,&nbsp;debugging&nbsp;sample&nbsp;utilizing&nbsp;the&nbsp;pdb&nbsp;module&nbsp;in&nbsp;the&nbsp;<br>
&nbsp;&nbsp;lab.&nbsp;&nbsp;The&nbsp;focus&nbsp;here&nbsp;will&nbsp;simply&nbsp;be&nbsp;on&nbsp;ensuring&nbsp;there&nbsp;are&nbsp;no&nbsp;perf&nbsp;regressions<br>
&nbsp;&nbsp;which&nbsp;are&nbsp;greater&nbsp;than&nbsp;15%&nbsp;for&nbsp;any&nbsp;given&nbsp;checkin,&nbsp;and&nbsp;also&nbsp;that&nbsp;overall&nbsp;<br>
&nbsp;&nbsp;performance&nbsp;of&nbsp;the&nbsp;debugging&nbsp;feature&nbsp;remains&nbsp;palatable&nbsp;to&nbsp;our&nbsp;userbase.<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;In&nbsp;terms&nbsp;of&nbsp;capacity&nbsp;testing&nbsp;we&nbsp;should&nbsp;look&nbsp;at:<br>
&nbsp;&nbsp;-&nbsp;if&nbsp;perf&nbsp;gets&nbsp;affected&nbsp;when&nbsp;breaking&nbsp;into&nbsp;deeply&nbsp;nested&nbsp;functions&nbsp;(e.g.,&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;recursive&nbsp;functions)<br>
&nbsp;&nbsp;-&nbsp;anything&nbsp;else?<br>
&nbsp;&nbsp;<br>
-&nbsp;PRIVACY<br>
&nbsp;&nbsp;Does&nbsp;%TMP%\Snippets.debug.scripting.pdb&nbsp;contain&nbsp;sensitive&nbsp;customer&nbsp;data?&nbsp;If&nbsp;<br>
&nbsp;&nbsp;so,&nbsp;does&nbsp;IP&nbsp;disclose&nbsp;the&nbsp;existence&nbsp;of&nbsp;this&nbsp;file?<br>
&nbsp;&nbsp;Is&nbsp;remote&nbsp;debugging&nbsp;supported?&nbsp;If&nbsp;so,&nbsp;what&nbsp;safeguards&nbsp;are&nbsp;in&nbsp;place?<br>
&nbsp;&nbsp;<br>
-&nbsp;RELIABILITY<br>
&nbsp;&nbsp;Most&nbsp;end-users&nbsp;are&nbsp;expected&nbsp;to&nbsp;enter&nbsp;into&nbsp;debugging&nbsp;sessions&nbsp;for&nbsp;short&nbsp;<br>
&nbsp;&nbsp;periods&nbsp;of&nbsp;time&nbsp;to&nbsp;diagnose&nbsp;issues&nbsp;with&nbsp;Python&nbsp;code.&nbsp;&nbsp;From&nbsp;this&nbsp;perspective<br>
&nbsp;&nbsp;the&nbsp;so-called&nbsp;"up&nbsp;time"&nbsp;of&nbsp;debugging&nbsp;sessions&nbsp;is&nbsp;less&nbsp;important&nbsp;than&nbsp;the&nbsp;<br>
&nbsp;&nbsp;overall&nbsp;sporadic&nbsp;failure&nbsp;frequency.&nbsp;We&nbsp;can&nbsp;get&nbsp;a&nbsp;good&nbsp;sense&nbsp;of&nbsp;how&nbsp;often&nbsp;<br>
&nbsp;&nbsp;sporadic&nbsp;failures&nbsp;occur&nbsp;by&nbsp;automatically&nbsp;running&nbsp;debugging&nbsp;tests&nbsp;in&nbsp;SNAP&nbsp;<br>
&nbsp;&nbsp;for&nbsp;every&nbsp;IP&nbsp;checkin.<br>
&nbsp;&nbsp;<br>
-&nbsp;SCALABILITY<br>
&nbsp;&nbsp;Does&nbsp;debugging&nbsp;still&nbsp;work&nbsp;correctly&nbsp;when&nbsp;stepping&nbsp;into&nbsp;deeply&nbsp;nested&nbsp;(e.g.,&nbsp;1000)<br>
&nbsp;&nbsp;functions?<br>
&nbsp;&nbsp;<br>
-&nbsp;STRESS&nbsp;TESTING<br>
&nbsp;&nbsp;-&nbsp;gcstress<br>
&nbsp;&nbsp;-&nbsp;MDA<br>
&nbsp;&nbsp;-&nbsp;assemblies&nbsp;in&nbsp;the&nbsp;GAC<br>
&nbsp;&nbsp;-&nbsp;call&nbsp;pdb&nbsp;functions&nbsp;multiple&nbsp;times&nbsp;and&nbsp;look&nbsp;for&nbsp;memory&nbsp;leaks<br>
&nbsp;&nbsp;-&nbsp;what&nbsp;happens&nbsp;when&nbsp;stepping&nbsp;into&nbsp;unreasonably&nbsp;deeply&nbsp;nested&nbsp;functions?<br>
&nbsp;&nbsp;<br>
-&nbsp;VOLUME&nbsp;TESTING<br>
&nbsp;&nbsp;App&nbsp;building&nbsp;exercise&nbsp;or&nbsp;try&nbsp;utilizing&nbsp;pdb&nbsp;from&nbsp;some&nbsp;of&nbsp;our&nbsp;internal&nbsp;Python&nbsp;<br>
&nbsp;&nbsp;tools.&nbsp;It&nbsp;would&nbsp;be&nbsp;interesting&nbsp;to&nbsp;use&nbsp;this&nbsp;from&nbsp;gopackage&nbsp;when&nbsp;exceptions&nbsp;<br>
&nbsp;&nbsp;are&nbsp;encountered.&nbsp;<br>
&nbsp;&nbsp;<br>
-&nbsp;INTERNATIONAL&nbsp;ISSUES<br>
&nbsp;&nbsp;As&nbsp;Python&nbsp;is&nbsp;not&nbsp;a&nbsp;localized&nbsp;language&nbsp;and&nbsp;available&nbsp;only&nbsp;in&nbsp;English,&nbsp;we&nbsp;<br>
&nbsp;&nbsp;simply&nbsp;need&nbsp;to&nbsp;confirm&nbsp;that&nbsp;nothing&nbsp;gets&nbsp;localized.&nbsp;&nbsp;This&nbsp;can&nbsp;be&nbsp;done&nbsp;by<br>
&nbsp;&nbsp;running&nbsp;a&nbsp;simple&nbsp;debugbing&nbsp;test&nbsp;against&nbsp;non-English&nbsp;OSes&nbsp;such&nbsp;as&nbsp;Deutsche<br>
&nbsp;&nbsp;Vista.<br>
&nbsp;&nbsp;<br>
-&nbsp;ROBUSTNESS<br>
&nbsp;&nbsp;We'll&nbsp;need&nbsp;a&nbsp;dedicated&nbsp;test&nbsp;or&nbsp;two&nbsp;in&nbsp;the&nbsp;stress&nbsp;lab&nbsp;to&nbsp;ensure&nbsp;there&nbsp;are&nbsp;no<br>
&nbsp;&nbsp;memory&nbsp;leaks.&nbsp;&nbsp;Also,&nbsp;we'll&nbsp;need&nbsp;to&nbsp;keep&nbsp;an&nbsp;eye&nbsp;out&nbsp;for&nbsp;sporadic&nbsp;failures&nbsp;of<br>
&nbsp;&nbsp;debugging&nbsp;tests&nbsp;in&nbsp;SNAP.<br>
&nbsp;&nbsp;<br>
-&nbsp;ERROR&nbsp;TESTING<br>
&nbsp;&nbsp;What&nbsp;happens&nbsp;when&nbsp;invalid&nbsp;commands&nbsp;are&nbsp;fed&nbsp;to&nbsp;the&nbsp;pdb&nbsp;debugger?&nbsp;Is&nbsp;this&nbsp;<br>
&nbsp;&nbsp;handled&nbsp;identically&nbsp;to&nbsp;CPython?<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;Is&nbsp;there&nbsp;any&nbsp;conceivable&nbsp;way&nbsp;to&nbsp;fully&nbsp;break&nbsp;debugging&nbsp;without&nbsp;actually&nbsp;<br>
&nbsp;&nbsp;breaking&nbsp;ipy.exe&nbsp;in&nbsp;general?&nbsp;&nbsp;What&nbsp;happens&nbsp;under&nbsp;the&nbsp;mode&nbsp;<br>
&nbsp;&nbsp;"-D&nbsp;-X:SaveAssemblies"&nbsp;when&nbsp;the&nbsp;current&nbsp;user&nbsp;doesn't&nbsp;have&nbsp;write&nbsp;<br>
&nbsp;&nbsp;permissions&nbsp;on&nbsp;%TMP%?&nbsp;&nbsp;What&nbsp;happens&nbsp;if&nbsp;MS.Scripting.Debugging.dll&nbsp;is&nbsp;<br>
&nbsp;&nbsp;removed&nbsp;outright?<br>
&nbsp;&nbsp;<br>
-&nbsp;USABILITY<br>
&nbsp;&nbsp;There&nbsp;are&nbsp;three&nbsp;major&nbsp;usability&nbsp;issues&nbsp;with&nbsp;debugging:<br>
&nbsp;&nbsp;*&nbsp;IP&nbsp;offers&nbsp;no&nbsp;visualizer&nbsp;for&nbsp;the&nbsp;VS&nbsp;IDE<br>
&nbsp;&nbsp;*&nbsp;we're&nbsp;largely&nbsp;incompatible&nbsp;with&nbsp;CPython's&nbsp;pdb&nbsp;module<br>
&nbsp;&nbsp;*&nbsp;debugging&nbsp;Python&nbsp;code&nbsp;from&nbsp;.NET&nbsp;apps&nbsp;isn't&nbsp;currently&nbsp;possible<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;Test&nbsp;will&nbsp;depend&nbsp;on&nbsp;feedback&nbsp;from&nbsp;the&nbsp;IronPython&nbsp;Mailing&nbsp;List&nbsp;and&nbsp;blogs&nbsp;to<br>
&nbsp;&nbsp;determine&nbsp;more&nbsp;usability&nbsp;issues.&nbsp;Resource&nbsp;permitting,&nbsp;we&nbsp;may&nbsp;also&nbsp;do&nbsp;<br>
&nbsp;&nbsp;app&nbsp;building&nbsp;exercises.<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;The&nbsp;usability&nbsp;goal&nbsp;of&nbsp;this&nbsp;feature&nbsp;is&nbsp;that&nbsp;there&nbsp;are&nbsp;no&nbsp;complaints&nbsp;about<br>
&nbsp;&nbsp;the&nbsp;IP&nbsp;debugging&nbsp;experience&nbsp;from&nbsp;our&nbsp;users.<br>
&nbsp;&nbsp;<br>
-&nbsp;ACCESSIBILITY<br>
&nbsp;&nbsp;As&nbsp;this&nbsp;feature&nbsp;provides&nbsp;no&nbsp;new&nbsp;user&nbsp;interfaces&nbsp;to&nbsp;IronPython.&nbsp;and&nbsp;simply&nbsp;<br>
&nbsp;&nbsp;emits&nbsp;output&nbsp;to&nbsp;the&nbsp;stdout&nbsp;stream&nbsp;of&nbsp;command&nbsp;prompts,&nbsp;there&nbsp;should&nbsp;be&nbsp;no&nbsp;<br>
&nbsp;&nbsp;need&nbsp;to&nbsp;invest&nbsp;into&nbsp;accessibility&nbsp;testing.<br>
&nbsp;&nbsp;<br>
-&nbsp;USER&nbsp;SCENARIOS<br>
&nbsp;&nbsp;It's&nbsp;anticipated&nbsp;that&nbsp;users&nbsp;of&nbsp;this&nbsp;feature&nbsp;will&nbsp;be&nbsp;limited&nbsp;almost&nbsp;exclusively&nbsp;to<br>
&nbsp;&nbsp;developers.&nbsp;Expert&nbsp;Python&nbsp;users&nbsp;will&nbsp;likely&nbsp;prefer&nbsp;using&nbsp;the&nbsp;pdb<br>
&nbsp;&nbsp;module&nbsp;or&nbsp;debugging&nbsp;their&nbsp;applications&nbsp;directly&nbsp;via&nbsp;the&nbsp;"-i"&nbsp;ipy.exe&nbsp;<br>
&nbsp;&nbsp;option.&nbsp;&nbsp;Existing&nbsp;Microsoft&nbsp;customers&nbsp;with&nbsp;little&nbsp;Python&nbsp;background&nbsp;will&nbsp;<br>
&nbsp;&nbsp;probably&nbsp;be&nbsp;more&nbsp;comfortable&nbsp;with&nbsp;the&nbsp;VS&nbsp;IDE&nbsp;debugging&nbsp;experience.&nbsp;Due&nbsp;to&nbsp;<br>
&nbsp;&nbsp;this&nbsp;we&nbsp;must&nbsp;make&nbsp;sure&nbsp;both&nbsp;experiences&nbsp;are&nbsp;great!<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;The&nbsp;types&nbsp;of&nbsp;applications&nbsp;being&nbsp;debugged&nbsp;will&nbsp;likely:<br>
&nbsp;&nbsp;*&nbsp;be&nbsp;non-trivial<br>
&nbsp;&nbsp;*&nbsp;consist&nbsp;of&nbsp;many&nbsp;different&nbsp;modules/packages<br>
&nbsp;&nbsp;*&nbsp;make&nbsp;heavy&nbsp;use&nbsp;of&nbsp;the&nbsp;CPython&nbsp;standard&nbsp;library&nbsp;and/or&nbsp;third&nbsp;party&nbsp;Python<br>
&nbsp;&nbsp;&nbsp;&nbsp;packages<br>
&nbsp;&nbsp;*&nbsp;be&nbsp;debugged&nbsp;often&nbsp;during&nbsp;the&nbsp;application&nbsp;development&nbsp;phase<br>
&nbsp;&nbsp;*&nbsp;be&nbsp;debugged&nbsp;infrequently&nbsp;in&nbsp;a&nbsp;production&nbsp;environment&nbsp;when&nbsp;something&nbsp;goes&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;awry<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;With&nbsp;these&nbsp;constraints&nbsp;in&nbsp;mind,&nbsp;we&nbsp;should&nbsp;try&nbsp;to&nbsp;debug&nbsp;existing&nbsp;major&nbsp;third<br>
&nbsp;&nbsp;party&nbsp;Python&nbsp;applications&nbsp;and/or&nbsp;add&nbsp;debugging&nbsp;support&nbsp;to&nbsp;our&nbsp;own&nbsp;internal<br>
&nbsp;&nbsp;Python&nbsp;tools.<br>
&nbsp;&nbsp;<br>
-&nbsp;BOUNDARIES&nbsp;AND&nbsp;LIMITS<br>
&nbsp;&nbsp;What&nbsp;happens&nbsp;when&nbsp;stepping&nbsp;into&nbsp;a&nbsp;recursive&nbsp;function&nbsp;at&nbsp;the&nbsp;maximum&nbsp;recursion<br>
&nbsp;&nbsp;level?<br>
&nbsp;&nbsp;<br>
-&nbsp;OPERATIONAL&nbsp;ISSUES<br>
&nbsp;&nbsp;None<br>
&nbsp;&nbsp;<br>
-&nbsp;SPECIAL&nbsp;CODE&nbsp;PROFILING&nbsp;AND&nbsp;OTHER&nbsp;METRICS<br>
&nbsp;&nbsp;Overall&nbsp;block&nbsp;coverage&nbsp;of&nbsp;all&nbsp;assemblies&nbsp;with&nbsp;"ipy"&nbsp;or&nbsp;"IronPython"&nbsp;in&nbsp;their<br>
&nbsp;&nbsp;names&nbsp;should&nbsp;be&nbsp;above&nbsp;80%&nbsp;and&nbsp;file&nbsp;coverage&nbsp;should&nbsp;stay&nbsp;above&nbsp;97%.&nbsp;Visual&nbsp;<br>
&nbsp;&nbsp;Studio's&nbsp;mstest&nbsp;will&nbsp;be&nbsp;used&nbsp;to&nbsp;measure&nbsp;code&nbsp;coverage.<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
TEST&nbsp;ENVIRONMENT<br>
&nbsp;<br>
-&nbsp;OPERATING&nbsp;SYSTEMS<br>
&nbsp;&nbsp;32-bit&nbsp;Windows&nbsp;XP<br>
&nbsp;&nbsp;32-bit&nbsp;Windows&nbsp;2003<br>
&nbsp;&nbsp;64-bit&nbsp;Windows&nbsp;2003<br>
&nbsp;&nbsp;32-bit&nbsp;Windows&nbsp;Vista<br>
&nbsp;&nbsp;64-bit&nbsp;Windows&nbsp;Vista<br>
&nbsp;&nbsp;32-bit&nbsp;Windows&nbsp;Vista&nbsp;(Deutsche)<br>
-&nbsp;NETWORKS<br>
&nbsp;&nbsp;General&nbsp;Intranet&nbsp;network&nbsp;connection&nbsp;required&nbsp;for&nbsp;SNAP.<br>
&nbsp;&nbsp;May&nbsp;be&nbsp;other&nbsp;special&nbsp;network&nbsp;needs&nbsp;if&nbsp;remote&nbsp;debugging&nbsp;is/becomes&nbsp;a&nbsp;supported&nbsp;scenario.<br>
-&nbsp;HARDWARE<br>
&nbsp;&nbsp;-&nbsp;MACHINES<br>
&nbsp;&nbsp;&nbsp;&nbsp;At&nbsp;least&nbsp;two&nbsp;machines&nbsp;of&nbsp;every&nbsp;OS&nbsp;variety&nbsp;called&nbsp;out&nbsp;above&nbsp;with&nbsp;at&nbsp;least<br>
&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;gigs&nbsp;of&nbsp;free&nbsp;hard&nbsp;disk&nbsp;space,&nbsp;2&nbsp;gigs&nbsp;of&nbsp;RAM,&nbsp;and&nbsp;a&nbsp;modern&nbsp;CPU<br>
-&nbsp;SOFTWARE<br>
&nbsp;&nbsp;*&nbsp;Visual&nbsp;Studio&nbsp;2008&nbsp;Team&nbsp;System&nbsp;Service&nbsp;Pack&nbsp;1&nbsp;installed&nbsp;to&nbsp;run&nbsp;the&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;test&nbsp;suite<br>
&nbsp;&nbsp;*&nbsp;PowerShell&nbsp;1.0&nbsp;to&nbsp;run&nbsp;any&nbsp;supporting&nbsp;test&nbsp;scripts<br>
&nbsp;&nbsp;*&nbsp;CPython&nbsp;for&nbsp;side-by-side&nbsp;tests<br>
&nbsp;&nbsp;*&nbsp;mdbg<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
UNIQUE&nbsp;TESTING&nbsp;CONCERNS&nbsp;FOR&nbsp;SPECIFIC&nbsp;FEATURES<br>
It&nbsp;should&nbsp;be&nbsp;relatively&nbsp;easy&nbsp;to&nbsp;drive&nbsp;pdb&nbsp;or&nbsp;mdbg&nbsp;via&nbsp;the&nbsp;command&nbsp;line&nbsp;in&nbsp;an<br>
automated&nbsp;fashion,&nbsp;but&nbsp;the&nbsp;same&nbsp;cannot&nbsp;be&nbsp;said&nbsp;about&nbsp;the&nbsp;VS&nbsp;IDE&nbsp;debugging&nbsp;<br>
experience.&nbsp;&nbsp;We'll&nbsp;need&nbsp;to&nbsp;reuse&nbsp;the&nbsp;VS&nbsp;team's&nbsp;automation&nbsp;infrastructure&nbsp;and&nbsp;<br>
ensure&nbsp;any&nbsp;machines&nbsp;running&nbsp;these&nbsp;tests&nbsp;in&nbsp;SNAP&nbsp;are&nbsp;never&nbsp;locked&nbsp;at&nbsp;the&nbsp;<br>
username/password&nbsp;screen&nbsp;which&nbsp;would&nbsp;cause&nbsp;the&nbsp;test&nbsp;to&nbsp;fail.&nbsp;&nbsp;Also,&nbsp;should&nbsp;<br>
visualization&nbsp;ever&nbsp;be&nbsp;a&nbsp;supported&nbsp;scenario,&nbsp;we&nbsp;may&nbsp;have&nbsp;no&nbsp;other&nbsp;option&nbsp;than&nbsp;to&nbsp;<br>
test&nbsp;this&nbsp;manually&nbsp;(note&nbsp;-&nbsp;this&nbsp;needs&nbsp;to&nbsp;be&nbsp;investigated).<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
AREA&nbsp;BREAKDOWN<br>
-&nbsp;CPython's&nbsp;"pdb"&nbsp;module<br>
&nbsp;&nbsp;See&nbsp;debugging.pdb_mod.<br>
&nbsp;<br>
-&nbsp;mdbg&nbsp;tool&nbsp;support<br>
&nbsp;&nbsp;See&nbsp;debugging.mdbg_tool.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
-&nbsp;VS&nbsp;IDE<br>
&nbsp;&nbsp;See&nbsp;debugging.vs.<br>
&nbsp;&nbsp;<br>
-&nbsp;sys&nbsp;module&nbsp;extensions<br>
&nbsp;&nbsp;-&nbsp;sys.settrace<br>
&nbsp;&nbsp;&nbsp;&nbsp;settrace(function)&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;the&nbsp;system's&nbsp;trace&nbsp;function,&nbsp;which&nbsp;allows&nbsp;you&nbsp;to&nbsp;implement&nbsp;a&nbsp;Python&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;source&nbsp;code&nbsp;debugger&nbsp;in&nbsp;Python.&nbsp;The&nbsp;function&nbsp;is&nbsp;thread-specific;&nbsp;for&nbsp;a&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;debugger&nbsp;to&nbsp;support&nbsp;multiple&nbsp;threads,&nbsp;it&nbsp;must&nbsp;be&nbsp;registered&nbsp;using&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;settrace()&nbsp;for&nbsp;each&nbsp;thread&nbsp;being&nbsp;debugged.<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;Trace&nbsp;functions&nbsp;should&nbsp;have&nbsp;three&nbsp;arguments:&nbsp;frame,&nbsp;event,&nbsp;and&nbsp;arg.&nbsp;frame&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;the&nbsp;current&nbsp;stack&nbsp;frame.&nbsp;event&nbsp;is&nbsp;a&nbsp;string:&nbsp;'call',&nbsp;'line',&nbsp;'return',&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;'exception',&nbsp;'c_call',&nbsp;'c_return',&nbsp;or&nbsp;'c_exception'.&nbsp;arg&nbsp;depends&nbsp;on&nbsp;the&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;event&nbsp;type.<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;trace&nbsp;function&nbsp;is&nbsp;invoked&nbsp;(with&nbsp;event&nbsp;set&nbsp;to&nbsp;'call')&nbsp;whenever&nbsp;a&nbsp;new&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;scope&nbsp;is&nbsp;entered;&nbsp;it&nbsp;should&nbsp;return&nbsp;a&nbsp;reference&nbsp;to&nbsp;a&nbsp;local&nbsp;trace&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;to&nbsp;be&nbsp;used&nbsp;that&nbsp;scope,&nbsp;or&nbsp;None&nbsp;if&nbsp;the&nbsp;scope&nbsp;shouldn't&nbsp;be&nbsp;traced.<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;local&nbsp;trace&nbsp;function&nbsp;should&nbsp;return&nbsp;a&nbsp;reference&nbsp;to&nbsp;itself&nbsp;(or&nbsp;to&nbsp;another&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;for&nbsp;further&nbsp;tracing&nbsp;in&nbsp;that&nbsp;scope),&nbsp;or&nbsp;None&nbsp;to&nbsp;turn&nbsp;off&nbsp;tracing&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;that&nbsp;scope.<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;events&nbsp;have&nbsp;the&nbsp;following&nbsp;meaning:<br>
&nbsp;&nbsp;&nbsp;&nbsp;'call'<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;function&nbsp;is&nbsp;called&nbsp;(or&nbsp;some&nbsp;other&nbsp;code&nbsp;block&nbsp;entered).&nbsp;The&nbsp;global&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace&nbsp;function&nbsp;is&nbsp;called;&nbsp;arg&nbsp;is&nbsp;None;&nbsp;the&nbsp;return&nbsp;value&nbsp;specifies&nbsp;the&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;trace&nbsp;function.<br>
&nbsp;&nbsp;&nbsp;&nbsp;'line'<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;interpreter&nbsp;is&nbsp;about&nbsp;to&nbsp;execute&nbsp;a&nbsp;new&nbsp;line&nbsp;of&nbsp;code&nbsp;(sometimes&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;multiple&nbsp;line&nbsp;events&nbsp;on&nbsp;one&nbsp;line&nbsp;exist).&nbsp;The&nbsp;local&nbsp;trace&nbsp;function&nbsp;is&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;called;&nbsp;arg&nbsp;is&nbsp;None;&nbsp;the&nbsp;return&nbsp;value&nbsp;specifies&nbsp;the&nbsp;new&nbsp;local&nbsp;trace&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function.<br>
&nbsp;&nbsp;&nbsp;&nbsp;'return'<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;function&nbsp;(or&nbsp;other&nbsp;code&nbsp;block)&nbsp;is&nbsp;about&nbsp;to&nbsp;return.&nbsp;The&nbsp;local&nbsp;trace&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;is&nbsp;called;&nbsp;arg&nbsp;is&nbsp;the&nbsp;value&nbsp;that&nbsp;will&nbsp;be&nbsp;returned.&nbsp;The&nbsp;trace&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function's&nbsp;return&nbsp;value&nbsp;is&nbsp;ignored.<br>
&nbsp;&nbsp;&nbsp;&nbsp;'exception'<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An&nbsp;exception&nbsp;has&nbsp;occurred.&nbsp;The&nbsp;local&nbsp;trace&nbsp;function&nbsp;is&nbsp;called;&nbsp;arg&nbsp;is&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;tuple&nbsp;(exception,&nbsp;value,&nbsp;traceback);&nbsp;the&nbsp;return&nbsp;value&nbsp;specifies&nbsp;the&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;local&nbsp;trace&nbsp;function.<br>
&nbsp;&nbsp;&nbsp;&nbsp;'c_call'<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;C&nbsp;function&nbsp;is&nbsp;about&nbsp;to&nbsp;be&nbsp;called.&nbsp;This&nbsp;may&nbsp;be&nbsp;an&nbsp;extension&nbsp;function&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or&nbsp;a&nbsp;builtin.&nbsp;arg&nbsp;is&nbsp;the&nbsp;C&nbsp;function&nbsp;object.<br>
&nbsp;&nbsp;&nbsp;&nbsp;'c_return'<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;C&nbsp;function&nbsp;has&nbsp;returned.&nbsp;arg&nbsp;is&nbsp;None.<br>
&nbsp;&nbsp;&nbsp;&nbsp;'c_exception'<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;C&nbsp;function&nbsp;has&nbsp;thrown&nbsp;an&nbsp;exception.&nbsp;arg&nbsp;is&nbsp;None.<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;Note&nbsp;that&nbsp;as&nbsp;an&nbsp;exception&nbsp;is&nbsp;propagated&nbsp;down&nbsp;the&nbsp;chain&nbsp;of&nbsp;callers,&nbsp;an&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;'exception'&nbsp;event&nbsp;is&nbsp;generated&nbsp;at&nbsp;each&nbsp;level.<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;-&nbsp;sys.gettrace<br>
&nbsp;&nbsp;&nbsp;&nbsp;Get&nbsp;the&nbsp;trace&nbsp;function&nbsp;as&nbsp;set&nbsp;by&nbsp;settrace().<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;-&nbsp;sys.call_tracing<br>
&nbsp;&nbsp;&nbsp;&nbsp;call_tracing(func,&nbsp;args)&nbsp;-&gt;&nbsp;object<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;Call&nbsp;func(*args),&nbsp;while&nbsp;tracing&nbsp;is&nbsp;enabled.&nbsp;&nbsp;The&nbsp;tracing&nbsp;state&nbsp;is<br>
&nbsp;&nbsp;&nbsp;&nbsp;saved,&nbsp;and&nbsp;restored&nbsp;afterwards.&nbsp;&nbsp;This&nbsp;is&nbsp;intended&nbsp;to&nbsp;be&nbsp;called&nbsp;from<br>
&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;debugger&nbsp;from&nbsp;a&nbsp;checkpoint,&nbsp;to&nbsp;recursively&nbsp;debug&nbsp;some&nbsp;other&nbsp;code.<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
TEST&nbsp;CASE&nbsp;STRUCTURE<br>
Test&nbsp;cases&nbsp;will&nbsp;be&nbsp;stored&nbsp;directly&nbsp;in&nbsp;the&nbsp;pydoc&nbsp;strings&nbsp;of&nbsp;the&nbsp;functions&nbsp;<br>
implementing&nbsp;the&nbsp;tests.&nbsp;&nbsp;In&nbsp;turn,&nbsp;the&nbsp;modules&nbsp;containing&nbsp;these&nbsp;test&nbsp;case&nbsp;<br>
functions&nbsp;can&nbsp;be&nbsp;found&nbsp;under&nbsp;the&nbsp;"debugging"&nbsp;test&nbsp;package.&nbsp;Generating&nbsp;pydoc&nbsp;for<br>
the&nbsp;"debugging"&nbsp;test&nbsp;package&nbsp;and&nbsp;all&nbsp;sub-modules/sub-packages&nbsp;will&nbsp;generate&nbsp;<br>
this&nbsp;test&nbsp;plan.<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
SPEC&nbsp;REVIEW&nbsp;ISSUES<br>
There&nbsp;is&nbsp;no&nbsp;IronPython&nbsp;spec&nbsp;for&nbsp;this&nbsp;feature.&nbsp;&nbsp;Any&nbsp;issues&nbsp;observed&nbsp;in&nbsp;the&nbsp;pdb&nbsp;<br>
module,&nbsp;which&nbsp;acts&nbsp;as&nbsp;a&nbsp;spec,&nbsp;and&nbsp;reproducible&nbsp;under&nbsp;CPython&nbsp;should&nbsp;be&nbsp;reported&nbsp;<br>
to&nbsp;<a href="http://bugs.python.org">http://bugs.python.org</a>.<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
TEST&nbsp;TOOLS<br>
One&nbsp;of&nbsp;the&nbsp;following:<br>
-&nbsp;reuse&nbsp;CLR's&nbsp;debugging&nbsp;test&nbsp;infrastructure.&nbsp;&nbsp;NOTE:&nbsp;this&nbsp;is&nbsp;only&nbsp;suitable&nbsp;for&nbsp;<br>
&nbsp;&nbsp;mdbg&nbsp;tests<br>
-&nbsp;write&nbsp;our&nbsp;own&nbsp;new&nbsp;side-by-side&nbsp;testing&nbsp;infrastructure&nbsp;entirely&nbsp;in&nbsp;Python<br>
&nbsp;&nbsp;so&nbsp;that&nbsp;we&nbsp;can&nbsp;eventually&nbsp;contribute&nbsp;pdb&nbsp;tests&nbsp;back&nbsp;to&nbsp;CPython<br>
-&nbsp;write&nbsp;our&nbsp;own&nbsp;new&nbsp;side-by-side&nbsp;testing&nbsp;infrastructure&nbsp;in&nbsp;any<br>
&nbsp;&nbsp;language&nbsp;using&nbsp;any&nbsp;framework.&nbsp;<a href="http://sourceforge.net/projects/pexpect/">http://sourceforge.net/projects/pexpect/</a>&nbsp;could<br>
&nbsp;&nbsp;be&nbsp;useful&nbsp;as&nbsp;would&nbsp;be&nbsp;PowerShell<br>
-&nbsp;re-use&nbsp;some&nbsp;internal&nbsp;tool&nbsp;that&nbsp;might&nbsp;not&nbsp;be&nbsp;redistributable&nbsp;on&nbsp;CodePlex<br>
&nbsp;<br>
which&nbsp;will&nbsp;minimally&nbsp;need&nbsp;to&nbsp;support&nbsp;the&nbsp;following&nbsp;features:<br>
-&nbsp;ability&nbsp;to&nbsp;ignore&nbsp;lines&nbsp;(matching&nbsp;some&nbsp;regular&nbsp;expression)&nbsp;entirely<br>
-&nbsp;ability&nbsp;to&nbsp;substitute&nbsp;strings&nbsp;in&nbsp;lines<br>
-&nbsp;ability&nbsp;to&nbsp;run&nbsp;arbitrary&nbsp;commands&nbsp;(e.g.,&nbsp;not&nbsp;limited&nbsp;to&nbsp;"ipy.exe&nbsp;..."&nbsp;or&nbsp;"mdbg&nbsp;...")<br>
-&nbsp;ability&nbsp;to&nbsp;match&nbsp;the&nbsp;current&nbsp;output&nbsp;against&nbsp;a&nbsp;reference&nbsp;output&nbsp;stored&nbsp;on&nbsp;disk<br>
-&nbsp;ability&nbsp;to&nbsp;run&nbsp;two&nbsp;or&nbsp;more&nbsp;arbitrary&nbsp;commands&nbsp;and&nbsp;compare&nbsp;their&nbsp;output&nbsp;against&nbsp;each&nbsp;other<br>
&nbsp;<br>
As&nbsp;per&nbsp;usual,&nbsp;the&nbsp;plan&nbsp;is&nbsp;to&nbsp;automate&nbsp;all&nbsp;tests&nbsp;using&nbsp;the&nbsp;SNAP&nbsp;checkin&nbsp;system<br>
and&nbsp;VS's&nbsp;mstest&nbsp;tool.<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
SMOKE&nbsp;TEST&nbsp;(ACCEPTANCE&nbsp;TEST,&nbsp;BUILD&nbsp;VERIFICATION,&nbsp;ETC.)<br>
&nbsp;<br>
pdb&nbsp;acceptance&nbsp;test<br>
&nbsp;&nbsp;&nbsp;&nbsp;ipy.exe&nbsp;-c&nbsp;"import&nbsp;pdb"<br>
&nbsp;<br>
mdbg<br>
&nbsp;&nbsp;&nbsp;&nbsp;TODO&nbsp;(July&nbsp;30,&nbsp;2009)<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
Visual&nbsp;Studio&nbsp;IDE<br>
&nbsp;&nbsp;&nbsp;&nbsp;TODO&nbsp;(July&nbsp;30,&nbsp;2009)<br>
&nbsp;<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
AUTOMATED&nbsp;TESTS<br>
pdb&nbsp;and&nbsp;mdbg&nbsp;tests&nbsp;will&nbsp;be&nbsp;100%&nbsp;automated&nbsp;in&nbsp;SNAP.<br>
&nbsp;<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
MANUAL&nbsp;TESTS<br>
Setup&nbsp;testing&nbsp;will&nbsp;be&nbsp;manual&nbsp;for&nbsp;now,&nbsp;and&nbsp;we'll&nbsp;eventually&nbsp;move&nbsp;to&nbsp;automated&nbsp;<br>
testing&nbsp;in&nbsp;SNAP&nbsp;using&nbsp;PowerShell&nbsp;support&nbsp;scripts.<br>
&nbsp;<br>
Visual&nbsp;Studio&nbsp;IDE&nbsp;testing&nbsp;is&nbsp;also&nbsp;manual&nbsp;for&nbsp;now.&nbsp;&nbsp;Sometime&nbsp;in&nbsp;the&nbsp;<br>
future&nbsp;we'll&nbsp;migrate&nbsp;to&nbsp;using&nbsp;the&nbsp;VS&nbsp;team's&nbsp;automation&nbsp;technologies.<br>
&nbsp;<br>
Manual&nbsp;testing&nbsp;will&nbsp;only&nbsp;occur&nbsp;for&nbsp;major&nbsp;IP&nbsp;releases&nbsp;and&nbsp;the&nbsp;<br>
instructions&nbsp;will&nbsp;be&nbsp;documented&nbsp;on&nbsp;the&nbsp;internal&nbsp;IP&nbsp;website&nbsp;under&nbsp;the&nbsp;<br>
"Release&nbsp;Process"&nbsp;wiki.<br>
&nbsp;<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
REGRESSION&nbsp;TESTS<br>
Regression&nbsp;tests&nbsp;will&nbsp;be&nbsp;added&nbsp;to&nbsp;existing&nbsp;test&nbsp;modules&nbsp;under&nbsp;the&nbsp;"debugging"&nbsp;<br>
package&nbsp;before&nbsp;any&nbsp;CodePlex&nbsp;or&nbsp;internal&nbsp;bug&nbsp;dealing&nbsp;with&nbsp;debugging&nbsp;is&nbsp;closed.<br>
As&nbsp;such,&nbsp;the&nbsp;majority&nbsp;of&nbsp;these&nbsp;regressions&nbsp;will&nbsp;be&nbsp;automated&nbsp;and&nbsp;run&nbsp;on&nbsp;every<br>
developer&nbsp;or&nbsp;test&nbsp;checkin.&nbsp;&nbsp;Developers&nbsp;should&nbsp;preferably&nbsp;add&nbsp;a&nbsp;regression&nbsp;test<br>
for&nbsp;every&nbsp;bug&nbsp;fix,&nbsp;and&nbsp;Test&nbsp;will&nbsp;verify&nbsp;the&nbsp;sufficiency&nbsp;of&nbsp;the&nbsp;test,&nbsp;extending<br>
it&nbsp;if&nbsp;necessary.<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
BUG&nbsp;BASHES<br>
While&nbsp;considered&nbsp;to&nbsp;be&nbsp;extremely&nbsp;useful,&nbsp;we&nbsp;have&nbsp;no&nbsp;current&nbsp;plans&nbsp;for&nbsp;internal&nbsp;<br>
bug&nbsp;bashes&nbsp;on&nbsp;this&nbsp;feature.&nbsp;&nbsp;Quite&nbsp;simply&nbsp;put,&nbsp;we&nbsp;need&nbsp;more&nbsp;IronPython&nbsp;headcount&nbsp;<br>
and/or&nbsp;interest&nbsp;from&nbsp;the&nbsp;rest&nbsp;of&nbsp;Visual&nbsp;Studio&nbsp;Languages&nbsp;to&nbsp;accomplish&nbsp;this.<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
BUG&nbsp;REPORTING<br>
All&nbsp;bug&nbsp;reports&nbsp;on&nbsp;this&nbsp;feature&nbsp;which&nbsp;do&nbsp;not&nbsp;include&nbsp;information&nbsp;consided&nbsp;to&nbsp;be<br>
Microsoft&nbsp;confidential&nbsp;are&nbsp;to&nbsp;be&nbsp;filed&nbsp;at&nbsp;<br>
<a href="http://ironpython.codeplex.com/WorkItem/AdvancedList.aspx">http://ironpython.codeplex.com/WorkItem/AdvancedList.aspx</a>&nbsp;under&nbsp;the&nbsp;"Debugging"<br>
component&nbsp;using&nbsp;the&nbsp;bug&nbsp;template&nbsp;found&nbsp;at&nbsp;<br>
<a href="http://ironpython.codeplex.com/Wiki/View.aspx?title=IronPython%20Bug%20Template">http://ironpython.codeplex.com/Wiki/View.aspx?title=IronPython%20Bug%20Template</a>.<br>
Bugs&nbsp;will&nbsp;be&nbsp;triaged&nbsp;on&nbsp;a&nbsp;weekly&nbsp;basis&nbsp;by&nbsp;the&nbsp;entire&nbsp;IronPython&nbsp;Team.<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
PLAN&nbsp;CONTINGENCIES<br>
Without&nbsp;at&nbsp;least&nbsp;one&nbsp;additional&nbsp;SDET&nbsp;or&nbsp;other&nbsp;test&nbsp;tasks&nbsp;getting&nbsp;dropped,&nbsp;only&nbsp;<br>
phases&nbsp;I&nbsp;and&nbsp;II&nbsp;of&nbsp;this&nbsp;plan&nbsp;are&nbsp;implementable&nbsp;prior&nbsp;to&nbsp;the&nbsp;release&nbsp;of&nbsp;<br>
IP&nbsp;2.6&nbsp;RTM.<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
EXTERNAL&nbsp;DEPENDENCIES<br>
We&nbsp;depend&nbsp;on&nbsp;the&nbsp;DLR&nbsp;for&nbsp;their&nbsp;implementation&nbsp;of&nbsp;Microsoft.Scripting.Debugging.dll&nbsp;<br>
which&nbsp;forms&nbsp;the&nbsp;basis&nbsp;of&nbsp;our&nbsp;support&nbsp;of&nbsp;the&nbsp;CPython&nbsp;pdb&nbsp;module.&nbsp;&nbsp;This&nbsp;plan&nbsp;<br>
assumes&nbsp;that&nbsp;this&nbsp;DLL&nbsp;has&nbsp;been&nbsp;adequately&nbsp;tested.<br>
&nbsp;<br>
There&nbsp;are&nbsp;no&nbsp;teams/projects&nbsp;we&nbsp;know&nbsp;about&nbsp;which&nbsp;are&nbsp;taking&nbsp;a&nbsp;dependency&nbsp;on&nbsp;<br>
IP's&nbsp;debugging&nbsp;functionality.<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
HEADCOUNT&nbsp;REQUIREMENTS<br>
At&nbsp;least&nbsp;two&nbsp;FTE&nbsp;IronPython&nbsp;SDETs&nbsp;will&nbsp;be&nbsp;needed&nbsp;to&nbsp;implement&nbsp;this&nbsp;test&nbsp;plan&nbsp;<br>
fully:&nbsp;one&nbsp;to&nbsp;handle&nbsp;general,&nbsp;day-to-day&nbsp;IP&nbsp;test&nbsp;operations<br>
(i.e.,&nbsp;passes/investigations/issues/regressions,&nbsp;etc),&nbsp;and&nbsp;another&nbsp;to&nbsp;work&nbsp;exclusively&nbsp;on&nbsp;the&nbsp;<br>
debugging&nbsp;feature.&nbsp;&nbsp;A&nbsp;loose&nbsp;approximation&nbsp;is&nbsp;that&nbsp;the&nbsp;SDET&nbsp;working&nbsp;full-time<br>
on&nbsp;debugging&nbsp;would&nbsp;need&nbsp;anywhere&nbsp;from&nbsp;one&nbsp;to&nbsp;three&nbsp;months&nbsp;to&nbsp;completely&nbsp;<br>
implement&nbsp;all&nbsp;aspects&nbsp;of&nbsp;this&nbsp;plan.&nbsp;&nbsp;This&nbsp;estimate&nbsp;varies&nbsp;considerably&nbsp;<br>
depending&nbsp;upon&nbsp;how&nbsp;much&nbsp;emphasis&nbsp;is&nbsp;to&nbsp;be&nbsp;given&nbsp;to&nbsp;pdb&nbsp;versus&nbsp;mdbg&nbsp;versus&nbsp;the&nbsp;<br>
VS&nbsp;IDE.&nbsp;&nbsp;Having&nbsp;a&nbsp;second&nbsp;full-time&nbsp;SDET&nbsp;on&nbsp;the&nbsp;debugging&nbsp;feature&nbsp;would&nbsp;have&nbsp;a<br>
not&nbsp;positive&nbsp;effect&nbsp;as&nbsp;the&nbsp;division&nbsp;of&nbsp;labor&nbsp;between&nbsp;testing&nbsp;command-line&nbsp;IP<br>
debugging&nbsp;support&nbsp;and&nbsp;VS&nbsp;IDE&nbsp;support&nbsp;is&nbsp;quite&nbsp;clear.<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
PRODUCT&nbsp;SUPPORT<br>
IP&nbsp;is&nbsp;not&nbsp;a&nbsp;supported&nbsp;product&nbsp;in&nbsp;the&nbsp;conventional&nbsp;Microsoft&nbsp;sense.&nbsp;<br>
Support&nbsp;for&nbsp;IP&nbsp;is&nbsp;freely&nbsp;given&nbsp;directly&nbsp;by&nbsp;the&nbsp;IP&nbsp;Team&nbsp;via&nbsp;the&nbsp;<br>
IronPython&nbsp;Mailing&nbsp;List.<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
DROP&nbsp;PROCEDURES<br>
All&nbsp;developer&nbsp;checkins&nbsp;must&nbsp;go&nbsp;through&nbsp;the&nbsp;SNAP&nbsp;checkin&nbsp;system&nbsp;=&gt;&nbsp;IronPython<br>
sources&nbsp;are&nbsp;always&nbsp;in&nbsp;a&nbsp;"good"&nbsp;state.&nbsp;&nbsp;Test&nbsp;will&nbsp;build&nbsp;IP&nbsp;from&nbsp;sources<br>
using&nbsp;developer&nbsp;instructions.<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
RELEASE&nbsp;PROCEDURES<br>
See&nbsp;the&nbsp;IP&nbsp;"Release&nbsp;Process"&nbsp;wiki&nbsp;on&nbsp;the&nbsp;internal&nbsp;IP&nbsp;website.<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
ALIAS/NEWSGROUPS&nbsp;AND&nbsp;COMMUNICATION&nbsp;CHANNELS<br>
Major&nbsp;changes&nbsp;around&nbsp;IP&nbsp;debugging&nbsp;support&nbsp;should&nbsp;be&nbsp;announced&nbsp;on&nbsp;the&nbsp;<br>
IronPython&nbsp;Mailing&nbsp;List,&nbsp;users@lists.ironpython.com.<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
REGULAR&nbsp;MEETINGS<br>
-&nbsp;FEATURE&nbsp;TEAM&nbsp;MEETINGS<br>
&nbsp;&nbsp;There&nbsp;is&nbsp;no&nbsp;feature&nbsp;team&nbsp;for&nbsp;debugging.<br>
-&nbsp;PROJECT&nbsp;TEST&nbsp;TEAM&nbsp;MEETINGS<br>
&nbsp;&nbsp;IronPython&nbsp;weekly&nbsp;team&nbsp;meeting.&nbsp;Day&nbsp;and&nbsp;time&nbsp;are&nbsp;subject&nbsp;to&nbsp;change.<br>
&nbsp;&nbsp;We'll&nbsp;triage&nbsp;debugging&nbsp;work&nbsp;items&nbsp;during&nbsp;this&nbsp;meeting&nbsp;and&nbsp;discuss&nbsp;IP&nbsp;<br>
&nbsp;&nbsp;debugging&nbsp;issues&nbsp;as&nbsp;necessary.<br>
-&nbsp;FEATURE&nbsp;TEAM&nbsp;TEST&nbsp;MEETINGS<br>
&nbsp;&nbsp;There&nbsp;is&nbsp;no&nbsp;feature&nbsp;test&nbsp;team&nbsp;for&nbsp;debugging.<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
DECISION&nbsp;MAKING&nbsp;PROCEDURES<br>
Decisions&nbsp;on&nbsp;this&nbsp;feature&nbsp;will&nbsp;be&nbsp;driven&nbsp;by&nbsp;the&nbsp;following&nbsp;criteria:<br>
-&nbsp;Microsoft&nbsp;business&nbsp;needs<br>
-&nbsp;IronPython&nbsp;Community&nbsp;feature&nbsp;requests<br>
-&nbsp;Previous&nbsp;decisions&nbsp;made&nbsp;by&nbsp;CPython.&nbsp;E.g.,&nbsp;the&nbsp;pdb&nbsp;module<br>
-&nbsp;Existing&nbsp;debugging&nbsp;support&nbsp;in&nbsp;Microsoft&nbsp;products&nbsp;such&nbsp;as&nbsp;VS<br>
In&nbsp;the&nbsp;event&nbsp;a&nbsp;conscensus&nbsp;cannot&nbsp;be&nbsp;reached&nbsp;by&nbsp;the&nbsp;team&nbsp;on&nbsp;something,&nbsp;Jim<br>
Hugunin's&nbsp;input&nbsp;should&nbsp;be&nbsp;sought.<br>
&nbsp;<br>
Miscellaneous&nbsp;Procedures:<br>
-&nbsp;the&nbsp;gopackage&nbsp;tool&nbsp;is&nbsp;responsible&nbsp;for&nbsp;validating&nbsp;all&nbsp;source&nbsp;pushes&nbsp;to&nbsp;<br>
&nbsp;&nbsp;CodePlex<br>
-&nbsp;at&nbsp;least&nbsp;two&nbsp;IP&nbsp;team&nbsp;members&nbsp;need&nbsp;to&nbsp;sanity&nbsp;check&nbsp;public&nbsp;builds<br>
&nbsp;&nbsp;before&nbsp;they&nbsp;can&nbsp;be&nbsp;released<br>
-&nbsp;full&nbsp;test&nbsp;pass&nbsp;signoff&nbsp;on&nbsp;this&nbsp;feature&nbsp;will&nbsp;be&nbsp;needed&nbsp;for&nbsp;every&nbsp;public,&nbsp;signed<br>
&nbsp;&nbsp;release<br>
-&nbsp;bug&nbsp;triages&nbsp;will&nbsp;be&nbsp;performed&nbsp;with&nbsp;all&nbsp;three&nbsp;software&nbsp;disciplines&nbsp;in&nbsp;attendance<br>
-&nbsp;development&nbsp;design&nbsp;should&nbsp;be&nbsp;reviewed&nbsp;both&nbsp;by&nbsp;the&nbsp;PM&nbsp;and&nbsp;Test&nbsp;disciplines<br>
&nbsp;<br>
-------------------------------------------------------------------------------<br>
NOTES<br>
&nbsp;<br>
MDBG&nbsp;TEST&nbsp;CASE&nbsp;WRITING&nbsp;TIPS<br>
-&nbsp;use&nbsp;different&nbsp;language&nbsp;structures&nbsp;as&nbsp;the&nbsp;last&nbsp;line&nbsp;in&nbsp;the&nbsp;Python&nbsp;file<br>
-&nbsp;when&nbsp;only&nbsp;one&nbsp;line&nbsp;lives&nbsp;inside&nbsp;a&nbsp;block&nbsp;of&nbsp;code,&nbsp;but&nbsp;the&nbsp;code&nbsp;should&nbsp;not&nbsp;be<br>
&nbsp;&nbsp;stepped&nbsp;through<br>
-&nbsp;correct&nbsp;step-through:&nbsp;no&nbsp;extra&nbsp;step-throughs&nbsp;or&nbsp;lack&nbsp;thereof<br>
-</tt></p>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#aa55cc">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Package Contents</strong></big></font></td></tr>
    
<tr><td bgcolor="#aa55cc"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><table width="100%" summary="list"><tr><td width="25%" valign=top><a href="debugging.mdbg_tool.html"><strong>mdbg_tool</strong>&nbsp;(package)</a><br>
</td><td width="25%" valign=top><a href="debugging.pdb_mod.html"><strong>pdb_mod</strong>&nbsp;(package)</a><br>
</td><td width="25%" valign=top><a href="debugging.vs.html"><strong>vs</strong>&nbsp;(package)</a><br>
</td><td width="25%" valign=top></td></tr></table></td></tr></table>
</body></html>