====== [hemmerling] System Design ====== Related pages: *[[metro.html|Flat Design]]. *[[requirements.html|Requirements]]. *[[specbyex.html|Specification by Example, Modelling by Example]]. *[[sdocumentation.html|Software Documentation]]. *[[dsl.html|Textual and Graphical Modeling by Domain Specific Languages]]. *[[testing.html|Testing]]. *[[usability.html|Usability]]. ===== Organizations & Events ===== ==== Organizations ==== *[[http://www.gfse.de/|Gesellschaft für Systems Engineering e.V. German Chapter of INCOSE]]. *[[http://www.incose.org/|International Council on Systems Engineering ( INCOSE )]]. *[[http://www.iasaglobal.org/|International Association of Software Architects]] ( IASA ). *[[http://www.oose.de/|oose Innovative Informatik GmbH]], Hamburg. *[[http://www.oose.de/abendvortraege.html|oose Innovative Informatik GmbH "OOSE Abendvorträge"]]. ==== Events ==== *BarCamp [[http://berlin.systemscamp.org/|system.camp berlin]] in Berlin. *2015-04-18 - I joined. *2016-04-16. *Systemcamp. *BarCamp [[http://camp.modelingcraftsmanship.com/|Modeling Craftsmanship Camp]] in Hannover, 2016-11-19 - I joined. *Barcamp [[http://nord.systemscamp.org/|syscamp.nord]] in Hamburg, 2016-12-03. ===== Famous Quotations "The determined Real Programmer can write FORTRAN programs in any language" ===== *[[http://homepages.inf.ed.ac.uk/rni/papers/realprg.html|Ed Post, "Real Programmers Don't Use Pascal"]], DATAMATION, July 1983, pp. 263-265 (Readers' Forum) - "Besides, the determined Real Programmer can write FORTRAN programs in any language" :-(. *[[http://www.cs.virginia.edu/~evans/cs655-S00/readings/ewd498.html|Edsger W.Dijkstra "How do we tell truths that might hurt?"]], 1975-06-18. ===== Best Practices for "Maintainable Code" & "Good Software Development Structure & Tools ===== *SOLID. *Clean Code. *Design Pattern. *Encapsulation. *Code Review. *DRY ( Don´t Repeat Yourself ). *MVC / MVVM. *Law of Demeter. *TDD. *Refactoring. *4 Rules of Simple Design. *KISS. *Diagnostic Exception Handling. *BUS-Factor ( how many team members must leave to kill the project...). ===== Agile Development - Procedure Models / Process Models ===== *[[http://www.agile-development-framework.net/|Agile Development Framework]] by [[http://www.goloroden.de/|Golo Roden]]. ===== Arc42 ===== *"arc42 contains a template for development, documentation and communication of software architectures". *Book [[http://www.amazon.de/exec/obidos/ASIN/B00A9T7758/hemmerling-21|Peter Hruschka, Gernot Starke: "Zertifizierung für Softwarearchitekten - Ihr Weg zur iSAQB-CPSA-F Prüfung [Kindle Edition]"]]. *[[http://www.arc42.de/about/page35/sommeraktion.html|arc42 - Resourcen für Software-Architekten "Die Sommer-Aktion"]] - Pree paper book. *[[http://www.arc42.org/|arc42 - Ressources for software architects]]. *[[http://www.arc42.de/|arc42 - Resourcen für Software-Architekten]] ( German ). *Wiki [[http://confluence.arc42.org/|arc42 Wiki]] - "arc42 Templates (international...)". ===== Architecture Tradeoff Analysis Method ( ATAM ) ===== *[[http://resources.sei.cmu.edu/library/asset-view.cfm?assetid=513908|Carnegie Mellon University, Software Engineering Institute "Architecture Tradeoff Analysis Method Collection"]]. *[[http://www.cio-wiki.org/wiki/Architecture_Tradeoff_Analysis_Method_(ATAM)|CioIndex "Architecture Tradeoff Analysis Method (ATAM)"]]. *[[http://www.concisesoftware.com/architecture-tradeoff-analysis-method-atam/|Concise Software "Architecture tradeoff analysis method (ATAM)"]]. *[[http://en.wikipedia.org/wiki/Architecture_tradeoff_analysis_method|EN.Wikipedia "Architecture tradeoff analysis method"]] ( ATAM ). ===== Attribute-Driven Design ( ADD ) ===== *[[http://en.wikipedia.org/wiki/Attribute-driven_design|EN.Wikipedia "Attribute-driven design"]]. ===== Command Query Responsibility Segregation ( CQRS ) & Event Sourcing ( ES ) ===== ==== CQRS and the CAP Theorem / CAP Triangle ==== *[[http://en.wikipedia.org/wiki/CAP_theorem|EN.Wikipedia "CAP theorem"]], [[http://de.wikipedia.org/wiki/CAP-Theorem|DE.Wikipedia "CAP-Theorem"]] -Consistency ( all nodes see the same data at the same time ) -Availability ( a guarantee that every request receives a response about whether it was successful or failed ) -Partition tolerance *Classical IT design, including relational ( SQL ) databases, covers "Consistency" and "Availability". *CQRS, as often implemented in NoSQL databases, covers "Availability" and "Partition tolerance". *Messages: Commands vs. events: *Commands are imperative, sometimes they are not for every party, there might be exceptions. *Events are past, they happened. Events which happened can´t be changed. ==== Cross-Cutting Concern - The "Opposite" ==== *[[http://en.wikipedia.org/wiki/Cross-cutting_concern|EN.Wikipedia "Cross-cutting concern"]], [[http://de.wikipedia.org/wiki/Cross-Cutting_Concern|DE.Wikipedia "Cross-Cutting Concern"]]. ==== Resources ==== *According to experts, CQRS is not intended and useful for: *CRUD applications. *Big data storage ( e.g. massive data acquisition ). *Blog [[http://cqrs.wordpress.com/|Wordpress "CQRS"]]. *[[http://code.google.com/p/nug-ms/|Google Code "nug-ms. NUG Münster - Code Repository of the .Net UserGroup Münster"]]. *[[http://code.google.com/p/nug-ms/downloads/detail?name=20110108-CQRS-Einfuehrung.pdf|nug-ms., slides "Folien der CQRS Demo vom 08.01.2011"]]. *[[http://www.heise.de/developer/artikel/CQRS-neues-Architekturprinzip-zur-Trennung-von-Befehlen-und-Abfragen-1797489.html|Heise Developer "Marco Heimeshoff, Philip Jander: CQRS – neues Architekturprinzip zur Trennung von Befehlen und Abfragen. Getrennt sind wir stark"]], [[http://www.h-online.com/developer/features/CQRS-an-architecture-precept-based-on-segregation-of-commands-and-queries-1803276.html|The H Developers "Marco Heimeshoff, Philip Jander: CQRS – a new architecture precept based on segregation of commands and queries"]]. *[[http://blog.adnanmasood.com/2013/04/19/cloud-computing-and-cqrs-resources-notetoself/|R&D. Adnan on Technology, Research & Development "Cloud Computing and CQRS Resources"]]. *Slides [[http://www.slideshare.net/pjvdsande/rethink-your-architecture-with-cqrs|SlideShare, Pieter Joost van de Sande "Rethink your architecture with CQRS"]]. *Slides [[http://www.slideshare.net/NeilRobbins/an-intro-to-cqrs-4757317|SlideShare, Neil Robbins, "An Introduction To CQRS"]]. *Slides [[http://www.slideshare.net/ndrssmn/eventzentrierte-architekturen|SlideShare, ndrssmn "Eventzentrierte Architekturen"]] -> Advertising of SoCraMOB 2014.3 :-). *Slides [[http://www.slideshare.net/mbild/cqrs-event-sourcing-28292586|SlideShare, mbild, "CQRS + Event Sourcing"]], @Frankfurt 2013. *Video [[http://www.youtube.com/watch?v=BLKcFQnE4vM&list=UUhY1i61YdkwRCST9dDwjiyg|YouTube "DDD Lean Hangout"]], 2013-09-15. ==== Experts ==== *CQRS expert [[http://www.udidahan.com/|Udi Dahan – The Software Simplist. Enterprise Development Expert & SOA Specialist]]. *CQRS+ES expert [[http://www.codebetter.com/gregyoung/|CodeBetter "Greg Young"]], [[http://www.cqrsinfo.com/|CQRS Info - Command Query Responsibility Segregation]] ( cqrsinfo.com ). *CQRS+ES expert [[http://www.abdullin.com/|Rinat Abdullin - Rinat Abdullin on efficient software development, cloud computing and CQRS]]. *CQRS+ES expert [[http://www.distributedpodcast.com/|Distributed Podcast. CQRS, DDD, Cloud computing and much more!]] ( Jonathan Oliver ,.. ). *[[http://www.heimeshoff.de/|Marco Heimeshoff]]. *[[http://www.github.com/heimeshoff|GitHub "Marco Heimeshoff"]]. *[[http://www.twitter.com/Heimeshoff|Twitter "Marco Heimeshoff, @Heimeshoff"]]. *[[http://gist.github.com/heimeshoff|GitHub Gist "Marco Heimeshoff"]]. *[[http://gist.github.com/heimeshoff/5540636|Marco Heimeshoff "gist:5540636"]] - "If you have two days to learn the very basics of modelling, Domain-Driven Design, CQRS and Event Sourcing, here's what you should do".... *[[http://www.Jander.IT|Philip Jander]], [[http://twitter.com/ph_j|Twitter "Philip Jander"]]. *[[http://www.twitter.com/ph_j|Twitter "Philip Jander, @ph_j"]]. ==== Tools ==== *[[http://ncqrs.codeplex.com/|CodePlex "Ncqrs Framework - The CQRS framework for .NET"]], [[http://www.github.com/ncqrs/ncqrs|Github "ncqrs/ncqrs"]]. *[[http://www.nservicebus.com/|NServiceBus - The most developer-friendly service bus for SOA on .NET]]. *[[http://www.github.com/petrjanda/node-cqrs|Github "petrjanda / node-cqrs"]] - "Node.js implementation of CQRS". ===== Convention based Framework vs. Configuration based Framework ===== *Configuration based framework . *An XML file contains the configuration, which has to be created, edited and maintained ( by the user using an XML editor,..). Legacy in 2015. *Convention based framework. *[[http://programmers.stackexchange.com/questions/25486/what-is-convention-based-framework|StackOverflow "What is convention based framework?"]]. *[[http://en.wikipedia.org/wiki/Convention_over_configuration|EN.Wikipedia "Convention over configuration"]], [[http://de.wikipedia.org/wiki/Konvention_vor_Konfiguration|DE.Wikipedia "Konvention vor Konfiguration"]]. ===== Database Application Design by Data Flow Diagrams ( DFD ) & Entity Relationship Diagrams ( ER ) ===== ==== Tools for Database Application Design by Data Flow Diagrams ( DFD ) ==== *See [[diagrams.html|Diagrams & Graph Visualization]]. ==== Resources ==== *[[http://www.teialehrbuch.de/Kostenlose-Kurse/SQL/14650-Datenflussdiagramm.html|(teia) Lehrbuch "2.3 Datenflussdiagramm"]]. *[[http://en.wikipedia.org/wiki/Data_flow_diagram|EN.Wikipedia "Data flow diagram"]], [[http://en.wikipedia.org/wiki/Physical_Data_Flow|EN.Wikipedia "Physical Data Flow"]], [[http://de.wikipedia.org/wiki/Datenflussdiagramm|EN.Wikipedia "Datenflussdiagramm"]]. ===== Design by Contract / Contract-Driven Development ===== ==== Codius ==== *[[http://www.github.com/codius/|GitHub "codius"]]. *[[http://www.github.com/codius/codius/wiki/Smart-Oracles:-A-Simple,-Powerful-Approach-to-Smart-Contracts|GitHub Wiki of "codius/codius" - "Smart Oracles: A Simple, Powerful Approach to Smart Contracts"]]. *[[http://www.youtube.com/watch?v=eIjyl_rTZ5U|YouTube "Ripple Labs Tech Talk: Introduction to Codius (Nov 2014)"]]. *Hackathon [[http://www.meetup.com/Bitcoin-Startups-Berlin/events/219548044/|Meetup "Bitcoin Startups Berlin", Event "Codius Hackathon"]], 2015-01-14. ==== D ==== *[[http://www.d-programming-language.org/|The D programming language]]. *[[http://www.d-programming-language.org/dbc.html|The D programming language "Contract Programming"]]. ==== Resources ==== *[[http://www.artima.com/intv/serious.html|Artima, Inc. "The Demand for Software Quality. A Conversation with Bertrand Meyer, Part I"]], [[http://www.artima.com/intv/contracts.html|Artima, Inc. "Design by Contract A Conversation with Bertrand Meyer, Part II"]], [[http://www.artima.com/intv/contest.html|Artima, Inc. "Contract-Driven Development. A Conversation with Bertrand Meyer, Part III"]]. *[[http://www.minddriven.de/index.php/technology/development/software-design/contract-driven-development|Mind-driven development "A look at: Contract Driven Development"]]. *[[http://se.inf.ethz.ch/old/people/leitner/|Andreas Leitner]]. *[[http://se.inf.ethz.ch/old/people/leitner/publications/cdd_leitner_esec_fse_2007.pdf|Leitner, A., Ciupa, I., Oriol, M., Meyer, B., Fiva, A., "Contract Driven Development = Test Driven Development - Writing Test Cases"]] ( PDF ). *[[http://www.stackoverflow.com/questions/481312/design-by-contract-vs-test-driven-development|StackOverflow "Design By Contract vs Test Driven Development?"]]. *[[http://www.stackoverflow.com/questions/394591/design-by-contract-and-test-driven-development|StackOverflow "Design By Contract and Test-Driven Development"]]. *[[http://en.wikipedia.org/wiki/Design_by_contract|EN.Wikipedia "Design by contract"]], [[http://de.wikipedia.org/wiki/Design_by_contract|DE.Wikipedia "Design by contract"]]. ===== Design Patterns ===== ==== Microservices ==== === Best Practices 2016 === *With web applications built by Microservices, each Microservice is running in its own process ( i.e. with a Java engine, consuming 256 MB RAM ) and not just as Java task within a single Java engine. *At start of a Java engine, you may set the RAM memory allocation. *So a 64-bit computer with 4 Gbyte of RAM is suitable to run about 10-12 Microservices. *Every Microservice of a web applicatoin may be deployed on a different physical or virtual machine. *The developers are forced to respect interfaces. *Each Microservice may be developed by a different team. *For very-large web applications, it might be useful if several Microservices are responsible for a single Web page ( controlled by a major Webservice ). For normal-size web applications, it's best if a single Web page is controlled by a single Microservice. === Best Practices 2017-02, according to ThoughtWorks === *If you mustn´t do it, don´t do it :-). *Principle. *[[http://en.wikipedia.org/wiki/Divide_and_conquer|EN.Wikipedia "Divide and conquer"]], [[http://de.wikipedia.org/wiki/Teile_und_herrsche|DE.Wikipedia "Teile und herrsche"]]. *[[http://en.wikipedia.org/wiki/Divide_and_conquer_algorithm|EN.Wikipedia "Divide and conquer algorithm"]], [[http://de.wikipedia.org/wiki/Teile_und_herrsche_(Informatik)|DE.Wikipedia "teile und herrsche (Informatik)"]]. *[[http://en.wikipedia.org/wiki/Divide_and_rule|EN.Wikipedia "Divide and rule"]], [[http://de.wikipedia.org/wiki/Divide_et_impera|EN.Wikipedia "Divide et impera"]]. *Microservices should be designed by the principle of separation of business functions. So a domain-driven development might be a success factor. *[[http://en.wikipedia.org/wiki/Domain-driven_design|EN.Wikipedia "Domain-driven design"]], [[https://de.wikipedia.org/wiki/Domain-driven_Design|DE.Wikipedia "Domain-driven Design"]], [[https://martinfowler.com/tags/domain%20driven%20design.html|Martin Fowler - Tagged by: "domain driven design"]]. *Every microservice shall have it's own database, at least it's own database scheme. E.g. With NoSQL databses, e.g. "Cassandra Keyspaces" provide this separation. *[[http://en.wikipedia.org/wiki/Keyspace_(distributed_data_store)|EN.Wikipedia "Keyspace (distributed data store)"]]. *[[http://docs.datastax.com/en/cql/3.1/cql/cql_using/create_keyspace_c.html|DataStax, Inc. "Creating and updating a keyspace"]]. *Communications: *REST ist the Suggested protocol between microservides. *[[rest.html|Representational State Transfer ( REST ]]. *Synchronous communications is prefered. Asynchronous communications, e.g. message driven systems, is very complex and might be just considered for very-large systems. *It might not be useful with a startup project, to generate microservides. But it is useful to design a application at startup, that it can be later devided into microservices. *A good time to start with microservices is, after the startup company got it's first paying customer and makes revenues. *The implementation of API gateways might be useful. By that the external user just knows a generic API, while the API gateway service distributes the data to inner systems with more complex APIs. *UI / HTML interface by microservices: A sceleton HTML page might be feeded by server-side includes from seeral microservices, e.g. in a webshop *Design: -Microservice for product description. -Another microservice for the user recommendations. *[[http://en.wikipedia.org/wiki/Edge_Side_Includes|EN.Wikipedia "Edge Side Includes"]], [[http://de.wikipedia.org/wiki/Edge_Side_Includes|DE.Wikipedia "Edge Side Includes"]]. *Microservices allow to write each microservice in a different programming language and/or a different framework. ==== Multitenancy ==== *Experts told me, that: *Multitenancy is a design decision and so a design pattern, which can´t be easily implemented in a software after non-multitenancy implementation afterwards. *So after e.g. 3 years of successful non-multitenancy implementation, there is no affordable way to implement multitenancy as additional feature, as multitenancy must be concerned at almost any business function and so almost any code function. *It might be cheaper, also with server-based applications, to start a new application instance for each tenant, even if there are "hundreds" of different tenants. *[[http://en.wikipedia.org/wiki/Multitenancy|EN.Wikipedia "Multitenancy"]], [[http://de.wikipedia.org/wiki/Mandantenf%C3%A4higkeit|DE.Wikipedia "Mandantenfähigkeit"]]. ==== Patterns ==== === Flexibilty by Patterns ( Patterns which enable to create flexible Software ) === *Factory and Dependency. *[[http://en.wikipedia.org/wiki/Factory_method_pattern|EN.Wikipedia "Factory method pattern"]], [[http://de.wikipedia.org/wiki/Fabrikmethode|DE.Wikipedia "Fabrikmethode"]]. *[[http://en.wikipedia.org/wiki/Dependency_inversion_principle|EN.Wikipedia "Dependency inversion principle"]], [[http://de.wikipedia.org/wiki/Dependency-Inversion-Prinzip|DE.Wikipedia "Dependency-Inversion-Prinzip"]]. *[[http://de.wikipedia.org/wiki/Dependency_Injection|EN.Wikipedia "Dependency Injection"]], [[http://de.wikipedia.org/wiki/Dependency_Injection|DE.Wikipedia "Dependency Injection"]]. *Strategy Pattern ( Policy Pattern ). *[[http://en.wikipedia.org/wiki/Strategy_pattern|EN.Wikipedia "Strategy pattern"]], [[http://de.wikipedia.org/wiki/Strategie_%28Entwurfsmuster%29|EN.Wikipedia "Strategie (Entwurfsmuster)"]] - "According to the strategy pattern, the behaviors of a class should not be inherited. Instead they should be encapsulated using interfaces". *Decorator Pattern. *[[http://en.wikipedia.org/wiki/Decorator_pattern|EN.Wikipedia "Decorator pattern"]], [[http://de.wikipedia.org/wiki/Decorator|DE.Wikipedia "Decorator"]]. === Some other important Patterns === *[[http://facebook.github.io/flux/|Github.io "Flux - Application Architecture for Building User Interfaces"]], [[http://www.github.com/facebook/flux|GitHub "facebook/flux"]] for Javascript. *[[http://www.fluxxor.com/what-is-flux.html|Fluxxor "What is Flux?"]]. *[[http://medium.com/@amix3k/flux-vs-mvc-design-patterns-57b28c0f71b7#.aqd8edhwx|Amir Salihefendic "Flux vs. MVC"]] - "A look at how Facebook’s Flux pattern solves things differently, especially in relation to the Model-View-Controller (MVC) pattern". *[[http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter|EN.Wikipedia "Model–view–presenter"]], [[https://de.wikipedia.org/wiki/Model-View-Presenter|DE.Wikipedia "Model-View-Presenter"]] for some Java GUI Frameworks like Java Swing and JavaFX. *[[http://en.wikipedia.org/wiki/Model_View_ViewModel|EN.Wikipedia "Model View ViewModel"]], [[http://de.wikipedia.org/wiki/Model_View_ViewModel|DE.Wikipedia "Model View ViewModel"]] ( MVVM ). *The ViewModel is the controller of the traditional Model-View-Controller. The pattern is designed for automatic testing. *Requirements: A software framework which provides "DataBinding". Microsoft .NET 4.5 does! *Microsoft WPF, Microsoft Silverlight, Microsoft Windows 8 Phone and Microsoft Windows 8 Apps are predestined for MVVC, as Databinding is provided. *[[http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller|EN.Wikipedia "Model–view–controller"]], [[http://de.wikipedia.org/wiki/Model_View_Controller|DE.Wikipedia "Model View Controller"]] ( MVC ) #. *Microsoft suggeet using MVC with Microsoft ASP.NET, by providing an software framework which support MVC! *[[https://www.youtube.com/user/envyads/videos|YouTube Channel "envyads"]] - The series of videos "MVC Public Service Announcement". *"Code Behind" Paradigma. *With "Windows Forms", "Code Behind" programming is standard, which is in contrast to the objectives of MVC or MVVM to separate behaviour code from view. *Microsoft does not provide an MVC or MVVM framework, for "Windows Forms":-(. *[[http://en.wikipedia.org/wiki/Multitier_architecture|EN.Wikipedia "Multitier architecture"]], [[http://de.wikipedia.org/wiki/Schichtenarchitektur|DE.Wikipedia "Schichtenarchitektur"]]. ==== Resources ==== *[[http://en.wikipedia.org/wiki/Design_Patterns_%28book%29|EN.Wikipedia "Design Pattterns"]], [[http://de.wikipedia.org/wiki/Entwurfsmuster|DE.Wikipedia "Entwurfsmuster"]], [[http://de.wikipedia.org/wiki/Entwurfsmuster_%28Buch%29|DE.Wikipedia "Entwurfsmuster (Buch)"]]. *[[http://en.wikipedia.org/wiki/Design_pattern|EN.Wikipedia "Design pattern"]]. *[[http://msdn.microsoft.com/en-us/practices/|Microsoft Developer Center - patterns & practices]]. *[[http://www.dofactory.com/|dofactory - #1 in design pattern]] - ".NET Design Patterns and Architectures in C# and VB". *[[http://www.dofactory.com/Patterns/Patterns.aspx|dofactory "Design Patterns"]] in C#. *[[http://www.javacamp.org/designPattern/|JavaCamp.org "Java Design Patterns At a Glance"]] - Design patterns, with implementation in Java. *[[http://www.patterndepot.com/put/|Patterndepot]]. *[[http://www.patterndepot.com/put/8/JavaPatterns.htm|Patterndepot "James W. Cooper 'The Design Patterns. Java Companion']]. *[[http://www.c2.com/|Cunningham & Cunningham, Inc.]]. *[[http://www.c2.com/cgi/wiki|Portland Pattern Repository's Wiki]]. *[[http://www.c2.com/cgi/wiki?DesignPatternsBook|Portland Pattern Repository's Wiki "Design Patterns Book"]]. *[[http://www.24bytes.com/|24bytes.com]]. *[[http://www.patterns.24bytes.com/|24bytes.com - Patterns]]. ==== Literature ==== *Book [[http://www.amazon.de/exec/obidos/ASIN/0201633612/hemmerling-21|Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides "Design Patterns. Elements of Reusable Object-Oriented Software"]]. *Book [[http://www.amazon.de/exec/obidos/ASIN/3827321999/hemmerling-21|Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides "Entwurfsmuster: Elemente wiederverwendbarer objektorientierter Software"]]. *Book [[http://www.amazon.de/exec/obidos/ASIN/3897214210/hemmerling-21|Eric Freeman, Elisabeth Freeman, Kathy Sierra, Bert Bates "Entwurfsmuster von Kopf bis Fuß"]]. *The acompanying website [[http://www.oreilly.de/catalog/hfdesignpatger/|O'Reilly "Entwurfsmuster von Kopf bis Fuß"]]. ===== Don't repeat yourself ( DRY ) vs. Write Everything Twice ( WET ) & Because What If I Need It Later ( BWIINIL )===== *[[http://paulbarry.com/articles/2009/04/01/write-everything-twice-and-because-what-if-i-need-it-later|Paul Berry "'Write Everything Twice' and 'Because What If I Need It Later'"]]. *[[http://www.nofluffjuststuff.com/blog/shawn_hartsock/2012/09/code_samples_and_the_argument_for_wet_versus_dry|No Fluff Just Stuff "Code Samples and the argument for WET versus DRY"]]. *[[http://cagan327.blogspot.de/2006/03/dry-or-wet.html|TechnologyNotes, Notes on Software, Technology and stuff... "DRY or WET"]]. *[[http://en.wikipedia.org/wiki/Don%27t_repeat_yourself|EN.Wikipedia "Don't repeat yourself"]]. ===== Fundamental Modeling Concepts ( FMC ) ===== *[[http://www.fmc-modeling.org/|FMC - Home of Fundamental Modeling Concepts]]. *[[http://de.wikipedia.org/wiki/Siegfried_Wendt|DE.Wikipedia "Siegfried Wendt"]]. *[[http://en.wikipedia.org/wiki/Fundamental_modeling_concepts|EN.Wikipedia "Fundamental modeling concepts"]], [[http://de.wikipedia.org/wiki/Fundamental_Modeling_Concepts|DE.Wikipedia "Fundamental Modeling Concepts"]]. ===== Embedded Systems - The Evolution of System Design for Embedded Systems ===== -Assembly language. -C. -C++. -Objectoriented Software design -Advanced -Interfaces instead of inheritance. -State machines. -Mockup. -Application wireing. ===== Fully Communication Oriented Information Modeling ( FCO-IM ) ===== *FCO-IM does not model reality, but it models the communications about reality :-). *[[http://www.fco-im.nl/|FCO-IM - Fully Communication Oriented Information Modeling]]. *The commercial tool [[http://www.casetalk.com/|CaseTalk]] - "free limited book edition, free student edition, free 30 days evaluation edition". *[[http://en.wikipedia.org/wiki/FCO-IM|EN.Wikipedia "FCO-IM"]], [[http://en.wikipedia.org/wiki/Object-Role_Modeling|EN.Wikipedia "Object-Role Modeling"]]. ===== Functional Flow Block Diagram ( FFBD ), extended Function Flow Block Diagram ( eFFBD ) ===== *[[http://en.wikipedia.org/wiki/Functional_flow_block_diagram|EN.Wikipedia "Functional flow block diagram"]]. *[[http://www.graffletopia.com/stencils/146|Graffletopia "kustere: Functional Flow Block Diagram (FFBD)"]]. *[[http://www.threesl.com/pages/webletter-November06/eFFBD_Reference_Functions.php|3SL Cradle - November 2006 [Cradle 5.4] "eFFBD Reference Functions"]] - "The symbols provided in extended Function Flow Block Diagrams (eFFBDs) in the Essential and Implementation domains have been extended to include reference functions". ===== ICONIX ===== *[[http://www.iconixsw.com/|ICONIX - Better Agile Methodology and Project Management]]. *[[http://www.sparxsystems.com/partners/iconix/|SPARC Systems "Iconix"]]. *Book [[http://www.amazon.de/exec/obidos/ASIN/1430243058/hemmerling-21|Don Rosenberg, Matt Stephens: "Use Case Driven Object Modeling with UMLTheory and Practice"]]. *[[http://www.informit.com/articles/article.aspx?p=167902|PEARSON informIT "Introduction to the ICONIX Process of Software Modeling"]]. *Use of just 4 UML diagrams, in this very-special order ( CLASS diagram not as second, but last diagram ): -UML user case diagram -UML robustness diagram. -UML sequence diagram. -UML class diagram. *[[http://en.wikipedia.org/wiki/ICONIX|EN.Wikipedia "ICONIX"]]. ===== "Imperative Programming" vs "Declarative Programming" ===== ==== Old-fashioned "Structured Programming" aka "Imperative Programming" ==== *The commercial CASE TOOL [[http://www.easycase.at/|EasyCode]] ( formerly: SIEMENS EasyCase ). *[[http://de.wikipedia.org/wiki/EasyCODE|DE.Wikipedia "EasyCODE"]]. *The commercial CASE tool [[http://www.myfriend.de/|GSK Gesellschaft für Konzeption, Entwicklung und Optimierung von Software und Systemen mbH "MyFriend"]]. ==== Resources ==== *[[http://en.wikipedia.org/wiki/Imperative_programming|EN.Wikipedia "Imperative programming"]], [[http://de.wikipedia.org/wiki/Imperative_Programmierung|DE.Wikipedia "Imperative Programmierung"]]. *[[http://en.wikipedia.org/wiki/Declarative_programming|EN.Wikipedia "Declarative programming"]], [[http://de.wikipedia.org/wiki/Deklarative_Programmierung|DE.Wikipedia "Deklarative Programmierung"]]. ===== Interface Description Language ( IDL ) ===== *[[http://www.omg.org/gettingstarted/omg_idl.htm|Object Management Group, Inc. ( OMG ) "OMG IDL: Details"]]. *[[http://en.wikipedia.org/wiki/ISO_14750|EN.Wikipedia "ISO 14750"]]. *[[http://en.wikipedia.org/wiki/Interface_description_language|EN.Wikipedia "Interface description language"]], [[http://de.wikipedia.org/wiki/Schnittstellenbeschreibungssprache|DE.Wikipedia "Schnittstellenbeschreibungssprache"]]. *[[http://en.wikipedia.org/wiki/IDL_specification_language|EN.Wikipedia "IDL specification language"]]. ===== Literate Programming ===== *[[http://www.softpanorama.info/People/Knuth/literate_programming.shtml|Nikolai Bezroukov, Softpanorama "Literate programming"]]. *[[http://www.literateprogramming.com/|Literate Programming]]. *[[http://www.literateprogramming.com/cweb_download.html|Literate Programming "Download"]] - "CWEB". *"CWEB for Win32 - Download", "CWEB Examples". *[[http://en.wikipedia.org/wiki/Literate_programming|EN.Wikipedia "Literate programming"]], [[http://de.wikipedia.org/wiki/Literate_programming|DE.Wikipedia "Literate programming"]] ===== Model Driven Architecture ( MDA ) & Dynamic System Initiative ===== *[[http://www.omg.org/mda/|Object Management Group "OMG Model Driven Architecture"]]. *Book [[http://www.amazon.de/exec/obidos/ASIN/032119442X/hemmerling-21|Anneke Kleppe, Jos Warmer, Wim Bast: "MDA Explained"]]. *Book [[http://www.amazon.de/exec/obidos/ASIN/0471202843/hemmerling-21|Jack Greenfield, Wojtek Kozaczynski: "Software Factories"]] - the book about the "Dynamic System Initiative". *Book [[http://www.amazon.de/exec/obidos/ASIN/0521537711/hemmerling-21|Chris Raistrick, Paul Francis, John Wright "Model Driven Architecture with Executable UML"]]. *The free [[http://www.kc.com/|Kennedy Carter "iUMLLite"]] is shipped on CD with the book. //The "lite" version supports class and use case diagrams, but no sequence diagrams//. ===== Modelling SA/SD - Structured Analysis ( SA ) and Structured Design ( SD ) ===== *[[http://en.wikipedia.org/wiki/Structured_analysis|EN.Wikipedia "Structured analysis"]], [[http://de.wikipedia.org/wiki/Strukturierte_Analyse|DE.Wikipedia "Strukturierte Analyse"]] ( SA ). *[[http://en.wikipedia.org/wiki/Tom_DeMarco|EN.Wikipedia "Tom DeMarco"]], [[http://de.wikipedia.org/wiki/Tom_DeMarco|DE.Wikipedia "Tom DeMarco"]]. *Book [[http://www.amazon.de/exec/obidos/ASIN/0932633110/hemmerling-21|Derek J. Hatley, Imtiaz A. Pirbhai: "Strategies for Real Time System Specification"]], [[http://www.amazon.de/exec/obidos/ASIN/0932633048/hemmerling-21|Derek J. Hatley, Imtiaz A. Pirbhai: "Strategien für die Echtzeit - Programmierung"]]. *[[http://www.dorsethouse.com/authors/pirbhai.html|Dorset House Publishing "Imtiaz A. Pirbhai"]]. ===== Object Oriented Design, Object Oriented Programming ===== ==== Dependency inversion principle ==== === Application Wireing Frameworks === *[[http://code.google.com/p/pococapsule/|Google Code "pococapsule. An IoC and DSM framework for C/C++ applications"]] - "PocoCapsule is an Inversion of Control (IoC) container, a.k.a Dependency Injection (DI) framework (see article IoC vs DI), as well as a Domain Specific Modeling (DSM) engine (see article DSM in IoC)". *[[http://www.pocomatic.com/|Pocomatic Software]]. *[[http://www.pocomatic.com/docs/whitepapers/pococapsule-cpp/|Pocomatic Software "PocoCapsule/C++ IoC and DSM container"]]. *Blog [[http://pococapsule.blogspot.de/|PocoCapsule: IoC container for C++]]. *[[http://stackoverflow.com/questions/2479611/what-is-pococapsule-current-status|StackOverflow "What is PocoCapsule current status?"]] - "I have been looking for this myself for some time now, and came realize that there are no good IoC Containers in C++. There are a lot of problems implementing this. Getting something like the C# IoC Containers (Castle Windsor, Unity, etc.) is out of reach". *[[http://www.github.com/shdwshard/PocoCapsule|GitHub "shdwshard/PocoCapsule"]] - "Poco Capsule Git Clone ". *[[http://springframework.net/|Spring.NET Application Framework]]. *[[http://www.springframework.net/doc-latest/reference/html/objects.html|Spring.NET Documentation "Chapter 5. The IoC container"]]. *[[http://springframework.net/doc-latest/reference/html/quickstarts.html|Spring.NET Documentation "Chapter 37. IoC Quickstarts"]]. === Resources === *[[http://www.martinfowler.com/articles/injection.html|Martin Fowler "Inversion of Control Containers and the Dependency Injection pattern"]]. *[[http://en.wikipedia.org/wiki/Dependency_inversion_principle|EN.Wikipedia "Dependency inversion principle"]], [[http://de.wikipedia.org/wiki/Dependency-Inversion-Prinzip|DE.Wikipedia "Dependency-Inversion-Prinzip"]]. *[[http://en.wikipedia.org/wiki/Protocol_%28object-oriented_programming%29|EN.Wikipedia "Protocol (object-oriented programming)"]], [[http://en.wikipedia.org/wiki/Interface_%28Java%29|EN.Wikipedia "Interface (Java)"]], [[http://de.wikipedia.org/wiki/Schnittstelle_%28Objektorientierung%29|DE.Wikipedia "Schnittstelle (Objektorientierung)"]]. *[[http://en.wikipedia.org/wiki/Inversion_of_control|EN.Wikipedia "Inversion of control"]], [[http://de.wikipedia.org/wiki/Inversion_of_Control|DE.Wikipedia "Inversion of Control"]], [[http://en.wikipedia.org/wiki/Hollywood_principle|EN.Wikipedia "Hollywood principle"]] - "Don't call us, we'll call you" *[[http://de.wikipedia.org/wiki/Liste_von_Dependency_Injection_Frameworks|DE.Wikipedia "Liste von Dependency Injection Frameworks"]]. *"Tell, don´t ask". *[[http://www.martinfowler.com/bliki/TellDontAsk.html|Martin Fowler "TellDontAsk"]], 2013-09-15. *[[http://www.pragprog.com/articles/tell-dont-ask|The Pragmatic Bookshelf "Tell, Don't Ask"]]. *[[http://gist.github.com/janernsting/913b40698f0e21a808a0|Github "janernsting / game_of_life_test.py"]] *If your favourite object oriented programming language does not have "Interfaces", you may alternatively also use an "Abstract Class". ==== Javascript - Concepts of Javascript ==== *[[http://en.wikipedia.org/wiki/JavaScript|EN.Wikipedia "JavaScript"]], [[http://de.wikipedia.org/wiki/JavaScript|DE.Wikipedia "JavaScript"]]. *Prototype-based - "JavaScript uses prototypes ( [[http://en.wikipedia.org/wiki/Prototype-based_programming.|EN.Wikipedia "Prototype-based programming"]], [[http://de.wikipedia.org/wiki/http://de.wikipedia.org/wiki/Prototypenbasierte_Programmierung|DE.Wikipedia "Prototypenbasierte Programmierung"]] ) where many other object oriented languages use classes for inheritance": *Prototypes. *Functions as object constructors. *Functions as methods. *Implicit and Explicit Delegation - JavaScript is a Delegation Language ( [[http://en.wikipedia.org/wiki/Delegation_%28programming%29|EN.Wikipedia "Delegation (programming)"]], [[http://de.wikipedia.org/wiki/Delegation_%28Softwareentwicklung%29|DE.Wikipedia "Delegation (Softwareentwicklung)"]] ) *Functions as Roles ( Traits and Mixins ). *[[http://gist.github.com/petsel/7677638|GitHub "petsel / The many »Talents« of JavaScript"]]. ==== Object Calisthenics ==== *Book [[http://www.amazon.de/exec/obidos/ASIN/193435614X/hemmerling-21|ThoughtWorks Inc.: "The ThoughtWorks Anthology: Essays on Software Technology and Innovation"]]. *[[http://www.markhneedham.com/blog/2008/11/06/object-calisthenics-first-thoughts/|Mark Needham - Thoughts on Software Development "Object Calisthenics: First thoughts"]]. *Rules. -Use only one level of indentation per method. -Don’t use the else keyword. -Wrap all primitives and strings. -Use only one dot per line. -Don’t abbreviate. -Keep all entities small. -Don’t use any classes with more than two instance variables. -Use first-class collections. -Don’t use any getters/setters/properties. ==== Object-relational Mapping ==== *[[http://www.medium.com/@johnkevinmbasco/domain-models-that-are-100-ignorant-of-persistence-and-orm-unaware-d8f7a8253c7b|Medium, John Kevin M. Basco "Hexagonal Architecture: Domain Models that are 100% ignorant of persistence and ORM unaware"]]. *[[http://en.wikipedia.org/wiki/Object-relational_mapping|EN.Wikipedia "Object-relational mapping"]], [[http://de.wikipedia.org/wiki/Objektrelationale_Abbildung|DE.Wikipedia "Objektrelationale Abbildung"]]. *[[http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software|EN.Wikipedia "List of object-relational mapping software"]]. ==== Type Composition and Inheritance ==== *[[http://www.holub.com/|Allen I. Holub]]. *[[http://www.holub.com/publications/notes_and_slides/|Allen I. Holub "Course Notes and Slides by Allen Holub"]]. *[[http://www.holub.com/publications/other/bankofallen.html|Allen I. Holub "The Bank-of-Allen Project: The OO-Design Process from Conception to Modeling"]]. ==== Ports and Adapters ==== *[[http://alistair.cockburn.us/Hexagonal+architecture|Alistair Cockburn "Hexagonal architecture"]] - "The Pattern: Ports and Adapters ('Object Structural')"#. *Communication between different layers: "Think in slices, not in layers ( Lasagna )"! ==== Critical Review of the Success of OOP in General ==== *[[http://www.betterprogramming.pub/object-oriented-programming-the-trillion-dollar-disaster-92a4b666c7c7|BetterProgramming "Object-Oriented Programming — The Trillion Dollar Disaster. Why it’s time to move on from OOP"]], 2019. ===== Resource-oriented Computing ===== *[[http://en.wikipedia.org/wiki/Resource-oriented_computing|EN.Wikipedia "Resource-oriented computing"]]. ===== Clean Software Installation ===== ==== Sideloading ==== *[[http://en.wikipedia.org/wiki/Sideloading|EN.Wikipedia "Sideloading"]]. ==== Installation with Signature ==== *[[http://www.geek.com/articles/news/microsoft-signature-an-expensive-way-to-remove-crapware-2010104/|Geek "Microsoft Signature: an expensive way to remove crapware"]]. *[[http://www.makeuseof.com/tag/how-to-make-your-pc-a-microsoft-signature-pc-without-paying-99/|MakeUseOf "How To Make Your PC A Microsoft Signature PC Without Paying $99"]]. *[[http://www.microsoftstore.com/store/msstore/en_US/pd/ThemeID.27509700/Microsoft-Signature-Premium/productID.235559700|"Meet Microsoft Signature"]] - "PCs with Signature will help ensure you get the best experience with Windows 8. It is the cleanest Windows 8 experience with no junkware is installed – it’s clean and easy!". *[[http://www.techradar.com/news/software/operating-systems/microsoft-signature-is-shameful-1091514|TechRadar "Microsoft Signature is shameful. Signature is Windows 7 as it should be sold anyway"]]. ===== ITU-T Specification and Description Language (SDL) ===== [[sdl.html|ITU-T Specification and Description Language (SDL)]] ===== SOLID ( S.O.L.I.D ) ===== *[[http://en.wikipedia.org/wiki/SOLID_%28object-oriented_design%29|EN.Wikipedia "SOLID (object-oriented design)"]], [[http://de.wikipedia.org/wiki/Prinzipien_objektorientierten_Designs#SOLID-Prinzipien|DE.Wikipedia "Prinzipien objektorientierten Designs"]]. -[[http://en.wikipedia.org/wiki/Single_responsibility_principle|EN.Wikipedia "Single responsibility principle"]], [[http://de.wikipedia.org/wiki/Single-Responsibility-Prinzip|EN.Wikipedia "Single-Responsibility-Prinzip"]]. -[[http://en.wikipedia.org/wiki/Liskov_substitution_principle|EN.Wikipedia "Liskov substitution principle"]], [[http://de.wikipedia.org/wiki/Liskovsches_Substitutionsprinzip|EN.Wikipedia "Liskovsches Substitutionsprinzip"]]. -[[http://en.wikipedia.org/wiki/Interface_segregation_principle|EN.Wikipedia "Interface segregation principle"]], [[http://de.wikipedia.org/wiki/Liskovsches_Substitutionsprinzip|EN.Wikipedia "Liskovsches Substitutionsprinzip"]]. -[[http://en.wikipedia.org/wiki/Dependency_inversion_principle|EN.Wikipedia "Dependency inversion principle"]], [[http://de.wikipedia.org/wiki/Dependency-Inversion-Prinzip|EN.Wikipedia "Dependency-Inversion-Prinzip"]]. ===== Specification by Example ===== [[specbyex.html|Specification by Example]] ===== SPES2020 ===== *The book [[http://www.amazon.de/exec/obidos/ASIN/3642346138/hemmerling-21|Klaus Pohl, Harald Hönninger, Reinhold Achatz, Manfred Broy "Model-Based Engineering of Embedded Systems: The SPES 2020 Methodology"]]. *[[http://sse.uni-due.de/en/research/projects/spes-xtcore/|Universität Duisburg, Software Systems Engineering, Prof. Dr. Klaus Pohl "SPES XTCore - Software Plattform Embedded Systems 2020 XTCore"]]. *[[http://spes2020.informatik.tu-muenchen.de/|Technische Universität München "SPES 2020. Software Plattform Embedded Systems"]]. ===== Story Driven Modeling ( SDM ) ===== ==== Example "Mensch-Ärgere-Dich-Nicht" ==== -Textual use case description, of [[http://de.wikipedia.org/wiki/Mensch_%C3%A4rgere_Dich_nicht|DE.Wikipedia "Mensch ärgere Dich nicht"]]. -**Story Boarding (OOA) ( Test specification ) -> Object diagram.** # That's the new approach! -Class diagram deviation ( OOD ). -Behaviour deviation ( Coding ) -> Activity Diagram. How may I change the object model, to get from one state to the next ? How may I proceed from one object ot the next object ? How do I generate behaviour for the objects ? -Code generation. -Validation ( Testing ). ==== Resources ==== *Albert Zündow. *[[http://seblog.cs.uni-kassel.de/|Software Engineering Research Group Kassel. Department of Computer Science and Electrical Engineering]]. *[[http://www.se.eecs.uni-kassel.de/typo3/index.php?albert|Software Engineering Research Group Kassel - Prof. Dr. Albert Zündorf]]. *The free Fujaba. *[[http://de.wikipedia.org/wiki/Fujaba|DE.Wikipedia "Fujaba"]]. *[[http://www.fujaba.de/|Universität Paderborn "Fujaba Tool Suite"]]. *[[http://www.youtube.com/watch?v=nwcsj_Iz4ao|YouTube, GoogleTechTalks, Albert Zündow "Story Driven Modeling with Fujaba: Turning Scenarios into Automated Tests"]]. *The commercial [[http://www.uml-lab.com/|Yatta Solutions GmbH "UML LAB"]], [[http://www.uml-lab.com/uml-lab/|Yatta Solutions GmbH "UML LAB"]] - "Round-Trip-Engineering. Intuitive class diagram editor. Individual CodeStyles". *[[http://www.ifib.uni-oldenburg.de/35939.html|Prof. Dr. Ira Diethelm]]. *Maybe there will be a book about this topic by Albert Zündow and [[http://www.ulno.net/|Ulrich Norbisrath]] in the future ?! ===== Structured Program Theorem ===== *[[http://en.wikipedia.org/wiki/Structured_program_theorem|EN.Wikipedia "Structured program theorem"]]. ===== Style Guides ===== ==== Apple ==== *[[http://developer.apple.com/resources/|Apple Developer "Resources for Apple Developers"]]. *[[http://developer.apple.com/library/mac/navigation/#section=Resource%20Types&topic=Guides|Apple Developer "Mac OS X Reference Library"]] - "Guides. Conceptual and task-oriented information. Guides include overviews, tutorials, programming guides, server administration guides, and, for developer tools, user guides". *Classical Pre-MacOSX ( MacOS9, MacOS8, MacOS7.. ) Style Guides. *"Apple Developer Connection - Apple's Developer Guides". *"Macintosh Human Interface Guidelines". *"Macintosh Toolbox Essentials". ==== Atlassian ==== *[[http://developer.atlassian.com/design/|Atlassian Design Guidelines]] - "Design principles, components, patterns and guidance for building awesome Atlassian products and add-ons" ==== Microsoft ==== *[[http://msdn.microsoft.com/en-us/library/aa511258.aspx|Microsoft MSDN "Windows User Experience Interaction Guidelines"]] for Vista, Win7. *[[http://msdn.microsoft.com/en-us/library/ff637515%28VS.92%29.aspx|Microsoft MSDN "Design Resources for Windows Phone"]]. ===== Test Driven Design ( TDD ) ===== *See [[testing.html|Testing, Code Reviews]]. *[[http://en.wikipedia.org/wiki/Test-driven_development|EN.Wikipedia "Test-driven development"]], [[http://de.wikipedia.org/wiki/Testgetriebene_Entwicklung|DE.Wikipedia "Testgetriebene Entwicklung"]]. ===== Twelve-Factor App ===== *[[http://www.12factor.net/|The Twelve-Factor App]] by [[http://www.adamwiggins.com/|Adam Wiggins]]. *[[http://www.github.com/adamwiggins/12factor|GitHub "adamwiggins/12factor"]]. *[[http://devcenter.heroku.com/articles/architecting-apps|Heroku Devcenter "Architecting Applications for Heroku"]] - "The Twelve Factor app, written by Heroku co-founder Adam Wiggins, is a methodology for building software-as-a-service apps in modern deployment environments". ===== UML, SysML ===== [[uml.html|Unified Modeling Language ( UML ), Systems Modeling Language ( SysML )]] ===== Unsupported Software Development :-( ===== ==== Big Ball of Mud :-( ==== *[[http://www.laputan.org/mud/| Brian Foote and Joseph Yoder "Big Ball of Mud"]]. ==== Rogue Programming :-( ==== *[[http://www.graymattersystems.com/6-causes-of-rogue-programming-in-manufacturing-and-5-reasons-you-need-to-avoid-it|Gray Matter Systems "6 Causes of Rogue Programming In Manufacturing — and 5 Reasons You Need to Avoid it"]] - Free PDF. *"I call the disease “rogue” programming, but it has other names. It is also called "**unsupported software development**", "**custom software development**", "**skunkworks**", "**homegrown applications**" and many other names. Rogue development is usually performed in Microsoft Access, Microsoft Excel, or Visual Basic (including VBA) and sits on SQL Server or II S boxes. *"Sometimes shop floor PCs are converted to servers by the addition of IIS. Rogue development typically starts small -- as point solutions such as managing a specific group of people (i.e. Maintenance) or a specific process (i.e. test stands, or test loops)". *"Sometimes the application stays small and isolated, but it can also grow tentacles into other systems/groups and new functionality until it becomes business critical and complex". *[[http://www.immediateannuities.com/references/ia/rules-of-the-road.htm|ImmediateAnnuities.com "Rogue Programming"]] - "'Rogue Programming' is any software or other materials which contain a computer virus, trojan horse, timebomb, worm or other rogue programming". *Roguelike Development -> see [[codingdojo.html|Coding Dojo / Coding Kata / Randori / Code Retreat - Group-Awareness, Self-Awareness, Self-Training in Software Development as well as Developer Contests & Developer Challenges]]. ===== Usability ===== *[[usability.html|Usability]]. ===== Use Case Planning ( Use Case Points, Use Case Point Method ) ===== *"Use Case Planning" is not about the agile project managment method "Storytelling". *[[http://en.wikipedia.org/wiki/Storytelling|EN.Wikipedia "Storytelling"]], [[http://de.wikipedia.org/wiki/Storytelling_(Methode)|DE.Wikipedia "Storytelling (Methode)"]]. *One of the latest development of this method is "Use Case Points 3.0" ( UCP 3.0 ). *[[http://www.google.de/search?q=ucp+3.0|Google - Search for "ucp 3.0"]]. *[[http://en.wikipedia.org/wiki/Use_Case_Points|EN.Wikipedia "Use Case Points"]], [[http://de.wikipedia.org/wiki/Use_Case_Point-Methode|DE.Wikipedia "Use Case Point-Methode"]]. ===== Literature ===== *[[http://www.redbooks.ibm.com/|IBM Redbooks]]. *The free PDF book [[http://www.software.ibm.com/webapp/iwm/web/signup.do?source=swg-rtl-sd-wp&S_PKG=eb_sys-eng-dummies|Cathleen Shamieh "Systems Engineering For Dummies. IBM Limited Edition"]] ( btw, I got a free paper issue, at an IBM event :-) ). *The book [[http://www.amazon.de/exec/obidos/ASIN/3897215675/hemmerling-21|Kathrin Passig, Johannes Jander "Weniger schlecht programmieren"]]. *The book [[http://www.amazon.de/exec/obidos/ASIN/3826655486/hemmerling-21|Robert C. Martin "Clean Code - Refactoring, Patterns, Testen und Techniken für sauberen Code"]]. ===== Resources ===== *[[http://www.cetus-links.org/|Cetus Links - Object-Orientation]]. *[[http://www.cetus-links.org/oo_ooa_ood_tools.html|Cetus Links "Architecture and Design: Object-Oriented Analysis & Design Tools"]]. *[[http://www.case-tools.org/|Index CASE Tools]]. *[[http://thedailywtf.com/|The Daily WTF - Curious Perversions in Information Technology]]. *[[http://thedailywtf.com/Articles/The_Spider_of_Doom.aspx|The Daily WTF - Curious Perversions in Information Technology "Alex Papadimoulis: The Spider of Doom"]], 2006-03-28. ===== Forums, Newsgroups, Communities ===== *[[http://groups.google.com/group/de.comp.objekt|Google Groups "de.comp.objekt"]]. *[[http://groups.google.com/group/dddcqrs|Google Groups "DDD/CQRS"]], [[http://groups.google.com/group/pococapsule|Google Groups "pococapsule"]]. *[[http://www.modeldrivensoftware.net/|The Model Driven Software Network]]. *[[http://en.pudn.com/|PUDN - Programmers United Develop Art]] -"After registration, you should [upload] more than five source codes or program documents, then your account will be activated after the codes been checked by administrator". *[[http://forums.thedailywtf.com/Forums/|The Daily WTF - Curious Perversions in Information Technology, Forums]]. {{tag>"system design" UML SysML SDL}}