dev302 - visual studio team system building robust and reliable software eric lee program manager...
Post on 11-Jan-2016
216 Views
Preview:
TRANSCRIPT
DEV302 - Visual Studio Team System
Building Robust and Reliable Software
DEV302 - Visual Studio Team System
Building Robust and Reliable Software
Eric LeeEric LeeProgram ManagerProgram ManagerMicrosoft CorporationMicrosoft Corporation
Development TeamsDevelopment Teams
InfrastructureInfrastructureArchitectArchitect
SolutionSolutionArchitectArchitect
Project ManagerProject Manager
DeveloperDeveloper
TesterTester
End UserEnd User
A day in the life …A day in the life …
Write CodeWrite Code
Write Unit TestsWrite Unit Tests
Review WorkReview Work
Run Code AnalysisRun Code Analysis
Operations!Operations!
DeveloperDeveloper
A day in the life …A day in the life …
Write CodeWrite Code
Write Unit TestsWrite Unit Tests
Review WorkReview Work
Run Code AnalysisRun Code Analysis
Operations!Operations!
DeveloperDeveloper
Microsoft ResearchMicrosoft Research
Internal ToolsInternal Tools
Visual Studio Team SystemVisual Studio Team System
Change Management
Work Item Tracking
Reporting
Project Site
Visual Studio
Team Foundation
Integration Services
Project Management
Pro
cess
an
d A
rch
itect
ure
Pro
cess
an
d A
rch
itect
ure
G
uid
an
ceG
uid
an
ce
Dynamic Code Analyzer
Visual Studio
Team Architect
Static Code Analyzer
Code Profiler
Unit Testing
Code Coverage
Visio and UML Modeling
Team Foundation Client
VS Pro
Class Modeling
Load Testing
Manual Testing
Test Case Management
Application Modeling
Logical Infra. Modeling
Deployment Modeling
Visual Studio
Team DeveloperVisual Studio
Team Test
Vis
ual S
tud
io In
du
stry
V
isu
al S
tud
io In
du
stry
Part
ners
Part
ners
Visual Studio Team SystemVisual Studio Team System
Change Management
Work Item Tracking
Reporting
Project Site
Visual Studio
Team Foundation
Integration Services
Project Management
Pro
cess
an
d A
rch
itect
ure
Pro
cess
an
d A
rch
itect
ure
G
uid
an
ceG
uid
an
ce
Vis
ual S
tud
io In
du
stry
V
isu
al S
tud
io In
du
stry
Part
ners
Part
ners
Dynamic Code Analyzer
Visual Studio
Team Architect
Static Code Analyzer
Code Profiler
Unit Testing
Code Coverage
Visio and UML Modeling
Team Foundation Client
VS Pro
Class Modeling
Load Testing
Manual Testing
Test Case Management
Application Modeling
Logical Infra. Modeling
Deployment Modeling
Visual Studio
Team DeveloperVisual Studio
Team TestDynamic Code Analyzer
Static Code Analyzer
Code Profiler
Unit Testing
Code Coverage
A day in the life …A day in the life …
Write CodeWrite Code
Write Unit TestsWrite Unit TestsReview WorkReview Work
Run Code AnalysisRun Code Analysis
Operations!Operations!
DeveloperDeveloper
Test Driven DevelopmentTest Driven DevelopmentJim NewkirkJim Newkirk
TDD TenantsTDD Tenants
Never write a single line of code unless Never write a single line of code unless you have a failing unit testyou have a failing unit test
Eliminate DuplicationEliminate Duplication
Test ListTest List
Task Based Task Based 4-8 hour duration4-8 hour duration
15-20 minute exercise at beginning 15-20 minute exercise at beginning
Brainstorm a list of unit testsBrainstorm a list of unit tests
Do not get hung up on completeness, Do not get hung up on completeness, you can always add more lateryou can always add more later
Describes completion requirements Describes completion requirements
Red/Green/RefactorRed/Green/Refactor
Write a test for new capability
Start
Compile
Fix compile errors
Run the testAnd see it fail
Write the code
Run the testAnd see it pass
Refactor as needed
Test Driven Development Test Driven Development (TDD)(TDD)
RecapRecap
Integrate testing into the development Integrate testing into the development processprocess
Testability is a primary motivation Testability is a primary motivation during developmentduring development
The Visual Studio Team System The Visual Studio Team System provides an ideal environment for provides an ideal environment for doing Test Driven Developmentdoing Test Driven Development
A day in the life …A day in the life …
Write CodeWrite Code
Write Unit TestsWrite Unit TestsReview WorkReview Work
Run Code AnalysisRun Code Analysis
Operations!Operations!
DeveloperDeveloper
A day in the life …A day in the life …
Write CodeWrite Code
Write Unit TestsWrite Unit Tests
Review WorkReview WorkRun Code AnalysisRun Code Analysis
Operations!Operations!
DeveloperDeveloper
Code CoverageCode Coverage
How effective are my unit tests?How effective are my unit tests?
Am I done testing?Am I done testing?
Am I executing all the relevant parts of Am I executing all the relevant parts of my application?my application?
Code CoverageCode Coverage
void PurchaseItem(int itemID)
{
if (itemID == 0) {
throw new Exception();
} else
{ ProcessOrder(itemID);
}
}
UnitTest()
{
PurchaseItem(1);
}
{
if (itemID == 0) {
throw new Exception();
} else
{ ProcessOrder(itemID);
}
}
Code CoverageCode Coverage
UnitTest()
{
PurchaseItem(1);
}
void PurchaseItem(int itemID)
{
{
throw new Exception();
} else
{ ProcessOrder(itemID);
}
}
void PurchaseItem(int itemID)
if (itemID == 0)if (itemID == 0)
Code CoverageCode Coverage
UnitTest()
{
PurchaseItem(1);
}
{
{
throw new Exception();
}
{ ProcessOrder(itemID);
}
}
void PurchaseItem(int itemID)
if (itemID == 0)if (itemID == 0)
Code CoverageCode Coverage
UnitTest()
{
PurchaseItem(1);
}else
{
{
throw new Exception();
}
{ ProcessOrder(itemID);
}
}
void PurchaseItem(int itemID)
if (itemID == 0)if (itemID == 0)
Code CoverageCode Coverage
UnitTest()
{
PurchaseItem(1);
}else
ProcessOrder(itemID);
{
{
throw new Exception();
}
{ ProcessOrder(itemID);
}
}
void PurchaseItem(int itemID)
if (itemID == 0)if (itemID == 0)
Code CoverageCode Coverage
UnitTest()
{
PurchaseItem(1);
}else
ProcessOrder(itemID);
throw new Exception();
Visual Studio Team SystemVisual Studio Team SystemCode CoverageCode Coverage
Code CoverageCode Coverage
PredictabilityPredictability
Effective testingEffective testing
Drives up qualityDrives up quality
Catch ‘blind spots’ right in Visual Catch ‘blind spots’ right in Visual StudioStudio
A day in the life …A day in the life …
Write CodeWrite Code
Write Unit TestsWrite Unit Tests
Review WorkReview WorkRun Code AnalysisRun Code Analysis
Operations!Operations!
DeveloperDeveloper
A day in the life …A day in the life …
Write CodeWrite Code
Write Unit TestsWrite Unit Tests
Review WorkReview Work
Run Code AnalysisRun Code AnalysisOperations!Operations!
DeveloperDeveloper
Code AnalysisCode AnalysisString path = “”;
for (int i = 0; i < 100; i++)
{ path += “Value”;}
return path;
.EXE
Intermediate Representation
Code AnalysisCode AnalysisString path = “”;
for (int i = 0; i < 100; i++)
{ path += “Value”;}
return path;
.EXE
Intermediate Representation
Static Code Analysis
Code AnalysisCode AnalysisString path = “”;
for (int i = 0; i < 100; i++)
{ path += “Value”;}
return path;
.EXE
Intermediate Representation
Application Verifier/Code
Profiling
Static Code AnalysisStatic Code Analysis
Bad code is syntactically correctBad code is syntactically correct
Different naming conventionsDifferent naming conventions
Manual code reviews can be Manual code reviews can be inconsistentinconsistent
Static Code AnalysisStatic Code Analysis
Defects
Security
Performance
Design
Policy
String path = “”;
for (int i = 0; i < 100; i++)
{ path += “Value”;}
return path;
Static Code AnalysisStatic Code Analysis
Defects
Security
Performance
Design
PolicyIntermediate Representation
Static Code AnalysisStatic Code Analysis
Defects
Security
Performance
Design
PolicyIntermediate Representation
Static Code AnalysisStatic Code Analysis
Don’t call String.Concat inside of loopsDon’t call String.Concat inside of loops
Prefer StringBuilderPrefer StringBuilder
String path = “”;
for (int i = 0; i < 100; i++)
{ path += “Value”;}
return path;
for (int i = 0; i < 100; i++)
{ path.Append(Value”);}
return path.ToString();
Visual Studio Team SystemVisual Studio Team SystemStatic Code AnalysisStatic Code Analysis
Static Code AnalysisStatic Code Analysis
Catch bugs at their sourceCatch bugs at their source
Capable of complex analysisCapable of complex analysis
Leverages lessons learnedLeverages lessons learned
Turn habit into ‘rules’Turn habit into ‘rules’
Application VerifierApplication Verifier
‘‘Works on my machine’Works on my machine’
‘‘It used to work’It used to work’
Runtime issuesRuntime issues
Application VerifierApplication Verifier
Adventure WorksAdventure Works
Defects
Security
Logo
App Compat
Visual Studio Team SystemVisual Studio Team SystemApplication VerifierApplication Verifier
Application VerifierApplication Verifier
Catch critical errors at runtimeCatch critical errors at runtime
Handle/Heap verification issuesHandle/Heap verification issues
‘‘Breaks’ into Visual Studio Team Breaks’ into Visual Studio Team System at the source of the problemSystem at the source of the problem
Code ProfilerCode Profiler
Constant hardware updatesConstant hardware updates
Poor end-user experiencePoor end-user experience
Low throughput of transactionsLow throughput of transactions
SamplingSampling
Adventure WorksAdventure Works
Login() 1Login() 1
Browse() 1
Login() 1
Browse() 2
Login() 1
Browse() 3
Login() 1
Browse() 4
Login() 1
Browse() 5
Login() 1
Browse() 5
Details() 1
Login() 1
Browse() 5
Details() 1
CheckOut()1
Login() 1
Browse() 5
Details() 1
CheckOut()1
Logout() 1
SamplingSampling
Adventure WorksAdventure Works
Login() 1
Browse() 5
Details() 1
CheckOut()1
Logout() 1
Browse() 5
InstrumentationInstrumentation
Adventure WorksAdventure Works
InstrumentationInstrumentation
Basic BlocksAdventure WorksAdventure Works
InstrumentationInstrumentation
Basic BlocksAdventure WorksAdventure Works
Timing Probes
InstrumentationInstrumentation
Adventure WorksAdventure Works
Browse() 10 msBrowse() 10 ms
Init() 20 ms
Browse() 10 ms
Init() 20 ms
String.Concat() 5060 ms
Browse() 10 ms
Init() 20 ms
String.Concat() 5060 ms
Cleanup() 5 ms
InstrumentationInstrumentation
Adventure WorksAdventure Works
Browse() 10 ms
Init() 20 ms
String.Concat() 5060 ms
Cleanup() 5 ms
String.Concat() 5060 ms
Visual Studio Team SystemVisual Studio Team SystemCode ProfilerCode Profiler
Code ProfilerCode Profiler
Do more with lessDo more with less
Great customer experienceGreat customer experience
A day in the life …A day in the life …
Write CodeWrite Code
Write Unit TestsWrite Unit Tests
Review WorkReview Work
Run Code AnalysisRun Code AnalysisOperations!Operations!
DeveloperDeveloper
A day in the life …A day in the life …
Write CodeWrite Code
Write Unit TestsWrite Unit Tests
Review WorkReview Work
Run Code AnalysisRun Code Analysis
Operations!Operations!
DeveloperDeveloper
AvicodeAvicodeMOM Configuration Pack WizardMOM Configuration Pack Wizard
Visual Studio Team SystemVisual Studio Team System
Change Management
Work Item Tracking
Reporting
Project Site
Visual Studio
Team Foundation
Integration Services
Project Management
Pro
cess
an
d A
rch
itect
ure
Pro
cess
an
d A
rch
itect
ure
G
uid
an
ceG
uid
an
ce
Vis
ual S
tud
io In
du
stry
V
isu
al S
tud
io In
du
stry
Part
ners
Part
ners
Dynamic Code Analyzer
Visual Studio
Team Architect
Static Code Analyzer
Code Profiler
Unit Testing
Code Coverage
Visio and UML Modeling
Team Foundation Client
VS Pro
Class Modeling
Load Testing
Manual Testing
Test Case Management
Application Modeling
Logical Infra. Modeling
Deployment Modeling
Visual Studio
Team DeveloperVisual Studio
Team TestDynamic Code Analyzer
Static Code Analyzer
Code Profiler
Unit Testing
Code Coverage
Other SessionsOther SessionsDayDay TimeTime SessionSession TopicTopic
TuesdayTuesday 12:1512:15 DEVPNL2DEVPNL2 Visual Studio Team System PartnersVisual Studio Team System Partners
TuesdayTuesday 1:301:30 DEV 300DEV 300 Project ManagementProject Management
TuesdayTuesday 1:301:30 ARC 304ARC 304 Bridging the Gap Between IT and Bridging the Gap Between IT and DevDev
TuesdayTuesday 3:153:15 ARC 400ARC 400 Developing SOAsDeveloping SOAs
WednesdayWednesday 8:308:30 DEV 301DEV 301 Software TestingSoftware Testing
ThursdayThursday 1:301:30 DEV 302DEV 302 Advanced DevelopmentAdvanced Development
ThursdayThursday 3:153:15 DEV 303DEV 303 Enterprise-Class Source ControlEnterprise-Class Source Control
FridayFriday 9:009:00 ARC 312ARC 312 Designing for DeploymentDesigning for Deployment
FridayFriday 12:1512:15 DEVPNL5DEVPNL5 Implementing Software ProcessesImplementing Software Processes
http://msdn.microsoft.com/vstudio/enterprisehttp://msdn.microsoft.com/vstudio/enterprise
Attend a free chat or web castAttend a free chat or web casthttp://www.microsoft.com/communities/chats/default.mspxhttp://www.microsoft.com/communities/chats/default.mspx http://www.microsoft.com/usa/webcasts/default.asphttp://www.microsoft.com/usa/webcasts/default.asp
List of newsgroupsList of newsgroupshttp://communities2.microsoft.com/http://communities2.microsoft.com/communities/newsgroups/en-us/default.aspxcommunities/newsgroups/en-us/default.aspx
MS Community SitesMS Community Siteshttp://www.microsoft.com/communities/default.mspxhttp://www.microsoft.com/communities/default.mspx
Locate Local User GroupsLocate Local User Groupshttp://www.microsoft.com/communities/usergroups/default.mspxhttp://www.microsoft.com/communities/usergroups/default.mspx
Community sitesCommunity siteshttp://www.microsoft.com/communities/related/default.mspxhttp://www.microsoft.com/communities/related/default.mspx
Q1:Q1: Overall satisfaction with the sessionOverall satisfaction with the session
Q2:Q2: Usefulness of the informationUsefulness of the information
Q3:Q3: Presenter’s knowledge of the subjectPresenter’s knowledge of the subject
Q4:Q4: Presenter’s presentation skillsPresenter’s presentation skills
Q5:Q5: Effectiveness of the presentationEffectiveness of the presentation
Please fill out a session evaluation on CommNetPlease fill out a session evaluation on CommNet
© 2004 Microsoft Corporation. All rights reserved.This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
top related