Analyzing Requirements and Defining Microsoft.NET Solution Architectures, Part V...
Developing Specifications.
The aim of this series of articles is to provide an overview of issues surrounding the architecture of .NET Solutions. In doing so it is following Microsoft’s recommended approach and, in particular, looking at the requirements of the related Microsoft certification exam (70-300), which itself is one of the requirements for the MCSD .NET qualification. The main reference for this series of articles is the Que publication: 'Exam Cram2 .NET Solution Architectures'.
We've looked at the following thus far:
Article I: phase 1 of the process, the Envisioning Phase.
Article II: started on phase 2 (gathering and analysing requirements) focussing on business requirements.
Article III: continued with phase 2, focussing on user requirements and issues surrounding globalisation and localisation of your application.
Article IV: finished off phase 2, focussing on operational and infrastructure requirements.
In this article we look at phase 3, considering issues around developing specifications for the proposed system.
During this phase system requirements are transformed into functional specifications. This is one of the documents produced by the design stage of the project lifecycle, also known as the planning phase in MSF. Planning or design also encompasses Conceptual, Logical and Physical Design. Thus 'developing specifications' which we've somewhat artificially split into a separate topic is performed in parallel with the other design activities with functional specifications and other design artefacts (which we'll visit in forthcoming articles) being the results.
Some of the goals of the functional specification are to:
As an introduction to the planning/ design phase begins we'll look at some of the general areas you will need to consider.
Firstly, a couple of important higher level questions:
We'll now introduce a collection of other areas for consideration during the design/ planning phase of the project lifecycle, several of which we'll revisit in subsequent articles from slightly differing angles.
You must determine who and what you want to monitor, under what circumstances these events are trapped and kept, and where the information gathered by the process is to be stored.
Minimally you should be planning for techniques to monitor system problems. You might also want to record the application user’s activities for the purpose of maintaining statistical information. In a secure environment you should track attempts at breaching security. You may also want to track system usage.
For such activity storage you have a variety of tools at your disposal: event logs, server level apps like SQLServer, IIS and the Repository.
As an aside, and in case you are unfamiliar with the repository, the Microsoft Repository is an automation application that stores data for tools. The Repository engine object model includes classes that expose their properties and behaviour through interfaces. The Repository contains objects and their relationships as well as their respective property values.
Monitoring and logging system information essentially breaks down in the following manner:
Other forms of monitoring and logging are equally important within the environment but fall more on the shoulders of the network administrator rather than the developer.
Note that the log information must be regularly reviewed or there is little point in capturing it!
At each tier appropriate error handling should be implemented, preferably via structured exception handling.
Different error types should be considered: syntax, logic, possible user errors (e.g. data entry) and system malfunctions.
Data integration is possible through ODBC and OLEDB. Mainframe integration is possible through SNA (System Network Architecture) technologies, such as COMTI (Component Object Model Transaction Integrator). Intranet, extranet and intranet integration can be performed using DCOM or ASP.NET technologies.
You can expect to see several questions on globalisation in the exam. The most efficient way to increase the global reach of your application is via cultures/ locales – sets of rules and standards that are specific to a given language/ geographical area, e.g. date/ time formatting.
Consider what form(s) of data storage are appropriate for your application? Standard SQLServer? XML files?
What's appropriate for your solution particularly with regard to your user population and the sensitivity of information you are handling?
Client-side
Use resources on the client computer/ HTTP connection: viewstate, hidden form fields, querystring, cookies.
Server-side
Use resources on the server computer: session, cache, application.
Different forms of data validation exist of various complexities:
Will XCOPY suffice or do you need an Installer application. Related issues:
Security should be considered throughout the project lifecycle, particularly when it come to the application design, e.g. file system, data access, network, ASP.NET application security, code access, security and data privacy, signing and sealing which we’ll consider in a little further detail.
Data privacy is chiefly a matter of maintaining secure communication channels and encryption.
Encryption options:
SSL is the dominant option when it comes to web application security.
Signing: you can sign with a strong name thus guaranteeing the identity. The user still needs to decide whether to trust the identity. Or you use a digital certificate to sign the assembly. This provides additional verification from the 3rd party supplier of the digital certificate.
Sealing: encrypts the message contents with a key that only the sender and receiver understand. In Microsoft environments this is normally achieved with the Kerberos protocol. Sealing is also defined in the Microsoft Global XML Architecture (GXA) by using SOAP standards.
Secure access is achieved via three methods already discussed in this series of articles: authentication, data encryption and authorisation.
The system's day-to-day operations should be planned with administrative and maintenance roles clearly defined such as:
Supporting the system after it has been deployed should include plans for finalising documentation for end users, administrative staff and the support team. Maintenance plans and upgrade procedures are also a key part of supporting the system after it is deployed.
The following should be undertaken at various stages, with the following being categories you might encounter (some overlapping):
Testing will normally be closely tied to the use of a source code control utility such as Sourcesafe. For example a developer may unit test their code module, update it in Sourcesafe and the test team will then undertake integration and regression testing.
Finally, the more you get uses involved the more chance there is that the project will be a success. Getting user 'buy in' to a project will increase the likelihood of their accepting it. Firstly it is likely to better meet their requirements. Secondly, they'll feel like they have contributed to the project and are thus more likely to accept the solution. So pay attention to the user requirements captured when you come to the specification and involve them as much as is possible.
Exam Cram 2 .NET Solution Architectures
Cornish et al.
Que
http://msdn.microsoft.com/architecture/
Analyzing requirements and Defining Microsoft .NET Architectures
Microsoft