VCAP5-DCD Study – NFR or Constraint, continued

Following on from yesterday’s post about Non-Functional Requirements vs Constraints, I think I’m a little clearer on this subject, but it appears that it’s not something you can define exactly. To an extent, it depends on the context of the project.

@greggrobertson5 put forward that Functional Requirements are the WHAT and Non-Functional Requirements are the HOW.

Following on from that, something like “must reuse existing hardware” is a NFR, but it is also a Constraint. Think of it as a Venn diagram where the circles for NFR and Constraint intersect, and items can fit into NFR or into C, or the intersection between them.


I also looked up NFR on Wikipedia (yeah, I know, the last resort of the clueless!) and was interested to see it stated “Other terms for non-functional requirements are ‘constraints’ “

VCAP5-DCD Study – NonFunctional Requirement or Constraint

Something I’ve been really struggling with in my DCD prep is understanding how to determine what are Requirements, Risks, Constraints and Assumptions.

Specifically, how do you determine Non-Functional Requirements from Constraints.

For example, if a project states that the existing kit should be re-used, is that an NFR or a Constraint?

We are required to re-use the kit, but it constrains the design.

I asked TheSaffaGeek about this via twitter (@GreggRobertson5) and he directed me to this discussion. This helped somewhat, although I’m still a little fuzzy on the matter.

Jason Langer’s document package includes the PDF “Functional versus Non-Functional Requirements” which lists the following as Functional Requirements:

  • Business Rules
  • Transaction corrections, adjustments,cancellations
  • Administrative functions
  • Authentication
  • Authorization –functions user is delegated to perform
  • Audit Tracking
  • External Interfaces
  • Certification Requirements
  • Reporting Requirements
  • Historical Data
  • Legal or Regulatory Requirements

and the following as Non-Functional Requirements:

  • Performance – Response Time, Throughput, Utilization, Static Volumetric
  • Scalability
  • Capacity
  • Availability
  • Reliability
  • Recoverability
  • Maintainability
  • Serviceability
  • Security
  • Regulatory
  • Manageability
  • Environmental
  • Data Integrity
  • Usability
  • Interoperability

So to me, that would make it pretty clear that “Re-use Existing Hardware” is neither a Functional, nor a Non-Functional Requirement, but a Constraint.


Correcting VMDK paths

I found a bunch of VMs recently which had an incorrect path to the VMDK files – they were still working as the VMDKs were in the VM’s home directory, and the hypervisor seems to check there if it can’t find them where the vmx file thinks they should be.

However, while they would run, things like VMotion wouldn’t work, so they needed correcting.

A bit of googling found this post which was a good starting point. A little rework later and I had the following code:

$VMs = Get-ResourcePool "ResPool" | Get-VM

foreach ($VM in $VMs){
$Datastore = Get-Datastore -VM $VM
$HDDs = Get-Harddisk -VM $VM

foreach ($HDD in $HDDs){
$HDDname = $HDD.Filename
$HDDsNames = $HDDname.Split("/")
$count = $HDDsNames.count
if ($count -gt 3){
$VMDKName = $HDDsNames[$count-1]

$DiskPath = "[" + $Datastore.Name + "] " + $VM.Name + "/" + $VMDKName

Remove-HardDisk -HardDisk $HDD -Confirm:$false
New-HardDisk -VM $VM -DiskPath $DiskPath


This just enumerates the VMs in a resource pool, checks the VMDK path to see if it has more than 3 ‘/’ in it, and if it does, it rewrites it in a correct format.