Software Development and Modelling
See also local files:
- Agile Manifesto
- We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
- That is, while there is value in the items on the right, we value the items on the left more.
- Martin Fowler - Agile, Continuous Delivery, Dependency Injection, ...
- Scrum is a simple 'inspect and adapt' framework that has three roles, three ceremonies, and three artifacts designed to deliver working software in Sprints, usually 30-day iterations.
- Roles†: Product Owner (decides), ScrumMaster (facilitates), Team (builds/demoes)
- Ceremonies†: Sprint Planning, Sprint Review, and Daily Scrum Meeting
- Product Backlog (the single source of requirements), where requirements are expressed in
- User stories
- Epics are stories that wonít be implemented until further into the future (i.e., multiple sprints away). They are often too large or too vague to be completed in one Sprint.
- Themes, collections of User Stories that have some unifying trait or concept. It is sometimes useful to talk in terms of Epics and Themes when doing long-range planning
- Sprint Backlog (requirements for this Sprint)
- Increment (sum of all cumulative results, at one point yielding Minimal Viable Product - MVP)
- Furthermore, there is the Burndown Chart
SAFe - scaled agile
Management and coordination tooling
- Redmine - project management web application
- Jira - evolved from issue tracker
- Issues are the building blocks of any Jira project. An issue could represent a story, a bug, a task, or another issue type in your project. Issues figure in the product backlog.
- A project is simply a collection of issues (stories, bugs, tasks, etc).
- Scrum or Kanban?
- Scrum has an iteration-based approach, which is generally a good fit for teams developing products,
particularly if your team is releasing new versions on a regular schedule.
- Kanban is better suited for a continuous flow of work (e.g. service-oriented teams),
where its constraint-based approach helps prevent your team from being overloaded.
- Confluence - wiki
- Bitbucket - code collaboration
- and many more - Trello, Bamboo, ...
- Use Case - Wikipedia
- introduction by Ivar Jacobson in 1992, updated in 2011 in 'Use Case 2.0'
- a key characteristic of many process models and frameworks such as ICONIX, the Unified Process (UP),
the IBM Rational Unified Process (RUP), and the Oracle Unified Method (OUM)
- With its inherent iterative, incremental, and evolutionary nature, use case also fits well for agile development
- Styles include use case brief, casual, outline, fully dressed etc
- Proposed templates include Cockburn style, Fowler style
- Abuse Case - Wikipedia - to define security requirements
- Misuse Case - Wikipedia - to protect from malicious intents
- SystemsGuild.com - Requirements Engineering - Volere specification
- User Stories - Wikipedia - from eXtreme Programming
- User stories may follow one of several formats or templates.
- As a role I can capability, so that receive benefit
- In order to receive benefit as a role, I can goal/desire
- As who when where, I want because why
- storiesonboard.com - for on-line storyboard development
- Cucumber Gherkin syntax - Given, When, Then and using keywords:
- Feature: provides a high-level description of a software feature, and groups related scenarios.
The first primary keyword in a Gherkin document must always be Feature, followed by a :
and a short text that describes the feature.
- Rule: represents one business rule that should be implemented. It provides additional information for a feature.
A Rule is used to group together several scenarios that belong to this business rule.
A Rule should contain one or more scenarios that illustrate the particular rule.
- Scenario or Example (synonyms): a concrete example that illustrates a business rule. It consists of a list of steps.
- Steps: Each step cotains Given, When, Then, and optionally And, or But.
- Given describes the initial context of the system. It is typically something that happened in the past.
The purpose of Given steps is to put the system in a known state before the user (or external system) starts
interacting with the system (in the When steps).
Avoid talking about user interaction in Givenís.
If you were creating use cases, Givenís would be your preconditions.
- When steps are used to describe an event, or an action. This can be a person interacting with the system,
or it can be an event triggered by another system. Itís strongly recommended you only have a single When step per Scenario.
- Then Then steps are used to describe an expected outcome, or result.
The step definition of a Then step should use an assertion to compare the actual outcome (what the system actually does)
to the expected outcome (what the step says the system is supposed to do).
An outcome should be on an observable output. That is, something that comes out of the system
(report, user interface, message), and not a behaviour deeply buried inside the system (like a record in a database).
Analysis and Design
BDD - Behavior Driven Development/Design
Business process perspective
UML, RUP and UP
REST and APIs
Development and Test
W3schools development (not to be confused with W3C)
gcc, make, gdb, asm, ...
Source code tools
- Git - DVCS - Distributed Version Control System, started by Linus Torvald in 2005
- every Git directory on every computer is a full-fledged repository with complete history and full version tracking abilities, independent of network access or a central server
- stores a snapshot of what all the files in your project look like in this tree structure each time you commit
- see also the LTK git description
- Git objects have
- blob - generally a file
- tree - like a directory, references a set of blobs and other trees
- commit - points to a specific tree, marking it what the project looked like at a specific point in time (containing metadata such as
timestamp, author, pointer to previous commit etc)
- tag - to tag specific commits eg in a release
- browsing: start client, cd to repo, 'dir', basic info: 'git show', status master/branch: 'git status', 'git ls-tree'
- general idea: update file, 'add', 'commit'
- repo usage: clone existing repo or create new and init
- create branch: 'git branch testbranch'
- working on branch: switch to branch 'git checkout testbranch' (the checkout creates the local copy), edit, commit, then 'git checkout master' to switch back to master
- working on master: edit, commit
- then merge 'git merge testbranch
- if changes don't conflict it's okay
- if changes conflict: markers inserted, show with 'git diff', resolve the conflict, commit again, view history with 'gitk'
- show branches: 'git branch'
- what happened: 'git log'
- Git - ProGit book
- Git for Eclipse Users
- GitHub - hosting platform for repositories
IDE - Integrated Development Environment / Testing
Google and related
- Postman - API testing
- Postman - tutorial
- Postman - tutorial-bis
- SonarQube - open source
- open-source platform developed by SonarSource for continuous inspection of code quality to perform automatic reviews with static analysis of code to detect bugs,
code smells, and security vulnerabilities on 20+ programming languages
- Apache - JUnit
- Dynatrace (ex Compuware)
Deployment and Operation
Web and Application Servers - from C to Jave to Jave EE
- NGINX- Open Source
- essentially a web server which can also be used as a reverse proxy, load balancer, mail proxy, HTTP cache, ...
- NGINX- commerical version
- Ngnix Plus - software load balancer, web server, and content cache built on top of open source NGINX
- Ngnix Controller - control-plane solution that manages the NGINX data plane
- Ngnix Unit - dynamic application server, supports a RESTful JSON API and Go, Node.js, Java, Perl, PHP, Python, and Ruby, foundation for a service mesh
- Ngnix WAF - protects layer 7 attacks, based on ModSecurity open source software
- Ngnix Amplify - SaaS-based monitoring tool for the open source NGINX software and NGINX Plus
- Okta - oauth/ngnix context-based security, rbac, API ... Apigee, AWS, ...
- ModSecurity - WAF, rooted in Apache
- modsecurity - documentation and wiki
- provides 'SecRules' for real-time monitoring, logging, and filtering of HTTP
- base rules can be derived e.g. from the OWASP ModSec Core Rule Set project
- Apache, the HTTP server written in C
- Shiro - Java Authentication, Authorisation and Cryptography
- Apache Tomcat - HTTP server in Java, servlet+JSP engine
- Tomcat provides a 'pure Java' HTTP server, started as Java servlet reference implementation
- Contains: Catalina (servlet container), Jasper (JSP engine) and Coyote (http connector)
- Can be extended with OpenEJB to become an EE server (as WebLogic)
- Glassfish - the Sun J2EE reference implementation
- JBoss - the JBoss Application Server (J2EE) bundled with Tomcat as web server, Hibernate for persistence
- Drooles - rules engine, constraint expressions (apparently used by Agfa-H)
- Struts framework for Java EE (presentation, application, db framework)
- IBM WAS - also OpenSource Geronimo
- IBM WebSphere.org
- SAP - NetWeaver AS
- Oracle (ex-BEA) WebLogic
- BEA e-docs
Also refer to general IT Vendors for AppServers, e.g. Oracle's Application Server, IBM's WebSphere, SAP's NetWeaver, etc