12Software Engineering FAQ● What is software?Computer programs and associated artifacts(e.g documentation).Software products may be developed for aparticular customer or may be developed for ageneral market.
13Software Engineering FAQ● What is software engineering?
14Software Engineering FAQ● What is software engineering?An engineering discipline concernedwith all aspects of software production.
15Software Engineering FAQ● What is software engineering?An engineering discipline concernedwith all aspects of software production.Computer science is concerned withtheory and fundamentals; softwareengineering is concerned with thepracticalities of developing anddelivering useful software.
16Software Engineering FAQ● What is a software process?
17Software Engineering FAQ● What is a software process?A set of activities whose goal is thedevelopment or evolution of software.High-level activities of software specification,development, validation and evolution are partof all software processes.
18Software Engineering FAQ● What is a software process model?A simplified representation of a softwareprocess, presented from a specific perspective.
19Software Engineering FAQSoftware process models- The waterfall modelPlan-driven model. Separate and distinct phases of specification anddevelopment.- Incremental developmentSpecification, development and validation are interleaved. May be plan-driven oragile.- Reuse-oriented software engineeringThe system is assembled from existing components.In practice, most large systems are developed using a process thatincorporates elements from all of these models.
20Software Engineering FAQ● What are software engineering methods?Structured approaches to softwaredevelopment which include system models,notations, rules, design advice and processguidance.
21Software Engineering FAQWhat is software architecture?
22Software Engineering FAQWhat is software architecture?● A software architecture is a description of how a softwaresystem is organized.● Architectural design decisions include decisions on thetype of application, the distribution of the system, thearchitectural styles to be used.● Shared understanding of a system design by the expertdevelopers on a project● Decisions developers wish they could get right early on● Decisions perceived as hard to change
24Software Engineering FAQEnterprise Application● Accounting software● Business intelligence● Business process management● Content management system (CMS)● Customer relationship management (CRM)● Enterprise resource planning (ERP)● ...
25Software Engineering FAQEnterprise Application● Lots of long living data, accessed concurently● Multiple systems, dissonance in integrationtechnologies and data interpretation● Business “illogic”● Specific patterns
26Trends of Software Engineering andSoftware Development
27Trends of Software EngineeringI. Increasing complexity of software– business complexity– domain complexity– scale complexity– artificial complexity● Guided by requirements● Results in periodic paradigm shift● Followed by Moores Law–
29Trends of Software EngineeringI. Increasing complexity of softwareMoores law is the observation that over the history ofcomputing hardware, the number of transistors on integratedcircuits doubles approximately every two years● capabilities of many digital electronic devices are strongly linked toMoores law: processing speed, memory capacity, sensors● describes a driving force of technological and social change● used in the semiconductor industry to guide long-term planning
30Trends of Software EngineeringI. Increasing complexity of softwareComplexityTimeFortran, BasicSymbols, expressionPascal, CStructured programmingC++ObjectsJavaVirtual machinesPython, XML
31Trends of Software EngineeringII. Raising the level of abstraction– Abstract to reduce (hide) complexity– From machine codes to high level languages
32Trends of Software EngineeringII. Raising the level of abstractionMachine code or machine language is a set ofinstructions executed directly by a computerscentral processing unit (CPU).
33Trends of Software EngineeringII. Raising the level of abstraction● High-level language is a programminglanguage with strong abstraction from thedetails of the computer.May use natural language elements, making the processof developing a program simpler and moreunderstandable.
34Trends of Software EngineeringII. Raising the level of abstraction● Executable Models (e.g. xUML) allow graphically specify asystem at the next higher level of abstraction.● allows for true separation of concerns● significantly increases ease of reuse and lowers the cost ofsoftware development● enables domains to be cross-platform and not tied to any specificprogramming language, platform or technology
35Trends of Software EngineeringII. Raising the level of abstraction
36Trends of Software EngineeringIII. Continuous improvement of developmentprocess- Automation and improvement of softwaremaintainability- Iterative approach to software development isbecoming increasingly used as the standarddevelopment technique
37Trends of Software EngineeringIII. Continuous improvement of developmentprocess- Shift to agile methods to focus on incrementalspecification design and systemimplementation, that involve the customerdirectly in the development process- Development of automated tests before aprogram feature is created, adoption ofcontinious integration and continious deliveryprocesses
38Trends of Software EngineeringIV. Ability to deal with changes inrequirements– Businesses now operate in a global,rapidly changing environment– It is often practically impossible to derive acomplete set of stable softwarerequirements
39Trends of Software EngineeringIV. Ability to deal with changes inrequirements– Welcome changing requirements, evenlate in development– Customer collaboration over contractnegotiation
40Trends of Software EngineeringIV. Ability to deal with changes inrequirement– Deliver working software frequently, from acouple of weeks to a couple of months,with a preference to the shorter timescale– Business people and developers mustwork together daily throughout the project
41Trends of Software EngineeringManifesto Agile Software DevelopmentWe are uncovering better ways of developingsoftware by doing it andhelping others do it. Through this work we have come to value:● Individuals and interactions over processes and tools● Working software over comprehensive documentation● Customer collaboration over contract negotiation● Responding to change over following a planThat is, while there is value in the items on the right, we value theitems on the left more
42Software Engineering TrendsV. Reusing experience to addressrecurring problems successfully– Design process in most engineering disciplines is basedon reuse of existing systems or components– Reuse is recognized as an important mechanism toimprove software quality and development productivity– Advantages of software reuse are lower costs, fastersoftware development and lower risks. Systemdependability is increased and specialists can be usedmore effectively by concentrating their expertise on thedesign of reusable components.
44Software reuse➢ The process of creating software systems fromexisting software rather than building them fromscratch➢ An important mechanism to improve softwarequality and development productivity
45Software reuseDifferent published rates about reuse➢up to 60% of design and code is reusable in business applications➢up to 75% of functions are common to more than one application➢up to 85% - theoretical reuse potential
46• Reusability– the property of a software asset, that indicatesits probability of reuse– often understood as one of software quality anddevelopment productivity factors• Reusable asset (artefact)– reusable software or software knowledge– different software life cycle products• Systematic software reuse– based on the defined processes and rules– without relying on individual initiative or luck 46Software reuse
47Benefits of reuse– Gains in qualityerror fixes accumulated from reuse– Gains in reliabilityreuse increases the chance of errors to be detected– Gains in productivityless design and code, less testing efforts– Gains in performanceeffort invested in optimizations– Reduction of maintenance costsfewer defects and maintenance costs with proven quality components– Reduction of product time to market– Support for rapid prototyping47Software reuse
48Obstacles of reuseManagerial and organizational obstaclessupport of top-level management is neededlack of management incentivesEconomic obstaclesrequires up-front investmentsConceptual and technical obstaclesdifficulty of finding reusable softwarenon-reusability of legacy componentsmodification effects on the component48Software reuse
49• Software reuse is multidisciplinary– organizational aspectsmanagerial and technological infrastructurecentralized or distributed organizationalapproaches– economic aspectsproactive or reactive capital investmentsmetrics, reuse cost estimation techniques, return-on-investment models– technical aspects49Software reuse
50• Reuse-in-the-large is a problem too hard to besolved in general way.– works best in families of related systems– domain-dependent• The final goal is to ingrain reuse into anorganization’s entire software productionprocess50Software reuse