...
Key Concepts
Strategies for Project Success
...
groovyconsole
cma1_1.groovy
Expando objects allow dynamic class definitions with attributes, behavior and event handlers for async smart object testing
These tests provide the same interactivity when executed as async REST API event handlers so a solution model can be dynamically tested and validated for behavior before it's coded
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
//================================== //x2031 groovy smart objects w expando events println "//x2031 ex-expando-events-gen-v1.groovy" println """ ex-expando-events-gen-v1.groovy x111c groovy bound property example - https://blog.mrhaki.com/2009/08/groovy-goodness-bound-and-constrained.html shows the flexibility of event messaging in requirements modeling using bound property event listeners in the example the toyota vehicle has bound properties the owner listens for changes in the toyota properties this model has 2 independent objects, one listening for events on the other in a single Java process for modeling purposes, this simple method can proxy the concept of independent processes linked by event messages jim mason - jmason900@yahoo.com """ import groovy.beans.* class Owner implements PropertyChangeListener { boolean carPriceChange Car aCar String name String toString() { "owner = $this.name and the car is ${aCar.toString()} " } public void propertyChange(PropertyChangeEvent e) { String propertyName = e.getPropertyName(); println "debug>> e = ${e.toString()}" if ("price".equals(propertyName)) { println "\n Event >> Owner $this.name detected car ${e.source.brand} price changed to: ${e.newValue} from: ${e.oldValue} \n\t the car is ${aCar.toString()} \n" } if ("automatic".equals(propertyName)) { println "\n Event >> Owner $this.name detected car ${e.source.brand} automatic transmission type changed to: ${e.newValue} from: ${e.oldValue} \n\t the car is ${aCar.toString()} \n" } } } @Bindable class Car { int numberOfDoors @Vetoable String model @Vetoable String brand @Bindable boolean automatic @Bindable double price String toString() { "[Car details => brand: '${brand}', model: '${model}', #doors: '${numberOfDoors}', automatic: '${automatic}', price: '${price}']" } } import groovy.beans.* import java.beans.* def toyota = new Car(brand: 'Toyota', model: 'Verso', price: 28919, numberOfDoors: 5, automatic: false) toyota.propertyChange = { if (it.propertyName == 'price') { println "The price has changed. Inform sales the new price is '${it.newValue}'." } } toyota.vetoableChange = { PropertyChangeEvent pce -> if (pce.propertyName == "brand") { if (!(pce.newValue in ['Toyota', 'Lexus'])) { throw new PropertyVetoException('New value is not Toyota or Lexus', pce) } } if (pce.propertyName == "model") { if (pce.newValue ==~ /.*\d+.*/) { throw new PropertyVetoException('No numbers in model names allowed.', pce) } } } toyota.price = 30995 assert 30995 == toyota.price toyota.brand = 'Lexus' assert 'Lexus' == toyota.brand try { toyota.brand = 'AUDI' assert false: 'We should not be able to set this value.' } catch (PropertyVetoException e) { assert true println " could not set brand to AUDI. car brand is ${toyota.brand}" } try { toyota.model = 'A5' assert false: 'We should not be able to set this value.' } catch (PropertyVetoException e) { assert true println " could not set model to A5. car model is ${toyota.model}" } def anOwner = new Owner() anOwner.name = "Jim" println anOwner.toString() anOwner.aCar = toyota println "\n car was purchased \n ${ anOwner.toString() } \n " // how to add an propertyChangeListener to an object in groovy toyota.addPropertyChangeListener(anOwner) toyota.automatic = true toyota.price = 44000 toyota.automatic = true // no pce fired because the attribute state is the same |
...
Devops - DORA - Effectiveness Metrics by Category
devops-dora-work-metrics-2024-report.pdf. link
Digital Operational Resilience Act (DORA)
A European Union regulation that aims to improve the financial sector's resilience to information and communication technology (ICT) incidents. DORA applies to 21 types of financial organizations, including credit institutions, payment institutions, and investment firms. The act went into effect on January 16, 2023, and will be fully implemented on January 17, 2025.
DORA overview site
https://www.digital-operational-resilience-act.com/
DORA regulation
https://www.digital-operational-resilience-act.com/DORA_Articles.html
Flow metrics - connects delivered value to software development in theory
Teams using DORA or SPACE, or even both, still may find a hole in their efficiency measurement strategy: is the development team actually working on projects that will bring the most value to the business? Traditionally mapping business value onto software development has been difficult to do as neither side speaks the same language, which can easily lead to a lack of shared priorities and understanding. bring the two sides together, ideally with minimal pain and maximum collaboration
4 dimensions ot flow metrics - features,
...
quality, risks, technical debt - see VCRS for BETTER value mapping
- Features are what is being built, and this metric is tied completely to code creation. It is also closely related to business priorities.
- Quality measured by Defects is an umbrella term referring to debugging and of course the time it takes to find and fix problems.
- Risk is the metric that reflects the precarious nature of code development, i.e., it can be at risk of security breaches or not being compliant. And finally
- Debt, sometimes known by the dev term technical debt, is a tip of the hat to flow, as debt stands in the way of forward momentum in software development.
...