Software and Large Software Development
Software and Large Software Development
Sem I 2013/2014
Large Systems
Here in Syracuse at least two very large software systems have been successfully implemented:
Over The Horizon Radar (OTHR) contained about 3,000,000 lines of code, written mostly in FORTRAN with some C and some assembly language as well. BSY-2 submarine battle management system software is several times larger than OTHR, written mostly in Ada.
So, to complete the project in 2.5 years would require the services of at least 380 well trained software developers. Two points are almost self evident:
a system this large must be partitioned into many rela-tively small, nearly independent components in order to get it to work it would be much better not to create such a large sys-tem at all, but rather, to build most of it from reused sw components, reserving new code for new requirements.
SW Product Model
Architecture
defines product components and allocates processing to them defines external product behavior
Requirements Specification
describes what constitutes correct operation it is the basis for testing and evaluation
Product Specification
defines an architecture for the system describes software design and implementation specifies a software build process
Test Plan
defines procedures for unit, integration, validation, qualification, and regression testing qualification test procedures are emphasized verifies design for critical processing, analyzes implementation problems as they arise Code for each component of the product, implemented as software modules. test stub attached to each module, used to establish basic software cycling and nearly correct operation test drivers for unit, integration, and qualification tests
Prototype Code
Product Code
Test Code
Test Report
Complexity in Software
High LOC, High amount of Data Acces, High computation elements, etc High Requirements Size, Requirements Changes, conflicting requirements, etc
Complexity in Requirements
Coordination in LS SW Development
Environment Changes
Computer
Hardware Competition Business Processes External Requirements (Y2k, Euro,) New Standards (XML, MP3, e-Speak,)
Versioning
Revision / Version - Single copy of a source file as it appeared at given point in its change history (checkpoint) File / Element - Complete change history; all versions Branch - Set of successive versions; parallel to other branches Delta - Change from one file version to the next
Version Tree
Variant - File based on another, co-exists with original Derived Object - File automatically generated from source files Change Set - Set of versions across multiple files making up a single logical change (e.g., feature or fix) Baseline - Consistent set of versions across all files
Baseline
fubar.c foo.c bar.c
Coordinating Work
Problem: Multiple people working on same file at the same time can result in lost work. Solution 1: Serialize work with file locking. Solution 2: Work in isolation (branch) and merge. Branching and merging scales much better. Merging can be semi-automated using 3-way merge algorithms.
Common Ancestor
1
Merge Result
1 3
Conflicting Changes
Managing Change
Change Control - Formal processes for tracking and approval of software modifications. Managed with SCM and defect tracking tools. Usual Policy Areas: Documentation - Change request / defect report filed. Approval - Change request reviewed by release management or technical board. Quality Requirements - Code reviewed, regression tests passed. Policies often change by release stage and in response to problems.
Development Process
Key Components of Development Process: Software Configuration Management Change Control Quality Control
Automation
A process must be automated to be repeatable
Software Integration
Integration: Combining multiple features or components developed in isolation. Large projects are subject to constant change, so isolation on a stable base is necessary. Continuous Functional Integration and Test (CFIT)
Changes integrated throughout development. Changes not allowed to regress functionality or quality.
HP-UX Development
220,000+ Source Files ~2.5 Million Versions 52,000+ Derived Files (Single Nightly Build) 900+ User Accounts More Than 1 Terabyte of Disk Space
Normally 2-3 Releases Under Development Several Releases Under Maintenance Heavy Use of Branching and Merging
Companies
1. Developer Task - Edit, Compile, Test 2. Submit - Batch Changes, Acceptance Test 3. Baseline - Nightly Build, Regression Test 4. Integration - Monthly Packaging, Partner Test 5. Release - Semi-annual Delivery, Production Use
Integration Levels
Release
Process Evolution
Continuous Process Improvement Root Cause Analysis (RCA) Capability Maturity Model (CMM)
1. Initial 2. Repeatable 3. Defined 4. Managed 5. Optimizing
Tools
Rational/IBM XDE Java Edition 2002/XDE .NET Edition 2002 Borlands Together (acquired TogetherSoft) Telelogics System Architect 10 (acquired Popkin Software) Microsofts Enterprise Architect 2002 Ilogixs Rhapsody Gentlewares Poseidon for UML Tigris ArgoUML (Open Source) EclipseUML (Open Source) StarUML (Open Source)
Free
System Architect 10
Telelogic (acquired Popkin Software in 2005) Types of modelling supported: Business Process Modelling Object/Component Modelling Data Modelling Structured Analysis and Design Interface: Drawing Workspace Browser - hierarchical navigation (of diagrams and definitions) Definition dialogues Matrix Editor Import/Export Formats Comma Separated Vale (csv), XML
System Architect 10
Reporting: Proprietary, MS Word templates, HTML Generation Object Modelling UML and old methods (Booch, OMT, etc.) Code Generation C++ (+ reverse engineering), Java (+ reverse engineering), Visual Basic, CORBA IDL, Javascript Schema Generation Data Defintion Language of SQL, e.g. Access, ORacle, etc. GUI screen painter
Together
comprehensive, multi-language modeling platform for software practitioners who design, develop, and/or communicate software architectures Two versions Together 2006 Release 2 for Eclipse (3.2) and Together 2006 for Visual Studio support for UML 2.0, OCL, XMI, Design Patterns, Java 5, and CORBA/IDL Language Support: Eclipse Version Java and C++
Complex Software
http://www.intelligent-files.com/complex-software.html
Almost everything, around and about application software undergoing change, conspires to move it on from being just software, to being complex software Complex software arises from a culmination of many factors.
The
simplest measure of software complexity is via an algorithm called McCabe's Cyclomatic Complexity
Complex Software
http://www.intelligent-files.com/complex-software.html
Bringing complex software to ground level, this is what you feel, as a developer working with complex software:
complex software will make it hard to determine where to make a change to add a feature or fix a bug. complex software will cause what is called cascading changes. A simple change suddenly requires you to change ten, twenty, even thirty software files. complex software when changed will produced many unintended side effects, most of these being unwanted, even destructive. complex software will contain much duplication. This means, that for many changes, you will need to repeat yourself, sometimes many times over. complex software is hard to maitain. Data patches, manual releases, the lack of automated tests all add up to disempower IT maintenance teams.
Complex Software
http://www.intelligent-files.com/complex-software.html
Contibuting factors the developers, their psychology, fear, communication skills, desire for feedback. the business. its risk appetite, rewards structure, its ability to recruit & retain. the market. socio-economics, technology change, regulatory climate, customer mobility the project its leadership, sponsors, its agility & budget, its pace of development the competition systems, their technology & responsiveness, their differentiators the customertheir loyalty, their need for customization, their financial disposition
Ultra-large-scale system (ULSS) is a term used in fields including Computer Science, Software Engineering and Systems Engineering to refer to software intensive systems with unprecedented amounts of hardware, lines of source code, numbers of users, and volumes of data. The scale of these systems gives rise to many problems: they will be developed and used by many stakeholders across multiple organizations, often with conflicting purposes and needs; they will be constructed from heterogeneous parts with complex dependencies and emergent properties; they will be continuously evolving; and software, hardware and human failures will be the norm, not the exception.
(http://en.wikipedia.org/wiki/Ultra-large-scale_systems)
The scale and complexity of systems is increasing dramatically. Ultra-large-scale (ULS) systems are systems of unprecedented scale in some of these dimensions:
lines of code amount of data stored, accessed, manipulated, and refined number of connections and interdependencies number of hardware elements number of computational elements number of system purposes and user perception of these purposes number of routine processes, interactions, and emergent behaviors number of (overlapping) policy domains and enforceable mechanisms number of people involved in some way
Ultra-Large-Scale Systems; The Software Challenge of the Future (Software Engineering Institute Carnegie Mellon)
The scale of ULS systems means that they will necessarily be decentralized in a variety of waysdecentralized data, development, evolution, and operational control. ULS systems will be developed and used by a wide variety of stakeholders with unavoidably different, conflicting, complex, and changing needs. There will be an increasing need to integrate new capabilities into a ULS system while it is operating. New and different capabilities will be deployed, and unused capabilities will be dropped; the system will be evolving not in phases, but continuously.
A ULS system will not be constructed from uniform parts: there will be some misfits, especially as the system is extended and repaired. People will not just be users of a ULS system; they will be elements of the system, affecting its overall emergent behavior. Software and hardware failures will be the norm rather than the exception. The acquisition of a ULS system will be simultaneous with the operation of the system and require new methods for control.
Normal failures
Ultra-Large-Scale Systems; The Software Challenge of the Future (Software Engineering Institute Carnegie Mellon)
ULS Challenges
Design and Evolution The challenge will be to find new ways to harness and coordinate the design capabilities and motivations not just of individual companies, prime contractors, and supply chains, but of whole industries, within which competition for value will drive much richer and more economical exploration of complex design spaces.
By orchestration we mean the set of activities needed to make the elements of a ULS system work in reasonable harmony to ensure continuous satisfaction of the mission objectives. Orchestration involves management and administration but at a scale well beyond that of traditional, centralized, relatively fine-grained controls. Orchestration requires a combination of up-front design, overall policy promulgation and enforcement, and real-time adjustment of operating parameters. Orchestrating a ULS system requires supporting interdependencies and controlling the consequences of local actions with respect to their effect on the emergent whole, even though each part of a system might be acting to maximize its local utility.
succeed in developing and operating ULS systems, new knowledge, technologies, and methods in the following areas are needed:
online
modification maintenance of quality of service creation and execution of policies and rules adaptation to users and contexts
enabling
of user-controlled orchestration
effectiveness of ULS system design, evolution, and orchestration has to be evaluated. There must be an ability to monitor and assess ULS system state, behavior, and overall health and well being. The criteria for success or overall health are different for ULS systems than for smaller systems designed to accomplish a task that does not change as the system is used.
Defense The Northrop report argued that "the U.S. Department of Defense (DoD) has a goal of information dominance this goal depends on increasingly complex systems characterized by thousands of platforms, sensors, decision nodes, weapons, and warfighters connected through heterogeneous wired and wireless networks. These systems will push far beyond the size of today's systems by every measure They will be ultra-large-scale systems."[1]
Financial trading Following the flash crash, Cliff and Northrop[2] have argued "The very high degree of interconnectedness in the global markets means that entire trading systems, implemented and managed separately by independent organizations, can rightfully be considered as significant constituent entities in the larger global super-system. The sheer number of human agents and computer systems connected within the global financial-markets system-of-systems is so large that it is an instance of an ultra-large-scale system, and that largeness-of-scale has significant effects on the nature of the system".[2]
Domains.... (2)
Healthcare Kevin Sullivan has stated that the US healthcare system is "clearly an ultra-large-scale system"[7] and that building national scale cyberinfrastructure for healthcare "demands not just a rigorous, modern software and systems engineering effort, but an approach at the cutting edge of our understanding of information processing systems and their development and deployment in complex socio-technical environments".[7] Others Other domains said to be seeing the rise of ultra-large-scale systems include government, transport systems (for example air traffic control systems), energy distribution systems (for example smart grids) and large enterprises.
Managing Complexity
Software engineers have devised a number of fundamental tools of the trade for helping to manage complexity [1]:
Decomposition: The most basic technique for tackling large problems is to divide them into smaller, more manageable chunks, each of which can then be dealt with in relative isolation (note the nearly decomposable subsystems in Figure 1). Decomposition helps tackle complexity because it limits the designers scope. Abstraction: The process of defining a simplified model of the system that emphasizes some of the details or properties, while suppressing others. Again, this works because it limits the designers scope of interest at a given time. Organization: The process of defining and managing the interrelationships between the various problem-solving components (note the subsystem and interaction links of Figure 1). The ability to specify and enact organizational relationships helps designers tackle complexity by: enabling a number of basic components to be grouped together and treated as a higher-level unit of analysis, and providing a means of describing the highlevel relationships between various units.
[1] Booch, G. Object-Oriented Analysis and Design with Applications. Addison Wesley, 1994.
Architectural specification (system, services (data, protocols, processes), team/organization. Configuration management and version control Process automationbuilds, regression tests, etc. Reliance on informalisms for development
(Open Source Software Development and Very Large-Scale Software Engineering (Walt Scacchi Institute for Software Research University of California, Irvine Irvine, CA, 92697-3425 USA 19 July 2005))
VLSSE (2)
Information density vs. knowledge coverage VLSEE needs for ASB to consider:
Test-beds for full-size system mock-ups (probably built from OSS and Computer Game components) Visualization aidsarchitecture, configuration, sociotechnical networks Empirical knowledge about existing VLSEE practices for both OSS and CSS Computer-supported cooperative organizational learning environments (CSCOLE) supporting long-term organizational transformation.
Configuration management and version control Architectural specification and maintenance Collaboration, leadership, control and conflict management Community development and support Software source code and artifact data mining
Grady Boochs advices about making big software development projects a success
The fundamentals never go out of style, never forget the four fundamentals:
Create crisp and resilient abstractions. Maintain a good separation of concerns. Create a balanced distribution of responsibilities. Focus on simplicity. "Establishing that rhythm provides predictability and sustainability." Regularity lets everyone plan on what functionality or features will be injected into the next round, regardless of release frequency. IT managers need to govern around the architectural decisions rather than raw, running, naked code. "The code is the truth," Booch says. "But the code is not the whole truth.
(http://www.cio.com/article/373215/5_Things_Grady_Booch_Has_Learned_About_C omplex_Software_Systems?page=2&taxonomyId=3020)
Create social structures that encourage innovation while still preserving predictability. Teamwork is an essential ingredient in any large software project, so companies should give attention to creating relationships that work. Businesses need predictability (when will this software really ship?) and they also want innovation (make it do something cool!). Building a social structure to support both those goals isn't necessarily easy, but the successful projects find a balance. Keeping developers out of "blasted meetings" so they can get things done. Have fun. Successful projects come from teams that are jazzed about what they're doing. "Most people want to build beautiful, elegant things,"
Tugas
Bagi kelompok @5 orang, dikumpul (Hardcopy) Selasa (3/9/2013) Cari paper terkait large scale atau complex software, pelajari, dan siapkan presentasi singkatnya (utk Selasa) Contoh:
Coordination in Large-Scale Software Team Survey answered by 775 Microsoft software engineers Parallel Changes in Large Scale Software Development: An Observational Study Coodination in Large-Scale Software Development: Helpful and Unhelpful Behaviors Defining Execution Viewpoints for a Large and Complex Software-Intensive System