How Microsoft Helps Software Development Succeed

As one of the largest software companies in the world, Microsoft focuses strongly on helping developer teams to be successful. This document gives an overview of the vast range of Microsoft tools, development environments, frameworks, code samples, and guidance that cover all aspects of the software development lifecycle; and helps individuals and teams design, build, and deploy great software.

Figure 1 shows the software development lifecycle, from initial collection of customer requirements to the release of the software and its continued iterative development, maintenance, and modification post deployment. 

software development lifecycle

Figure 1. The software development lifecycle

The following sections concentrate on each of the primary areas of the software development lifecycle, and will help you understand the Microsoft technologies and tools that are available, and how these can help you at each stage of the design and development process.

Planning and Requirements Analysis

While this is typically the task related to architecting, development teams will have responsibility for converting the customer's requirements into a practical design that can be implemented within the cost and time constraints, and will work well on the available hardware and infrastructure.

Collecting and analyzing requirements is the first stage, and typically this involves tools and applications such as the Microsoft Office programs Word, Excel, Visio, Project, and more. The requirements may be provided as documents, diagrams, schematics, models, and descriptions of the runtime environment. Microsoft Project and Microsoft Excel are ideal tools for planning timescales and costing development projects at this initial stage. Figure 2 shows an example of planning a project using Microsoft Project.

Project planning and costing tools 

Figure 2. Microsoft Project planning and costing tools

Architecture, Design, and Modeling

 When it comes to more detailed design, Microsoft Visual Studio includes a range of tools that make designing the architecture of an application and creating model and deployment dependencies easier. It can be used to model the overall design and component distribution, and then overlay this on a model of the hardware infrastructure to validate the practicality of the design. It can also be used to generate component dependency and interconnection diagrams, and model database schemas as part of the detailed plan. Figure 3 shows the model designer in Visual Studio 2010.

Architectural and modeling tools in Visual Studio 

Figure 3. Architectural and modeling tools in Visual Studio

Microsoft also provides guidance that helps in the design phase. This includes general guidance on architectural good practice, information on the typical designs for different types of applications, and help on evaluating the tradeoffs necessary to ensure that the software meets requirements. For example, Figure 4 shows a typical contemporary architecture for applications. Not all applications will contain all of these features.

Typical layered application architecture

Figure 4. Typical layered application architecture

More detailed guidance on designing applications to use specific technologies is also available, ranging from advice on network and infrastructure requirements to more specific information on deployment and administration factors that may affect the design. For example, the documentation for Windows operating systems includes guidance on network layout, server placement, system requirements, and deployment considerations for applications that will run on the server. All of these are important when designing software applications that will run on the Microsoft platform.

Development Technologies, Tools, and Languages

Microsoft provides a range of tools and development environments designed to make writing code for the many technologies and application types easier and more efficient. The choice of development environment depends on the type of application being built, and the code languages used. Figure 5 shows some of the tools and development environments, technologies, and development languages available from Microsoft, and the types of applications that they target.

Some of the technologies, tools, and languages available to developers 

Figure 5. Some of the technologies, tools, and languages used during development

Although there are many different combinations of technologies and languages, most applications are built to run on the Microsoft .NET Framework. This is a layer on top of the operating system and hardware that provides a more unified platform for code. Irrespective of the .NET code language used (such as C# or Visual Basic), the code compiles to a standard format called Microsoft Intermediate Language (MSIL) that is executed by the runtime components of the .NET Framework. Figure 6 shows the architecture and process.

Code compilation and execution on the .NET Framework

Figure 6. Code compilation and execution on the .NET Framework

This standardization of the development and runtime framework makes it easier to write code because it hides much of the complexity of the underlying systems. It also makes it easier to work in different languages as they all use the same standard set of code libraries, objects, and programming interfaces.

Writing, Compiling, and Testing the Code

In terms of development, Microsoft Visual Studio is the primary tool. It is available in a range of versions, including free Express editions for specific types of applications. Visual Studio provides an integrated development environment (IDE) that can be used to create projects and solutions, write code, compile and run the code, debug the code, and resolve errors. Visual Studio contains templates for many typical types of applications, and additional types are supported by downloadable templates and frameworks. Figure 7 shows some of these types of applications.

Selecting an application project type in Visual Studio 2010 

Figure 7. Selecting an application project type in Visual Studio 2010

Writing Code in Visual Studio

Visual Studio includes many features that help the process of development. These include pop-up lists of objects, classes, and class members; integrated help features and documentation; wizards for common tasks; and full support for customization and plugging in additional tools. Visual Studio is robust enough to satisfy all core development tasks, adding their favorite plug-ins to further improve their productivity when creating applications. Figure 8 shows the integrated development environment (IDE) for creating Silverlight applications in Visual Studio.

Developing a Silverlight application in Visual Studio 2010 

Figure 8. Developing a Silverlight application in Visual Studio 2010

The application types available in Visual Studio include much more than the common web, desktop, cloud, and phone applications. For example, it can be used to develop class libraries, frameworks, components and extensions for Office application, workflow-based applications, and SharePoint applications. Figure 9 shows the development environment for SharePoint applications.

Developing a SharePoint application in Visual Studio 2010 

Figure 9. Developing a SharePoint application in Visual Studio 2010

Most business applications use a database as the information source, and Visual Studio includes tools that make it easy to create databases, design the schemas for tables, create relationships, and even populate the tables with sample data for testing. It can connect to most of the common database servers, including the full range of Microsoft SQL Server database editions. Figure 10 shows the way that Visual Studio helps to write stored procedures for a database.

Working with a database in Visual Studio 20101 

Figure 10. Working with a database in Visual Studio 2010

When developing, you often have to interface with components and frameworks written by other development teams, or acquired from third party suppliers. Understanding the interfaces and being able to investigate the object structure of these components and frameworks is useful. Visual Studio includes features for browsing classes, objects, components, and frameworks; including the classes that make up the .NET class library. Figure 11 shows the Visual Studio.

Visual Studio 2010 Object Browser 

Figure 11. The Visual Studio 2010 Object Browser

Debugging, Tracing, and Testing in Visual Studio

Depending on the version, Visual Studio also includes tools to run unit tests, profile the code to maximize runtime efficiency, view the way code runs on the underlying hardware, For example, Figure 12 shows the Visual Studio runtime code analysis features in action.

Visual Studio 2010 showing analysis of code as it executes 

Figure 12. Microsoft Visual Studio 2010 showing analysis of code as it executes

Visual Studio also helps you discover and fix errors in the code that occur both during code compilation and at runtime. The compiler generates details warning and error messages that help you avoid common types of error, and update the code to resolve errors. The detection mechanism is powerful and configurable, so you can choose which types of warnings that do not prevent the code compiling, but may affect performance, are notified. Figure 13 shows the error list that Visual Studio displays when compiling an application.

The Microsoft Visual Studio 2010 compiler Error List 

Figure 13. The Microsoft Visual Studio 2010 compiler Error List

One of the most difficult tasks when debugging an application is finding where an error occurs. As well as the common line-by-line execution mode that allows stepping though the code as it executes, Visual Studio 2010 includes the IntelliTrace feature that allows you to collect a great deal more information about the execution process and repeat the circumstances that caused the error. Figure 14 shows the Visual Studio IntelliTrace feature.

Visual Studio IntelliTrace in action 

Figure 14. Visual Studio IntelliTrace in action

Deploying Applications with Visual Studio

Visual Studio contains a range of tools and features that help to build setup and deployment packages, and deploy applications directly. Compilation for release includes capabilities to specify all of the information required for the assemblies and resources; and it can obfuscate the code to make it much harder to reverse engineer, create Microsoft Installer (MSI) packages, create help files, and build many other types of deployment packages. For applications that are deployed directly to a runtime host, such as web applications, Visual Studio includes the web deployment tools, shown in Figure 15.

Web deployment options in Visual Studio 2010 

Figure 15. Web deployment options in Visual Studio 2010

Other Code Development Tools

Other development tools and environments are available for more specific tasks, application types, or specific development scenarios. For example, Microsoft WebMatrix (shown in Figure 16) is a free tool for creating web applications and websites using the ASP.NET Web Pages technology. WebMatrix can write applications in C#, Visual Basic, or other non-Microsoft languages such as PHP. It also provides an integrated environment that includes features for working with databases and deploying the application to a web hosting provider.

WebMatrix development environment for web applications and websites 

Figure 16. WebMatrix development environment for web applications and websites

For developing applications that run on Windows Phone, you can use the free Windows Phone Developer Tools. This includes a specially tailored version of Visual Studio, and other tools such as an XNA development environment for games programming, Expression Blend for creating interactive interfaces, utilities for deploying applications to the phone, and templates that integrate with the full versions of Visual Studio. Figure 17 shows a Windows Phone Silverlight application under development.

Developing a Windows Phone Silverlight application 

Figure 17. Developing a Windows Phone Silverlight application

Expression Blend is one of a family of tools aimed at application interface and graphics designers, but these tools are commonly used for development tasks. For example, Expression Blend provides a great development environment for Silverlight applications for the desktop, web, and phone that include transitions and other graphical compositional and movement effects. Figure 18 shows development of a Windows Phone application in Expression Blend.

Building a Windows Phone Silverlight application interface in Expression Blend 

Figure 18. Building a Windows Phone Silverlight application interface in Expression Blend

Amongst the many other developer tools are those to check the validity of code, perform runtime analysis and diagnostics, and create deployment and documentation packages. Even applications such as Internet Explorer contain developer tools that can be useful when debugging and testing web applications and client-side script code.   

Finally, Microsoft provides a full range of documentation and guidance on all of the development tools, technologies, and languages. Microsoft Developer Network (MSDN) is the primary source of information forindividuals and teams performing development tasks. This includes conceptual documentation to help understand the technologies, and focused guidance on using the tools and languages. All of the portals for the different technologies include videos, "How-To" step-by-step guides, sample code, and reference implementations that make learning about technology easier and quickly bring developers up to speed.

Reviews, Project and Code Management, and Reporting

When working as part of a team, individuals must share and act on information across the team and project management. Microsoft provides tools and guidance to help individuals be successful in a team environment, speed up development, and manage the development lifecycle. The primary tools for this are Team Foundation Server (TFS) and SharePoint Server. Both of these are repositories that can manage versioning, provide access across different networks, and help to keep a project on target.

Team Foundation Server is primarily aimed at development and project management tasks. It contains a wealth of functions for creating code repositories with full versioning, check-out and check-in capability, and code forks and links to enable regular builds of the entire application. It also provides work items based on configurable templates, workflow, reporting, and many other related features. It is an ideal environment for large and complex applications during development, but works just as well for smaller teams and projects.

Team members connect to TFS from within Visual Studio or other compatible tools, which automatically manage check-out and check-in of files, read-only access to files, and the capability to create and connect to snapshots of the repository (as shown in Figure 19).

Connecting to Team Foundation Server form Visual Studio 2010 

Figure 19. Connecting to Team Foundation Server form Visual Studio 2010

During the initial application design phase and throughout the development lifecycle, various team members create and maintain stores in TFS that describe the tasks, feedback, plans, and any other useful information about the project. The stories can include time approximations and completion information so that both individual workers and managers can see at a glance the state of the project development cycle. Figure 20 shows the stories overview page for a project in TFS.

Using stories in TFS to monitor and manage the development cycle 

Figure 20. Using stories in TFS to monitor and manage the development cycle

TFS can also provide a wealth of information on overall progress, the build status, and bugs in the software through a series of portals. It is particularly useful for monitoring the quality of the software in terms of the test plans and faults found in the software at any stage of the development process. Figure 21 shows some of the graphical reports that TFS can generate.

Using TFS to monitor the quality of software under development 

Figure 21. Using TFS to monitor the quality of software under development

SharePoint is the second type of repository available from Microsoft. It is primarily a document and information repository, and is more suited to managing documentation for projects. It offers integration capabilities with many Microsoft Office applications, making it an ideal repository for architects, designers, and project managers to use throughout the software development lifecycle. It also provides a wealth of built-in and downloadable repository templates, comprehensive capabilities for customization, and availability across networks and the Internet for wide access from distributed teams. Figure 22 shows SharePoint used as a documentation repository.

SharePoint as a document and information repository 

Figure 22. SharePoint as a document and information repository

Summary

Microsoft provides a huge range of software and tools to support the software design, development, and deployment processes. For architects and designers, tools are available to model applications and runtime environments, manage documentation, and interact with stakeholders.

For development tasks, integrated and stand-alone specialist development tools and environments provide the highest level of support, ease of use, and extendibility to simplify as far as possible all stages of the process. Tools are available for writing code and working with databases; and for compiling, testing, tracing, and debugging code.

Other tools and environments for use throughout the development process include code and document repositories, project management tools, and reporting tools. In addition, Microsoft provides a vast range of different types of guidance for architecting, developing, administrating, and testing tasks to help design, build, and run better software.