Software Development and Modelling
Content
Local files
See:
Overall methodologies and frameworks
Training
Agile
- 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.
- AgileBOK
- Martin Fowler - Agile, Continuous Delivery, Dependency Injection, ...
Scrum
- Scrum.org
- 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
- Artifacts :
- Product Backlog (the single source of requirements), where requirements are expressed in
- User stories
- Epics are stories that wont 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
DevOps
SAFe - scaled agile
Other
Management and coordination tooling
- Redmine - project management web application
- Atlassian
- 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, ...
Requirements
- 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.io
- 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 Givens.
If you were creating use cases, Givens 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. Its 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
Basics
MDA
DDD
BDD - Behavior Driven Development/Design
Other
Business process perspective
UML, RUP and UP
Design Patterns
REST and APIs
Development and Test
Data modeling
See local files:
Programming languages
Java
JavaScript
Gnu gcc, make, gdb, asm, ...
- gcc.gnu.org the Gnu compiler collection
- C, C++, Objective-C, Fortran, Ada, Go, and D, and libraries for these languages (libstdc++,...)
- GCC was originally written as the compiler for the GNU operating system
- make - a tool which controls the generation of executables and other non-source files of a program from the program's source files
- masm32.com - freeware project
- MinGW - minimalistic gnu on windows (e.g. prereq for nasm) including gcc, make, gdb
- nasm - the alternative for masm
W3schools development (not to be confused with W3C)
Programming
User interfaces
Source code tools
Git
Intro
- 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
- type
- 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
- size
- content
Debian info
- Git Debian reference
Installation
Configuration
- git-config command - get/set repository or global options
- There's client-side (the majority) and server-side configuration - see 'man git-config'
- Client-side:
- Initially there is no .gitconfig in your home directory nor anywhere else
- You can create such a .gitconfig in your home directory, using git config --global user.name "Marc Sel", git config --global user.email "marc.louis.sel@gmail.com", ...
- BlackTiger: git-config: command not found = solution => use 'git config', not 'git-config'
- You can override these values for a project by using git-config while in the project dir and NOT using --global
- List your global config using 'git config --global --list' - reading '/home/marc/.gitconfig'
- Server-side:
- Then there's one git directory per project
Usage
- browsing: start git client, then
- cd to repo, 'dir'
- basic info: 'git show',
- status master/branch: 'git status',
- also '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'
Usage continued - bringing something under git control
Steps:
- cd to the directory and issue git init - creates .git subdir.
- Then add the files: git add *.c, then commit (ie to your own branch), “git commit –m “first version”
- Check status with git status
- To see what you’ve changed but not yet staged: git diff
- To see which branches exist: git branch
- To create a branch: git branch newbranchname
- To switch to it: git checkout newbranchname
- Then you can edit within the branch, commit, and go back to the master by git checkout master
- Then merge…
Clone an existing git repository from another server
- Do git clone url (url can use https, git, ssh, other protocols)
EBSI try 1:
- E.g. git clone https://ec.europa.eu/cefdigital/code/projects/EBSI/repos/2-wallet-ui/browse - fails
- Retry according instructions:
- cd test-ebsi-wallet-gui (i.e. on your local machine of choice)
- git clone https://github.com/validatedid/ebsi-wallet-gui - asks username for github.com
- cd ebsi-wallet-gui
- npm install
All EBSI repos are on internal bitbucket: https://ec.europa.eu/cefdigital/code/projects/EBSI.
EBSI try 2: ok:
- 'git clone https://nselmarc@ec.europa.eu/cefdigital/code/scm/ebsi/2-wallet-ui.git'
- challenged for psw... ok - creates bare git repo .git
- then on local machine cd into dir '2-wallet-ui'
- and do a 'git checkout dev' which copies the files over to your local dir
Further info
Github
- GitHub - hosting platform for repositories
Other
IDE - Integrated Development Environment / Testing
Google and related
Development companies
Testing
- 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
Sundry
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
OpenSource