This document discusses principles of code structural analysis. It covers package cohesion principles like release reuse equivalency and common closure principle. It also discusses package coupling principles like the acyclic dependencies principle and abstractness of a package. Class design principles like the SOLID principles of dependency inversion and interface segregation are also summarized. It provides an example of analyzing structure using metrics like package instability and introduces the tool Stan4j for structural analysis.
Slides from the course Designing Object Oriented Software (spring 2013). The course focuses on the principles, patterns and practices behind sound software designs.
Slides from the course Designing Object Oriented Software (spring 2013). The course focuses on the principles, patterns and practices behind sound software designs.
This is my presentation at JFall 2012, Nijkerk, Netherlands.
The presentation is geared for live presentation, but I have serialized some of the animation, so it hopefully makes some sense as a slideshow!
2016-04-22: Beyond SOLID: The Package PrinciplesChristian Hujer
Reprise: The four design smells (Rigidity, Fragility, Immobility, Viscosity)
SOLID reprise: Quick overview of the first five principles
SRP Update: It's not just about classes!
Package Cohesion Principles:
* Release-Reuse Equivalency Principle (REP)
* Common Closure / Cohesion Collocation Principle (CCP)
* Common Reuse Principle (CRP)
Package Coupling Principles:
* Acyclic Dependencies Principle (ADP)
* Stable Dependencies Principle (SDP)
* Stable Abstractions Principle (SAP)
Mnemonics for remembering them: ACCESS, CASE
And don't forget Robert "Uncle Bob" C. Martin!
This is the original Google Drive slides:
https://docs.google.com/a/nelkinda.com/presentation/d/1yEOCYWhIgMfiDAJYtvB5ongE2qvcA91tPqLB4TzEcwM/edit?usp=sharing
This talk is an introduction about technical aspects of how payment cards function, what technical protocols are involved and what are implementation complexities in a typical payments project. You will learn about concepts like Authorisation and Clearing, Tokenization and know about novelties in the payment world, which will affect consumers in the nearest future.
Как построить свой фреймворк для автотестов?Dmitry Buzdin
Мы пройдемся по всем основным блокам построения тестового фреймворка и тому, как они связаны между собой. Вы научитесь собирать свое решение по автоматизации из библиотек с открытым кодом и делать так, чтобы они дополняли друг друга.
This is my presentation at JFall 2012, Nijkerk, Netherlands.
The presentation is geared for live presentation, but I have serialized some of the animation, so it hopefully makes some sense as a slideshow!
2016-04-22: Beyond SOLID: The Package PrinciplesChristian Hujer
Reprise: The four design smells (Rigidity, Fragility, Immobility, Viscosity)
SOLID reprise: Quick overview of the first five principles
SRP Update: It's not just about classes!
Package Cohesion Principles:
* Release-Reuse Equivalency Principle (REP)
* Common Closure / Cohesion Collocation Principle (CCP)
* Common Reuse Principle (CRP)
Package Coupling Principles:
* Acyclic Dependencies Principle (ADP)
* Stable Dependencies Principle (SDP)
* Stable Abstractions Principle (SAP)
Mnemonics for remembering them: ACCESS, CASE
And don't forget Robert "Uncle Bob" C. Martin!
This is the original Google Drive slides:
https://docs.google.com/a/nelkinda.com/presentation/d/1yEOCYWhIgMfiDAJYtvB5ongE2qvcA91tPqLB4TzEcwM/edit?usp=sharing
This talk is an introduction about technical aspects of how payment cards function, what technical protocols are involved and what are implementation complexities in a typical payments project. You will learn about concepts like Authorisation and Clearing, Tokenization and know about novelties in the payment world, which will affect consumers in the nearest future.
Как построить свой фреймворк для автотестов?Dmitry Buzdin
Мы пройдемся по всем основным блокам построения тестового фреймворка и тому, как они связаны между собой. Вы научитесь собирать свое решение по автоматизации из библиотек с открытым кодом и делать так, чтобы они дополняли друг друга.
Microservices created quite a buzz in software development. Those are finally being adopted, and a lot of project suffer from that... microservices bring a lot of infrastructure and distributed programming complexity not all organisations can cope with. Question is – is it possible to gradually migrate to microservices architecture without Big Bang/Rewrite From Scratch approach? I would say it is possible, and is a much better idea compared to installing Kubernetes on AWS on day one. This talk is based on practical experience of architecting business applications to scale out and grow up to become micro services one day.
How to Build Your Own Test Automation Framework?Dmitry Buzdin
Even though there are plenty of open source tools on the market every company needs to put them together and create a test automation framework on top. Best practices of doing that are quite well-known in industry and it is important to learn them before building your own framework. We will go through the core building blocks of test automation frameworks and how they are playing together. You will learn how to assemble your test automation toolchain out of open source libraries and how to integrate them together. The session will be heavily biased towards Java platform.
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
UiPath Test Automation using UiPath Test Suite series, part 4DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 4. In this session, we will cover Test Manager overview along with SAP heatmap.
The UiPath Test Manager overview with SAP heatmap webinar offers a concise yet comprehensive exploration of the role of a Test Manager within SAP environments, coupled with the utilization of heatmaps for effective testing strategies.
Participants will gain insights into the responsibilities, challenges, and best practices associated with test management in SAP projects. Additionally, the webinar delves into the significance of heatmaps as a visual aid for identifying testing priorities, areas of risk, and resource allocation within SAP landscapes. Through this session, attendees can expect to enhance their understanding of test management principles while learning practical approaches to optimize testing processes in SAP environments using heatmap visualization techniques
What will you get from this session?
1. Insights into SAP testing best practices
2. Heatmap utilization for testing
3. Optimization of testing processes
4. Demo
Topics covered:
Execution from the test manager
Orchestrator execution result
Defect reporting
SAP heatmap example with demo
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionAggregage
Join Maher Hanafi, VP of Engineering at Betterworks, in this new session where he'll share a practical framework to transform Gen AI prototypes into impactful products! He'll delve into the complexities of data collection and management, model selection and optimization, and ensuring security, scalability, and responsible use.
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
A tale of scale & speed: How the US Navy is enabling software delivery from l...sonjaschweigert1
Rapid and secure feature delivery is a goal across every application team and every branch of the DoD. The Navy’s DevSecOps platform, Party Barge, has achieved:
- Reduction in onboarding time from 5 weeks to 1 day
- Improved developer experience and productivity through actionable findings and reduction of false positives
- Maintenance of superior security standards and inherent policy enforcement with Authorization to Operate (ATO)
Development teams can ship efficiently and ensure applications are cyber ready for Navy Authorizing Officials (AOs). In this webinar, Sigma Defense and Anchore will give attendees a look behind the scenes and demo secure pipeline automation and security artifacts that speed up application ATO and time to production.
We will cover:
- How to remove silos in DevSecOps
- How to build efficient development pipeline roles and component templates
- How to deliver security artifacts that matter for ATO’s (SBOMs, vulnerability reports, and policy evidence)
- How to streamline operations with automated policy checks on container images
Climate Impact of Software Testing at Nordic Testing DaysKari Kakkonen
My slides at Nordic Testing Days 6.6.2024
Climate impact / sustainability of software testing discussed on the talk. ICT and testing must carry their part of global responsibility to help with the climat warming. We can minimize the carbon footprint but we can also have a carbon handprint, a positive impact on the climate. Quality characteristics can be added with sustainability, and then measured continuously. Test environments can be used less, and in smaller scale and on demand. Test techniques can be used in optimizing or minimizing number of tests. Test automation can be used to speed up testing.
Enhancing Performance with Globus and the Science DMZGlobus
ESnet has led the way in helping national facilities—and many other institutions in the research community—configure Science DMZs and troubleshoot network issues to maximize data transfer performance. In this talk we will present a summary of approaches and tips for getting the most out of your network infrastructure using Globus Connect Server.
Essentials of Automations: The Art of Triggers and Actions in FMESafe Software
In this second installment of our Essentials of Automations webinar series, we’ll explore the landscape of triggers and actions, guiding you through the nuances of authoring and adapting workspaces for seamless automations. Gain an understanding of the full spectrum of triggers and actions available in FME, empowering you to enhance your workspaces for efficient automation.
We’ll kick things off by showcasing the most commonly used event-based triggers, introducing you to various automation workflows like manual triggers, schedules, directory watchers, and more. Plus, see how these elements play out in real scenarios.
Whether you’re tweaking your current setup or building from the ground up, this session will arm you with the tools and insights needed to transform your FME usage into a powerhouse of productivity. Join us to discover effective strategies that simplify complex processes, enhancing your productivity and transforming your data management practices with FME. Let’s turn complexity into clarity and make your workspaces work wonders!
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofsAlex Pruden
This paper presents Reef, a system for generating publicly verifiable succinct non-interactive zero-knowledge proofs that a committed document matches or does not match a regular expression. We describe applications such as proving the strength of passwords, the provenance of email despite redactions, the validity of oblivious DNS queries, and the existence of mutations in DNA. Reef supports the Perl Compatible Regular Expression syntax, including wildcards, alternation, ranges, capture groups, Kleene star, negations, and lookarounds. Reef introduces a new type of automata, Skipping Alternating Finite Automata (SAFA), that skips irrelevant parts of a document when producing proofs without undermining soundness, and instantiates SAFA with a lookup argument. Our experimental evaluation confirms that Reef can generate proofs for documents with 32M characters; the proofs are small and cheap to verify (under a second).
Paper: https://eprint.iacr.org/2023/1886
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfPaige Cruz
Monitoring and observability aren’t traditionally found in software curriculums and many of us cobble this knowledge together from whatever vendor or ecosystem we were first introduced to and whatever is a part of your current company’s observability stack.
While the dev and ops silo continues to crumble….many organizations still relegate monitoring & observability as the purview of ops, infra and SRE teams. This is a mistake - achieving a highly observable system requires collaboration up and down the stack.
I, a former op, would like to extend an invitation to all application developers to join the observability party will share these foundational concepts to build on:
Securing your Kubernetes cluster_ a step-by-step guide to success !KatiaHIMEUR1
Today, after several years of existence, an extremely active community and an ultra-dynamic ecosystem, Kubernetes has established itself as the de facto standard in container orchestration. Thanks to a wide range of managed services, it has never been so easy to set up a ready-to-use Kubernetes cluster.
However, this ease of use means that the subject of security in Kubernetes is often left for later, or even neglected. This exposes companies to significant risks.
In this talk, I'll show you step-by-step how to secure your Kubernetes cluster for greater peace of mind and reliability.
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfPeter Spielvogel
Building better applications for business users with SAP Fiori.
• What is SAP Fiori and why it matters to you
• How a better user experience drives measurable business benefits
• How to get started with SAP Fiori today
• How SAP Fiori elements accelerates application development
• How SAP Build Code includes SAP Fiori tools and other generative artificial intelligence capabilities
• How SAP Fiori paves the way for using AI in SAP apps
9. Goals of structural analysis
• Early fixing design violations
• Keeping code complexity on a manageable level
under constant change rain
• Getting the «big picture»
9
12. Release Reuse Equivalency
«The unit of reuse is the unit of release»
Criterion for grouping artifacts is convenience for
reuse and release
Component
lv.jug.api
lv.jug.logic
12
13. Common Closure Principle
«Classes that change together belong together»
If classes that change together are in the same
Package, then the impact on other packages is
minimized. Group classes open to certain changes.
lv.jug.domain.client
lv.jug.dao.client lv.jug.domain.client
lv.jug.service.client
13
14. Common Reuse Principle
«Classes in a package are reused together»
A dependency upon a package is a dependency
upon everything within the package.
14
16. Acyclic Dependencies Principle
«The dependencies between packages must not
form cycles»
Can be solved by:
• Splitting packages (CRP)
• Reorganizing packages
• DIP & Interface Segregation
16
17. Abstractness of a package
A(P) = AC(P) / TC(P)
A(P) ∈ [ 0..1 ]
…where
P = package
AC = abstract type count
TC = total type count
17
18. Instability of a package
I(P) = EC(P) / ( AC(P) + EC(P) )
A(P) ∈ [ 0..1 ]
…where
P = package
EC (Efferent Coupling) = number of outgoing dependencies
AC (Afferent Coupling) = number of incoming dependencies
18
19. Stable Abstractions Principle
«A package should be as abstract as it is stable»
Distance (D)
Zone of uselessness
D=A+I-1
Zone of pain
19
Rigidity(tverdostjmonolitnostj) – monolith, difficult to change, cascade to dependent modulesFragility – breaking in many places with no conceptual relationshipImmobility – inability to reuse components, decompose system, big transitive dependency tailViscosity (vjazkostj) –when “normal” change is harder to employ than a hack due to design (unclear dependency) or environment (compilation 1H)Opacity – can’t understand the purpose of the class/package
Avoiddevelopment interference, forexampleServe as a foundationforfuturemodularization
Imagine that every change increments version and makes class unsuitable for clients of the previous version
Reason:Minimizeimpact on the client with different releasecycleЕсли я положу в библиотеку или пакетто, что сложно реюзать или то что нежелательно реюзать, это непосредственно влияет на клиента и мою необходимость релизить повторноОдиночные классы часто не реюзаются. Необходимо создавать набор крассов (потенциально формирующий связный компонент)Either all of the classes in a package are reusable or non of them are.
Reason:the more packages change in any given release, the greater work to rebuild, test and deploy the releasemimimize the number of packages that are changed in any givenreleaseIf the code in an application must change, where would you like those changes tooccur: all in one package, or distributed through many packages?ModularContinuity – whensmallrequirementchangeyieldssmallchangeintheresult
Reason:Ifclass changes, its package changes (and classesinside).If a package is being releasedbecause of changes to a class that I don’t care about, then I will not be very happy abouthaving to revalidate my application.Every time the used package (P2) is released, the using package (P1) must be revalidated
Cycled = only can be used & understood togetherNo dependency cycles within the design layerGraph is acyclic if and only if it has no tanglesBreak minimum feedback arc
1 класс и не абстрактный = 01 класс и абстрактный = 12 класса пополам = 0,5
Responsible class – a lot of incoming dependenciesDependent class – a lot of outgoing dependencies0,5для пакетов с одинаковым количеством входящих и выходящих связей
Stable = hard to change, Unstable – easy to change, butfragile. We don’t want all packages to be stableBy sticking to this principle we avoid getting packages which are used heavily by the rest of the application and which, at the same time, have a low degree of abstraction
Stable = hard to change, Unstable – easy to change, butfragile. We don’t want all packages to be stableBy sticking to this principle we avoid getting packages which are used heavily by the rest of the application and which, at the same time, have a low degree of abstraction
Stan4j: Acyclic dependencies forming Tangles
Enforcing rules with MackerScreenshot of rotting structure (DC)Screenshot of clean structure (Deposits)