Tuesday, March 03, 2009

Future trends in software engineering

About a year after the panel convened at ASWEC 2008, my words on future trends in software engineering are still pertinent to ongoing work I am undertaking in software engineering and service-oriented architecture.

Model-driven architecture (MDA)
  • not old-style computer-aided software engineering (CASE), i.e. discredited round-trip engineering
  • capture different levels of abstraction; elaborating lower-levels, constrained by higher-levels
Software factories
  • component-based libraries and frameworks
  • meta-object facility (MOF) for store and registry of component meta-data
  • dependency-injection, eg. Spring factory
  • mocks objects to complement, not replace, unit and integration testing using fixtures
Service-oriented architecture (SOA)
  • continuing growth and refinement of ontology-based software engineering
  • return to not-quite components, i.e. facade for service interfaces that are explicit
  • growth of resource description framework (RDF), web ontology language (OWL) - semantic-description languages and extensions (hard problem!)
  • realisation that C++, Java, C#, perl, python, yacc/bison (of course) incorporate support for domain-specific languages (DSLs) by extension, genericity and composition
  • convergence of object-oriented analysis and design with design and enterprise patterns
  • combine patterns and domain ontology to give DSL independent of technology and platforms - "form follows function"
Non-trivial systems
  • software and systems engineering merge into concrete discipline
  • integration architecture, distributed and real-time computing are increasingly seen as facets of same problem
  • enterprise security, single sign on, unified data views, portals - service and system mashups at user and data levels
  • two-level development: 1) service and business levels based on business/logical processes and composite services; 2) implementations that conform to service and interface contracts can be in any technology, i.e. custom software, commercial-off-the-shelf (COTS) or free and open source software (FOSS)
  • well-defined registry interface - "think global over enterprise, act local" every system and application adheres to enterprise guidelines
  • configurable and adaptable - constrained flexibility due to absolute need to confidently test known configurations
Cross discipline
  • computer science and software engineering, psychology, management
  • unified analysis, richer toolkit of analytics and heuristics
  • mature processes, peer review and accreditation