welcome to my personal website!
On the following pages I´ve put all my notes, scripts and seminar materials together, in order to give you an overview on what I do in the world of software modelling and engineering.
Since my early ages I feel a fascination for computers and coding. So life happened as it should and I started 2003 during my studies of informatics to develop my first serious software tool for a big company in Köln – Westdeutscher Rundfunk (WDR). I was delegated to develop a webbrowser-interface in the intranet of the department Systemservice Fernsehen, with access to the enterprise database (ORACLE 9 and 10). Although I´ve already had five years of experience with JAVA programming, concepts such as software development methodologies and procedure models were new terrain for me. So I had to start the development process intuitively with a simple internet research on software development. It didn´t take me long to end up with new terms and concepts, such as IT-project management, requirement engineering, phase models, V-models, spiral models, waterfall models, object-orientation, design patterns, the agile methodology as well as new computer-aided-software-engineering (CASE)-tools or integrated development environments (IDE), frameworks, libraries, several programming languages, standards, protocols, guidelines, manuals, etc. At the same time, I was studying my Master´s in Information Systems at full blast, working extra hours, trying to find out, what, where, why, when and how to put things together, …it was a long hike. But after all, like with everything, if you just keep putting one foot in front of the other, the journey begins to pick up pace and things start to work one after the other and now, after years of theory and practice, I decided to share my insights with the www. I hope to be helpful and to sharpen my own and – in the best case – others thinking and acting in the world of software modelling and engineering. I´ll explain everything down to the core and hope to help non-professionals to get better into the matter, much easier than I was trying to get into it decades – oops 🙂 – ago. I´ll specify and improve the blog content continuously, based on your feedback and questions…thanks a lot in advance! If I still have your curiosity and attention, let´s dive further into the depths of:
- Project Management, Cybernetics, Requirement Engineering and Procedure Models (Article I),
- Object-orientation and Design Patterns (Article II),
- Frameworks, Libraries and Programming Languages (Article III),
- Computer-aided Software Engineering (CASE)-tools (Article IV),
- Testing and Quality Assurance (Q&A) (Article V),
- Delivery Management and Software Lifecycle (Article VI) and finally,
- the Arts and Science of Storytelling & Documentation (Article VII).
Thank you for your patience and attention and especially for your feedback!
Project Management, Cybernetics, Requirement Engineering and Procedure Models (Article I)
Imagine that you´re at the end of your wishes and suddenly get a „Go!“ to start a project. First you´ll prepare for a software project-kick-off-event, where you´ll meet at least one top IT responsible from the custom company. After that you´ll start to setup a rough framework for your project management system (PMS) concerning the main methods, tools, languages and best practices of the IT department or company in charge, which is always a part of the information system (IS) of the company.
Information Systems (IS)
Before we dive deeper into the first issues of the software development process, we have to work out the operating principles of IS, in which software systems are embedded. A software is always developed within and based on IS. Which means, if you build a software in a team, the development team, its organisation, tasks and the technology setup build an IS as well as the targeted custom companies structures, within which the software to be developed will be used. Both IS are in that sense connected to each other in which the development team has to deduce the basic requirements for the PMS, procedure models, methods and tools, in order to meet the needs of the customer as best as possible. According to Seibt´s (2006) ATOM-Modell IS are the sum of (see Seibt 2006, S. 20)
• Tasks (dt. Aufgaben) (goals, processes, functions, know-how, business model, etc.)
• Technology (hardware, software, network, infrastructure, interfaces, programming languages, libraries, know-how, etc.)
• Organisation (project management, structure, processes, leadership, governance, risk, compliance (GRC) systems, marketing, sales, research&development (R&D), logistics, human resource management (HRM), etc.)
• Human (dt. Menschen) (staff, team, management, stakeholders and shareholders, motivation, acceptance, participation, skills etc.)
IS of companies require an interdisciplinary approach for a sufficient understanding and further development. Not only informatics and business administration skills are relevant here, but also skills in psychology, sociology, philosophy, neurology, ethnology etc. and as well skills and knowledge regarding the given business area or branch of industry. So a software development team always has to pay attention on interdisciplinary insights and requirements. The central role of the IS view is given as well in the envirornment of the contracting organisation as well as in the IS of the developing team. The next figure depicts a possible way of user-centered thinking in software design in special and IS design in general, containing each of the concepts and technologies discussed in this article (see fig. 1).
Fig. 1: The Pyramid of User- and Customer-centered Software Development within the IS deveopment process
The definition of project management is as follows:
„A project is temporary in that it has a defined beginning and end in time, and therefore defined scope and resources. And a project is unique in that it is not a routine operation, but a specific set of operations designed to accomplish a singular goal. So a project team often includes people who don’t usually work together – sometimes from different organizations and across multiple geographies.“ (PMI 2018)
In order to have a deep understanding of project management principles, it´s helpful to learn the basics of cybernetics.
Cybernetics is the science of the interaction between humans and machines and machines and machines. According to system theory, each system is made of at least four components:
4. system paths
„Systems theory is a science which has the comparative study of systems as its object. “ (Stichweh 2011)
Those four dimensions are reflected for example in the phase model, which is a basic concept in a PMS. The four phases in the phase model are:
More project management methods and tools follow this paradigm given from the cybernetics. If you want to learn more on this subject, please follow this link.
Requirement Engineering (RE)
Requirement Engineering is the first main activity to start after the project kick-off and as a function of project management.
„Requirements Engineering (RE) is, as its name suggests, the engineering discipline of establishing user requirements and specifying software systems. There are many definitions of Requirements Engineering“ (Zave 1995 in Sutcliffe 2013)
„RE refers to the activity of formulating, documenting and maintaining systems requirements in order to produce, from users’ needs, a set of specification related to what the final system should be. Requirements provide the basis for all phases of the development system. Thus, it is necessary to control these requirements in all phases of the development cycle and in all domains to avoid some misinterpretation and mistakes committing the final results.“ (Simão et al. 2016)
According to Fliß et al. (2005), the decision for choosing a process model for software development is dependent on different approaches given in the regarding company. Criteria for procedure models are the chosen dimensions, genericity, sub-models, phase coverage, object domain, branch focus and type of formalization as well as the standardization level, the openness and the adaptability of the architecture, the problem space, the time and the organization. Recommended procedure models are the unified modeling language (UML), the Zachman-Framework, the Rational Unified Process (RUP) etc. (see Fliß et al., 2005, p. 184).
Since the last decade agile or lean thinking is becoming more and more a standard in software development:
„Agile software development is more than frameworks such as Scrum, Extreme Programming or Feature-Driven Development (FDD). Agile software development is more than practices such as pair programming, test-driven development, stand-ups, planning sessions and sprints.“ (agilealliance 2019)
All roads lead to maths. In order to keep your motivation high to read further, please consider, that this mathematics part is only optional. You can still get a full overview on the software development process, if you skip this math part and start straightaway forward, going ahead with procedure models, if maths isn´t your favorite subject to spent time with. The central questions in this part are:
- What is the maths behind software development and where is the magic? For a deeper understanding of why maths matters, you´ll find several links to articles breaking down this question from different point of views. (…)
Applied mathematics is referring to doing research on software development. Besides of applications, such as statistical analysis and machine learning and artificial intelligence (AI), maths can help to raise the level of formalization, standardization and automatization of procedure models, which is also discussed in the article mentioned before (Article I).
<Article II – Object-orientation and Design Patterns>
agilealliance (2019): Agile 101. Definition of „Agile Software Development)
Fliß, C. ; Höhn, R. ; Höppner, S. ; Schumacher, M. Wetzel, H. (2005): Rahmen zur Auswahl von Vorgehensmodellen. Arbeitsbericht der GI-Fachgruppe WI-VM – Arbeitskreis „Vorgehensmodelltypen“
Google-Image-Search (2018): Zachman Framework.
Project Management Institute (PMI) (2018): What is Project Management?
Seibt, D. (2006): Vorlesungsunterlagen. Professor für Wirtschaftsinformatik. Institut für Wirtschaftsinformatik. Universität Göttingen.
Stichweh, R. (2011): Systems Theory. https://www.fiw.uni-bonn.de/demokratieforschung/personen/stichweh/pdfs/80_stw_systems-theory-international-encyclopedia-of-political-science_2.pdf
Sutcliffe, A. G. (2013): The Encyclopedia of Human-Computer Interaction. Chapter 13 – Requirements Engineering. 2nd Ed. in Zahirovic, A. ; Lowgren, J. ; Carroll, J. M. ; Hassenzahl, M. ; Erickson, T. Interaction Desingn Foundation.
Simão, J. ; Panetto, H. ; Liao, Y. ; Stadzisz, P. (2016): A notification-oriented approach for systems requirements engineering. IPSE. 23rd IPSE International Conference on Transdisciplinary Engineering, Oct 2016, Curitiba, Brazil. IOS Press, 4, pp.229-238, Transdisciplinary Engineering: Crossing Boundaries. <http://ebooks.iospress.nl/volume/transdisciplinary-engineeringcrossing-boundaries-proceedings-of-the-23rd-ispe-inc-international-conference-on-transdisciplinaryengineering-october-3-7-2016>. <10.3233/978-1-61499-703-0-229>. <hal-01376439>
Object-orientation and Design Patterns (Article II)
Object-orientation (OO) is a paradigm for software developers to specify the model of a software system to be engineered in the language of the real world scenario. This way the required system is modelled with business classes, objects and users as well as real business processes. The naming and taxonomy of the used object and attribute names in the model map are taken from the real scenario context.
„Object-oriented programming (OOP) is a programming language model organized around objects rather than „actions“ and data rather than logic. (Rouse 2018)
The following unified modelling language (UML) class diagram shows classes and their specifications in the object-oriented model (OOM) of a software I had developed, called XMSS (eXtended Management Support Systems). In the top of the boxes, the names of the classes, followed by a list of the object attributes and properties in the mid-part of the box and in the lower part of the box are listed the functions belonging to the class of objects, separated into the domain layer (dt. Fachkonzept-Schicht) and the user interface (UI) layer (dt. UI-Schicht) (see fig. 1).
Fig. 1: UML-Class Diagramm (Source: Doger 2006, S. 90)
Sequence diagrams help to visualize the sequence of the interactions between classes. Below the sequence of the usage of the classes modelled above is depicted (see Fig. 2). Class diagrams have a weight on the model structure and sequence diagrams a weight on the processes of classes. The behaviour of the classes is considered in three layers, the UI layer, the domain layer and the data layer (see Fig. 2).
Fig. 2: UML sequence diagramm (Source: Doger 2006, S. 88)
The deployment diagram gives an overview on the placement of the system components and their interactions within the system landscape (see Fig. 3).
Fig. 3: UML deployment diagramm (Source: Doger 2006, S. 91)
Design Patterns is a concept going back to the traditional arts and science of architecture. It is impressive how architects invented design concepts centuries ago, which are currently helpful in software design, such as the findings of the holistic and futuristic architect Buckminster Fuller. Bucky, as he was called, invented highly „user-centered“ architectural constructions and did a great job for the reduction of complexity in the engineering of software architectures.
The so-called ‚Gang of Four‘ is a group of four authors, who released the book, Design Patterns: Elements of Reusable Object-Oriented Software, introducing 23 design patterns linked with UML diagrams, coding concepts in languages, tools, etc. (cf. Carr 2009).
Several methods, frameworks, libraries, tools and programming languages are available around the OOP. You will get to know them in the next article.
Unified Modelling Language (UML)
The modelling process can be supported by modelling languages, such as the unified modelling language (UML) providing different views and diagram types to reduce complexity, such as use-case-, class-, object- , activity-, sequence-, state-, component- and deployment diagrams, etc. UML provides a special graphical notation syntax (see usage above Fig. 1-3), specifying models intuitively capable, offering several complexity levels, regarding the requirements.
I use UML intensively in order to make structures and processes as transparent as possible in a multimodal way and strongly recommend it in modelling software.
<< Previous Article I >> << Next Article III >>
Carr, R. (2009): Gang of Four Design Patterns
Doger, N. A. (2006): „XMSS – eXtended Management Support Systems (MSS) Erweiterung von MSS mit Hilfe von neuen Medien auf der Grundlage von kognitiven und KI-basierten Konzepten“. Master Thesis. Professor D. Ehrenberg. Universität Göttingen.
Rouse, M. (2018): Object-oriented Programming (OOP)
Frameworks, Libraries and Programming Languages (Article III)
Software frameworks offer standardized preconstructed structures, helping software developers to build and deploy software systems in distributed environments and provide generalizible and reusable issues and components of the software development environment, such as libraries of source code, compilers, tool sets, application programming interfaces (APIs), etc. The goal is to reduce complexity and the amount of working hours, by a high degree of standardization, automatisation and formalization of recurring, repeating, often used, proved, performant, stable and relevant structures and processes. Software frameworks help you to reuse or generate the „best“ code possible for a specific requirement, instead of doing all the work for yourself. Of course, you can do some macho coding and prove to everybody, that you can also do it without, but you’d waste your time and energy. 20-30 years ago developers were brainstorming at the coffee machine about programming languages, nowadays they do it about software frameworks.
Software frameworks are the new programming languages. The strategy and operational activities of programming have changed. Strategically it´s all about the architecture, operationally it’s all about method knowledge, framework knowledge and tool know-how. The relevancy of language syntax is decreasing, since more intuitive ways of „programming“ are arising. Syntax is disappearing more and more along with upcoming visual languages, such as Graphical-User-Interface (GUI) builders demonstrate, by using WYSIWYG (What-you-see-is-what-you-get)-Code in any language to implement a graphical widget. Nowadays, developers work on higher abstraction layers and most of the coding is consisting of API calls and architecture comes before syntax. The main task today is to get correctly implemented algorithms. Software frameworks provide pre-defined and pre-implemented algorithms and the collective knowledge on software architectures. A detailed definition on software frameworks can be found here.
Thus, it’s helpful to separate software frameworks from software IDEs (Integrated Development Environment) or CASE (Computer-aided Software Engineering)-Tools, discussed in the next article.
Types of Software Frameworks
It’s a hard job to sort out different categories of software frameworks, due to a fast growing, highly diversified, rapidly changing, often short-lived software framework market with different concepts, approaches, system landscapes, programming languages, libraries of code, etc., put together for numerous purposes in different versions, distributions, environments, etc. A possible way of categorizing software frameworks for a better understanding is given below with examples for each type listed:
- Software Development Frameworks
- IT-Layer-based Typology
- Backend Frameworks
- Web MVC: AngularJS
- Data processing: Apache Spark, Hadoop, Kafka
- DevOps, Containarization, Deployment, Docker (Build), AndroidBuilder
- Examples: Ruby on Rails, Mojolicious, Xamarin, AndroidBuilder, Spring MVC, Ruby on Rails, Laravel, Django, Sails.js, ASP.NET Core, Zend Framework, Catalyst, Mojolicious, node.js, angular.js, React, .NET Core, Django, TensorFlow, Xamarin, Cordova, Torch/ PyTorch
- Frontend Frameworks
- Examples: Bootstrap, Backbone.js, AngularJS, Angular, EmberJS, ReactJS and Vue.js, CSS Frameworks, including HTML, JS documents etc.
- Backend Frameworks
- Language-based Software Framework typology
- Java Collections Framework (JCF)
- Enterprise Java: Spring Boot
- Torch/ PyTorch
- Zend Framework
- ASP.NET Core
- .NET Core
- Object-Oriented Frameworks
- Model-View Controller
- Spring MVC
- Microsoft Foundation Classes
- Test Automation Frameworks
- Unified Functional Testing (formerly QTP)
- Machine Learning Frameworks
- Python Anaconda
- Application runtime frameworks:
- Mac’s Cocoa Runtime
- Windows Common Language Runtime
- Java Runtime Environment
- IT-Layer-based Typology
- Project Management Frameworks
- Agile Frameworks
- CPM, CCPM, XPM, PERT, Adaptive, Theory of Constraints, Six sigma etc.
- Agile Frameworks
- Governance-Risk-Compliance (GRC)-Frameworks
- Micro framework
- W3C frameworks (Resource Description Framework (RDF), etc.)
- E-Business-Frameworks (SAP etc.)
Software frameworks of the backend provide a set of folders and files, including libraries with access to databases, pre-setting template structures, controlling the session management, etc., which is representing the programmers layer / application layer / logical layer. Frontend frameworks offer a set of folders and files including libraries as well, in order to face the UI requirements, addressing the presentation or design layer.
As discussed before, software libraries are a core component of software frameworks and reusable, adaptable and extensible components with source code. The usage of software libraries is a critical success factor in the software market, regarding the software development efficiency and quality. Numerous code repositories in the internet (Github, Bitbucket, CloudForge, Gitlab, GNU Savannah, SourceForge, findjar.com, Apache Maven repository, etc.) enable software teams to decrease their time-to-market, by reusing code components. The challenge for current developers consists in accomplishing the complexity of the library APIs and to capture the functionality of the library.
„Software libraries are collections of code entities, typically with well-defined and documented interfaces, intended to be reused. In contrast to reuse by design and code scavenging, software libraries are reused “as is”. The internals are hidden to the reuser and no modifications are applied to the reusable artifact. This form of reuse is also referred to as black-box reuse.“ (Heinemann 2012, S. 14)
Stack Overflow, a platform Where Developers Learn, Share, & Build software projects is performing a yearly survey with developers. In 2017, a historically high amount of 64,000 developers were asked from the platform about programming languages, libraries, databases, etc. According to the survey, the most used software library is node.js (47,1%), followed by angularJS (44,3%), .NET Core (33,4%), React (19,5%), Cordova (11,0%), Firebase (9,8%), Xamarin (8,3%), Hadoop (5,7%), and Spark (4,7%) (Vgl. Stack Overflow 2017 in fossbytes 2017).
In this section you´ll get to know, which programming languages I prefer(red) and how I use them. At the end of the ’90’s, I started to program in Java that was 20 years ago and Java is still in the game:
On the server-side I`ve changed from Java to the python platform due to several reasons, to name a few: the intuitive language design, the usability of data science, and artificial intelligence (AI) libraries, such as Python Anaconda and PyTorch.
Heinemann, L. (2012): Effective and Efficient Reuse with Software Libraries. Technische Universität München. Dissertation. Univ.-Prof. Dr. Daniel Cremers.
Stack Overflow in Fossbytes (2017): Most Popular Programming Languages, Frameworks, Libraries, And Databases | 2017
Computer-aided Software Engineering (CASE)-tools and Integrated Development Environment (IDE) (Article IV)
Computer-aided Software Engineering (CASE)-tools and Integrated Development Environment (IDE)
Computer-aided software engineering (CASE)-tools or integrated development environments (IDE) are a group of software tools with methods and functions supporting the development, such as source code editing functionalities and building automation. Also, it´s possible to integrate software frameworks into the workflow, plus, a debugger and sometimes a version control system with CASE-or IDE-tools. NetBeans and Eclipse additionally contain a compiler and an interpreter. In many tools the construction is further simpified by a graphical user interface (GUI) and a class and object browser. CASE- and IDE tools include a long list and you may be surprised, I’ve compiled them below:
- Android Studio
- Eclipse Che
- Python Tools for Visual Studio
- Komodo IDE
- Ninja IDE
- Eclipse Web Tools
- Oracle JDeveloper
- Visual Studio
- Pacestar UML
- Visual Paradigm
- IBM Rational Rose XDE
Testing and Quality Assurance (Q&A) (Article V)
Nowadays, in software testing the agile methodology is state-of-the-art. The most popular frameworks are Scrum and Kanban (see also Article I). For example, the test plan is designed in a team setup, including the test requirements and specifications, the test versioning and the design of test cases. The main tasks in software testing are tests of functionality, usability, performance, and special methods such as eyetracking, mousetracking, etc. The test setup and design of the test-infrastructure is also a task to be defined in the start phase. Additionally, the test manager has the task to specify niche and mobile test cases and to manage the toolstest.
The test documentation framework ISO/IEC/IEEE 29119 is an international agreed set of standards. The test executions, reports, metrics, KPIs, the bug tracking, etc., should be managed by test management and automation tools.
Test Management and Automation Tools
Next a list of test management and automation tools. Test automation tools can be divided into (qassymphony 2018):
- Functional testing tools
- Katalon Studio
- HP Unified Functional Testing (UFT)
- IBM Rational Functional Tester
- Tricentis Tosca Testsuite
- Worksoft Certify
- Integration/API testing
- CA Technologies Application Test
- IBM Rational Test Workbench
- Parasoft SOAtest
- SmartBear Ready! API
- Crosscheck Networks SOAPSonar
Further tools for the support of the test management are as follows:
- JIRA + Zephyr
- Kiwi TCMS
- Mozilla Testopia
- Plutora Test
- Test Collab
- TestFLO for JIRA
- etc. (a longer list is available here)
An environment for the transparent, detailed, update flexible, collaboration and communication tool, is JIRA agile, which is also helpful in the processing of other phases of the software process.
<<Previous Article>>…<<Next Article>>
qassymphony (2018): 100+ Best Software Testing Tools – (Research Done for You!)
Delivery Management and Software Lifecycle (Article VI)
In this article, the delivery management and software lifecycle management (SLM) or application lifecycle management (ALM) will be discussed in the context of agile methodologies and in particular with the example of Scrum. An exemplary scrum-based tracking of the teams efforts, the implementation of corrective actions, the delivery Monitoring, the program and Portfolio, Software Lifecycle Management (Requirements->Development->Testing-> Deployment->Maintenance->New Requirements->…)
The delivery manager leads the agile and lean teams, using a set of agile and lean tools and practices, in order to realize the product vision of the customer, as the customer-relations manager. A set of key functions of the IT management ensure the delivery of a high quality product to the customer.
Next is a list of some delivery management tools (Capterra 2018):
- Clarity Software
- Courier Management
- Delivery Biz Pro
- DELIVERY CONTROL
- Delivery Management Software
- Delivery Tracking App
- Kiva Logic
- LogiNext Mile
- Microlise Delivery management
- Oracle Primavera Unifier
- Wimo App
- WING DMS
- Zippykind Delivery Software
Software lifecyle management and application lifecycle management
Next are some popular tools for the software lifecycle management and application lifecycle management:
- CA Agile Central (Formerly Rally)
- Code Review Bundle
- DevSuite by TechExcel
- HPE ALM
- JIRA + Confluence + Stash + Bamboo
- Panaya Release Dynamix
- Rommana ALM
- Spira Team
- TeamForge by CollabNet
- TFS by Microsoft
- Version One
Capterra (2018): Delivery Management Software
Softwaretestinghelp (2018): 20 Best Application Lifecycle Management (ALM) Tools and Reviews.
<<Previous Article>>…<<Next Article>>
The Arts and Science of Storytelling & Documentation (Article VII)
Storytelling is so essential because of the high level of complexity of the given domain of software development (SD). The arts and science of it is to make the SD context not only understandable for IT experts but to bring the entire team to a adequate knowledge level and to explain the necessity, the requirements, the SD process and structures to the team. This requires not only making the context as adequate and concise as possible, but also as simply, „emotionally“, „beautifully and wisely“ told as possible. Thus, trying to ensure the people have a good time, while you’re talking about the sense and functionality behind the tool to be built.
Support Identification, Acceptance, Participation, Motivation and Creativity in the Team
Thus, it’s mainly about making complex system processes and structures as efficient as possible while being understandable to stakeholders so that they can identify with the software system as much as possible in the long run and to remember software domain content. Of course, this is not about giving the audience a distorted image or manipulating it. Rather, it is about strengthening the team spirit and the project spirit, with the stated goal to show all those involved in the team, as well as the customers and society, what the high goals of the software are and will deliver in the sense of common development for discussion.
Use Multimodality and Multimediality
Therefore, the art is to tell the „story“ by using multimodal and multimedial forms of communication and interaction. For this purpose, it is important to promote the meaningfulness, the reference, the background and also the underlying know-how of the participants, using the corporate-wide lifelong learning (LLL) because this approach significantly increases the participation, acceptance and creativity of all involved The benefits of the software, the mission, and the vision of the system must be expressed, worded and made a success story. But not just with words, but also as pictures, sounds, videos, tables, diagrams, numbers, symbols, different languages, approaches and models of memory psychology, gestalt theory, neurosciences, sociology, etc., and artificial intelligence (AI).
Outlook and Potential of further technological innovations
Furthermore, it is always worth taking a look outside the box and staying fit for the future, paying close attention to the most innovative and potentially strong IT developments of our time and the interfaces of software development in the following industries:
- Cloud Computing
- Robotics / Drones
- Augmented Reality / Virtual Reality
- Artificial Intelligence
- 3D printing
(not in the order of relevancy)
…with the goals digitalization, decentralisation, diversification, virtualization, augmentation, socialization automatization, standardization, formalization, modellizing, tranformation, etc.
Thanks for stopping by!