Tracking development and staging environment - windows

I'm working in a small development shop that maintains a fairly large number of custom software products. They have 3 environments -- Test, Staging, and Production where software is run from. The vast majority are web applications (ASP.NET) while a few are scheduled applications or Windows Services. The applications all interact with one another via ASP.NET Web Services, a handful of WCF services, and DLL libraries, and all share a significant number of databases.
The management team is looking for a solution to keep track of all of the instances of software running on the different servers -- Application A depends on B and C, and uses Database X with login credentials LMNOP etc.
Are there any off-the-shelf products out there that can help with this task, or are we better off developing something from scratch?

I personally use CruiseControl but I plan to use TeamCity with RedGate for DB source control. I also have 3 environments (team city is free up to 3).

Related

Is the Microsoft Lab Management usable for native projects or .Net only?

Microsoft are pushing their ALM (Application Lifecycle Management) tools such as TFS very hard but often gloss over the fact that major features are only available for managed (.Net) code. eg: Intellitrace is c# and VB-only
Are there any benefits to using Lab Management with a pure native application?
We have two major apps, one with a Java UI and the other MFC. There have been suggestions that the Lab Manager will be broadly rolled-out in the company but I have strong doubts that we will gain anything.
According to this March 2011 table of test automation support, Java is not supported and MFC only for basic controls.
[edit] Prior to the latest vNext release, we couldn't use their TestManager for unit tests unless we wrap our C++ code in .Net layers with C++/CLI unit tests.
So it seems that none of the various ways of testing code can be used for our apps.
Absolutely! Lab Management could help out quite a bit for all sorts of non-.NET applications. It's great for setting up development or test environments made up of multiple machines. You can use the data collectors with Microsoft Test Managers to collect rich data from each of the machines in your environments when you are running test cases or performing exploratory testing. Whenever you find a bug, you can file a bug and each of the data collectors on each of the machines in the environment under test will be queried and attached to a pretty nice bug report for you. You can snapshot, rollback, etc. You can automate test runs and deployments of builds to environments.
You can use Lab Management even with shared or dedicated environments per testers. If your environments require it, you could even use network isolation between the environments to make sure clones of the environments don't cause problems with other clones.
Lab Management also helps if you need to test your apps against multiple configurations. Imagine you need to test your MFC or Java app on Windows XP, Vista, Server 2003, etc. You could spin up individual environments with the different configurations and test against each of them appropriately. Microsoft Test Manager can keep track of pass/fail results for your test cases in each of those configurations as well.
You're absolutely right though. Certain data collectors that come out of the box won't work well or not at all with non-.NET applications. However, the data collector system is completely extensible. If there is something you want to automatically gather, you can create your own custom data collector for use in Lab Management.
There's a lot you can take advantage in Lab Management with testing against non-.NET applications.
Unit tests for native C++ are supported in Visual Studio 11 so there is no need for wrappers. see this article. http://msdn.microsoft.com/en-us/library/hh270864(v=VS.110).aspx

Is there a self-hosted web-based web UI prototyping tool?

The question says it all, we know most of the hosted web-based UI prototyping tools out there, but we would like to have ours hosted on our own internal servers, preferably with on-line multi-user collaboration functionality (i.e. users modifying the prototype, making comments, etc. in parallel).
Any suggestions will be appreciated.
Sketchflow (in the top-end version of Expression Blend from Microsoft) meets almost all your criteria. It ain't cheap, but it is very powerful.
The deployment package of a Sketchflow build can just be placed on an internal server (no IIS required to deploy).
Multiple users can overlay their comments and pen drawings over the top of the screens. Their feedback is packaged as a unit and sent back. All feedback can then be loaded back into the Expression Blend project and the feedback from 1 or more users viewed overlaid on the correct screens.
It does not meet your multiple-user authoring requirement though, but as they say "too many cooks...".
Most tools are either desktop based or hosted. Seen very few which offer a downloadble multi user version. iRise is one choice with the editor as a desktop product and a centralized server for sharing among users. The budget is typically from $50K to $250K. A similar option exists for Serena composer as well, not sure of the price though.
Both iRise and Serena are not real collaborative tools, the central server is only for sharing the finished prototypes and getting feedback.
If the requirement is for a completely web based multi user tool then 10screens can be an option - http://www.10screens.com. The same product available on the site in a hosted mode can be downloaded and installed on your own servers.

cloud and existing enterprise applications technologies

What is the significance of new cloud platforms and databases like Microsoft Azure and Amazon EC2?
Is it a replacement for enterprise application platforms like .net or Java EE in a cloud environment?
Is it neccessary to use these or other cloud specific platforms, or can we implement .net or Java EE on a cloud based environment?
I think the comparison is not correct to some extent. Cloud is a deployment issue and J2EE Technologies is a development issue.
The idea of clouds was to take away the hardware costs for existing application which have been build on J2EE or .NET or any other application development framework.
Yes when you deploy your applications in clud, there are some changes and some deployment strategies which would enforce some change in your application but application would still be J2EE or .NET as was the case before
I see two kinds of clouds, those that offer their own programming model and those that host applications developed in an existing programming model. Give the choice I would prefer the latter, I don't want to redevelop my existing apps and I want to sure that I'm free to host my app on my choice of host.
As it happens I'm a Java EE developer and there are Java EE clouds, so I'm OK. So for me Azure has little immediate significance other that to reinforce the message that serious vendors see a future for cloud computing.
Now, what is Azure? Is it a hoster of .NET apps, or is it offering a different programmng model? Or Both? I'm finding it hard to determine from the various web sites and reviews. There's talk of .NET programming an C# and VB and maybe other languages and using existing tooling, so my current guess is that .NET developers will be at home, but perhaps need to adapt their style.
My tentative opinion: if I'm a doing .NET I'll keep doing it and expect to find a suitable cloud one day. If Azure is that cloud (and I'd want to find out) well and good, if not then I'll wait for something better.
In a serious enterprise space I don't need to back a winner in a market place that's still evolving. I probably will have sensitive apps that I'm not going to put in a public cloud anyway, so sticking to Java EE suits me fine, I've got private cloud capabilities if I need them.
EC2 is kind of a hybrid; at its root it's a hosted virtual machine service that lets you choose the operating system you want (most Linux distributions, Solaris or a couple of versions of Windows Server) and then configure them as you like without restrictions.
On top of that, Amazon has built services such as Simple DB, Simple Queue Service and Simple Notification Service that make it into more of a development platform, but it's important to note that these run cross-platform and can be programmed to in multiple languages.
A link to Windows Azure's Tomcat Solution Accelerator can be found on MSDN's "Windows Azure Platform" landing page where you will also find links to the following:
Windows Azure SDK for Java
Windows Azure SDK for PHP
Windows Azure Tools for Eclipse
AppFabric SDK for Java™ Developers
AppFabric SDK for Ruby Developers
AppFabric SDK for PHP Developers
As well as...
MySQL PHP Solution Accelerator
MediaWiki MySQL Solution Accelerator

Microsoft Team System value within only a Dev Team

Microsoft Team System appears to be a great platform for process-oriented systems implementation, however if you strip out access for the BAs, PM and Business Users and just purely use it within a Dev team does it have any more value than just using Visual Studio Professional, SourceSafe, a Defect Tracking Tool and a continuous integration server like CruiseControl or TeamCity?
Yes. Every replacement technology you've mentioned is something that is supported by the Team System package (either in this release or the next). All of these components are designed to integrate and work with each other in TFS. This is a high priority of the TFS team for all components. The result is a set of features which in most cases seamlessly integrate with each other.
I'm not familiar with several of the other projects you mentioned but it's unlikely that they integrate as well with each other as the corresponding TFS components. This is not to say they have no integration or perform poorly as products. Just that they are not designed ground up to work with each other. Hence the interaction will not be as crisp as the TFS components.
Is this valuable enough to continue using TFS? Don't know because it would be highly dependent on how much you value this integration.
One of the big selling points for TFS for my team is the coherency it provides to our overall product life cycle. We do allow BAs, PMs and Business Users to have certain levels of access to TFS, but even if we did not, the product would still be of great value to use. The ability to manage our workflows within TFS and enforce consistency across the development team is great.
Some of the features that TFS provides that we use: security, reporting, work flow management, integrated builds, email alerts, branching / merging.
Could you pull it off with a hodge-podge of other tools? Probably, but it wouldn't be as easy to manage and maintain and you probably wouldn't be able to pull out the kind of data necessary for reporting and tracking the way you can with TFS.
On a sidenote, if your counting on Visual SourceSafe as your repository I would highly suggest looking elsewhere. From personal and business experience, I can attest that it cannot be counted on as a stable/robust repository.
My thoughts.
Sure it has value. There are a ton of client features only in the Team SKUs (don't let the name fool you -- they are primarily just the new "super premium" kitchen-sink versions, that also have the nice bonus of including a server CAL for TFS.) Exact specs available here: http://www.microsoft.com/visualstudio/en-us/products/teamsystem/default.mspx
Looking specifically at the collaboration features, again there's clear value in a system whose components were design to "just work" with each other. The setup is streamlined (though it has a ways to go); the UIs are consistent and accessible from each other; the backend feeds a unified reporting/analysis service. If you have a large team, the overall perf/scalability also far exceeds what the typical OSS suite is capable of at the moment.
The question is whether it's worth the $$ to you. Why use Visual Studio Professional instead of SharpDevelop? Why SourceSafe instead of Git? Why not Notepad and specially labeled folders?
All of the commercial products are commercial for a reason (ok, maybe not SourceSafe!). If you want something with a broad feature set, tight integration, well-defined support & testing lifecycle, good fit & finish, etc then it's usually worthwhile to spend the $$ and let your development staff get on with their work. If you don't mind doing setup & troubleshooting yourself, switching between several applications as part of the development workflow, losing the ability to query & report on team statistics as a whole, etc then by all means go open source -- many OSS dev tools are very solid nowadays.

Is Azure an Operating System or a Framework?

MS is calling Azure an Operating System.
To me, it feels much more like a framework. I am having a bit of trouble defining the two separately. I have a general intuition, but I am not articulate enough to really say if Azure is really an OS or just a framework sitting on top of Operating Systems.
I've just been listening to the Deep Fried Bytes Podcast #20 wherein, they interview Steve Marx, the Windows Azure Program Manager, and he explains it all.
From what I can gather thus far (haven't finished all the podcast) it works like this:
Microsoft have a ton servers running Hyper-V which can run virtualized instances of windows server 2008
You can start/stop/reboot an arbitrary number of these virtual win2k8 servers using an API, and you get charged only based on what you use.
The platform which controls this start/stop/reboot/crash recovery/provisioning/billing/etc is Windows Azure. They jokingly refer to it as the 'windows server overlord'
You define roles for these VM's, which can be either
web-role, in which you can run any .NET code hosted inside IIS (eg: ASP.NET, httpHandler, etc),
worker-role, in which you run some standalone .NET code for background processing and so on
Perhaps more roles once they come out of CTP
You can use the windows azure API's to start/stop them - eg: "Give me 5 instances of my web role and 3 instances of my worker role"
Data gets stored by their storage services, and can be
Blobs (I'm assuming something like S3)
Queues (I'm assuming something like SQS)
Tables - marx mentioned a 'web scale non-relational data store' - something like SimpleDB or BigTable
These VM's have a bunch of other services available to them - Live Services for windows live stuff, .NET services, SQL Services if you need a full-blown SQL server for relational data, Sharepoint services if you want sharepoint, etc.
All this stuff rolled up together is the Windows Azure Services Platform
My take - Giant Marketing fail. Confusion abounds. MS seem to always do this kind of 'roll it all up into a single buzzword' thing though (.NET 5 years ago, anyone?). I really wish they would stop it
Another way I have heard Windows Azure pitched is "infrastructure as a service". Meaning that you don't have to think about the operating system in the same way as if using a server or VM that you tweak.
What is Windows Azure? seems to answer this, perhaps?
Quoting #daok:
Description
The Azure™ Services Platform (Azure) is an internet-scale cloud services platform hosted in Microsoft data centers, which provides an operating system and a set of developer services that can be used individually or together. Azure’s flexible and interoperable platform can be used to build new applications to run from the cloud or enhance existing applications with cloud-based capabilities. Its open architecture gives developers the choice to build web applications, applications running on connected devices, PCs, servers, or hybrid solutions offering the best of online and on-premises.
Azure reduces the need for up-front technology purchases, and it enables developers to quickly and easily create applications running in the cloud by using their existing skills with the Microsoft Visual Studio development environment and the Microsoft .NET Framework. In addition to managed code languages supported by .NET, Azure will support more programming languages and development environments in the near future. Azure simplifies maintaining and operating applications by providing on-demand compute and storage to host, scale, and manage web and connected applications. Infrastructure management is automated with a platform that is designed for high availability and dynamic scaling to match usage needs with the option of a pay-as-you-go pricing model. Azure provides an open, standards-based and interoperable environment with support for multiple internet protocols, including HTTP, REST, SOAP, and XML.
Features
Key components of the Azure Services Platform include the following:
Windows Azure for service hosting and management, low-level scalable storage, computation and networking
Microsoft SQL Services for a wide range of database services and reporting
Microsoft .NET Services which are service-based implementations of familiar .NET Framework concepts such as workflow and access control
Live Services for a consistent way for users to store, share and synchronize documents, photos, files and information across their PCs, phones, PC applications and Web sites
Microsoft SharePoint Services and Microsoft Dynamics CRM Services for business content, collaboration and rapid solution development in the cloud.
Technically, Azure is a set of services running on vanilla Windows 2008 Servers running virtually inside of Hyper-V. Your app runs on those services, abstracted away from the actual operating system. Because of this, they are calling Azure a "Cloud Operating System". Unfortunately, these answers don't answer my question... so...
I re-formatted my question to something more generic: What is the difference between an OS and a Framework?
Windows Azure is both, a framework and an OS. The main two things any OS provide for the developers are the CPU and the memory which Windows Azure provide in different ways, through the compute node. it also provides a scalable storage to store several types of storage whether structure, unstructured or even semi structure data. please notice that the storage node runs on a different hardware resources than the compute node, which provides the system with better efficiency and high availability and scalability. if your application faces any problem, the system will automatically create another instance of it plus your data is replicated three times.
As the Cloud Computing is a concept which consists mainly of three layers, the infrastructure, the platform and the software (as a service), each layer of them is targeting a specified segment. the windows azure is targeting the developers to build high available and scalable applications, it doesn't manage the infrastructure, it is installed on Windows Server which make the administration on the infrastructure, however as the Cloud Computing is based on Virtualization, Windows Azure has its own hypervisor it doesn't depend on Windows Server Hyper-V.
For the developers, which needs to build their applications on Cloud Computing they need a designed framework or platform that gives them the ability to do so.
that's why I think Windows Azure is not just a framework, and not just an OS it is both.

Resources