660 likes | 669 Views
This lecture plan covers the fundamental concepts of software and software engineering, including reasons for failures, myths, characteristics, and the importance of managing complexity in software projects. Explore the dual role of software, software products, applications, and the challenges in software development. Learn about software engineering principles and why it is essential for successful software projects.
E N D
SEC 308 Yazılım MühendisliğiSoftware and Software Engineering
Lecture Plan • What is Software? • Why Software Engineering? • What is Software Engineering? • Who does Software Engineering? • Why does Software Fail? • Software Failure Examples • Software Myths
What is Software? • Software is: (1) instructions (computer programs) that when executed provide desired features, function, and performance; (2) data structures that enable the programs to adequately manipulate information and (3) documentation that describes the operation and use of the programs. • Computer programs and associated documentation • Software= Program+Documentation + Operating Procedures
Software Product • Software product is a product designated fordelivery to the user
Documentation Manuals • Documentation consists of different types of manuals are
Documentation Manuals (cont.) • Documentation consists of different types of manuals are
Software Characteristics • Software is developed or engineered, it is not manufactured in the classical sense. • Software doesn't "wear out.“, but it does deteriorate. • Although the industry is moving toward component-based construction, most software continues to be custom-built. Failure curve for hardware
Software’s Dual Role • Software is a product • Delivers computing potential • Produces, manages, acquires, modifies, displays, or transmits information • Software is a vehicle for delivering a product • Supports or directly provides system functionality • Controls other programs (e.g., an operating system) • Effects communications (e.g., networking software) • Helps build other software (e.g., software tools)
Software Product • Software products may be developed for a particular customer or may be developed for a general market • Software products may be • Generic - developed to be sold to a range of different customers • Bespoke (custom) - developed for a single customer according to their specification
Software – New Categories • Open world computing—pervasive, distributed computing • Ubiquitous computing—wireless networks • Netsourcing—the Web as a computing engine • Open source—”free” source code open to the computing community
Legacy Software • Were developed decades ago and have been continually modified to meet changes in business requirements and computing platforms. • Why must it change? • software must be adapted to meet the needs of new computing environments or technology. • software must be enhanced to implement new business requirements. • software must be extended to make it interoperable with other more modern systems or databases. • software must be re-architected to make it viable within a network environment.
Some attributes of good software The software should deliver the required functionality and performance to the user • Maintainability • Software must evolve to meet changing needs • Dependability • Software must be trustworthy • Efficiency • Software should not make wasteful use of system resources • Usability • Software must be usable by the users for which it was designed
Some Software Development Questions • Why does it take so long to get software finished? • Why are development costs so high? • Why can’t we find all errors before giving software to customer? • Why do we spend so much time and effort maintaining existing programs? • Why do we have difficulty in measuring progress as software is being developed and maintained?
Why is Software Development Hard? • Millions of lines of code • Single failure entire system fails • Hundreds of developers • Many of whom enter/leave project at different times • Requirement change rapidly • Software may be obsolete before it is completed Possibly most complex human activity ever!
Why Software Engineering? (cont.) • The problem is complexity • Complexity leads to failure • Software takes too long to develop • More costly than expected • Not reliable enough • Does not do what users want or need • Difficult to maintain/modify as needs change • The majority of commercial software projects started are never completed Software engineering is about managing this complexity.
Why Software Engineering? • Important to distinguish “easy” systems(one developer, one user, experimental use only) from “hard” systems (multiple developers, multiple users, products) • Experience with “easy” systems is misleading • One person techniques do not scale up • Analogy with bridge building: • Over a stream = easy, one person job • Over River Nile … ? (the techniques do not scale)
What is Software Engineering? • Applying engineering principles to software development • Build software like we build bridges! • IEEE Definition:“Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software”
Engineering Principles • Systematic • Clear process followed by all involved • Only way to coordinate 100’s of developers • Quantifiable • Can accurately measure/estimate key qualities • Cost and time to develop software • Correctness, reliability, usability of final product
Engineering Principles (cont.) • Disciplined • Commitment to quality by all involved • Developers, management, etc. • Ethics • Do not accept project that you do not have the skills to complete correctly • Do not release product until you know it meets standards
What is software engineering? (cont.) Software engineering is an engineering discipline which is concerned with all aspects of software production Software engineers should • adopt a systematic and organised approach to their work • use appropriate tools and techniques depending on • the problem to be solved, • the development constraints and • the resources available
What is software engineering? (cont.) • At the first conference on software engineering in 1968, Fritz Bauerdefined software engineering as “The establishment and use ofsound engineering principles in order to obtain economicallydeveloped software that is reliable and works efficiently on realmachines”. • Stephen Schach defined the same as “A discipline whose aim is theproduction of quality software, software that is delivered on time,within budget, and that satisfies its requirements”.
What is the difference between softwareengineering and computer science? • Computer science is concerned with theory and fundamentals; software engineering is concerned with the practicalities of developing and delivering useful software. • Computer science theories are still insufficient to act as a complete underpinning for software engineering (unlike e.g. physics and electrical engineering).
Where do software engineers fit in? • Computer science: focusing on computer hardware and programming languages • Software engineering: focusing on computer as a problem-solving tool • Relationship between computer science and software engineering
What is the difference between softwareengineering and system engineering? • System engineering is concerned with all aspects of computer-based systems development including hardware, software and process engineering. Software engineering is part of this process concerned with developing the software infrastructure, control, applications and databases in the system. • System engineers are involved in system specification, architectural design, integration and deployment.
Some Realities of Software Engineering • a concerted effort should be made to understand the problem before a software solution is developed • design becomes a pivotal activity • software should exhibit high quality • software should be maintainable
A Layered Technology tools methods process model a “quality” focus Software Engineering
A Process Framework • Process framework • Framework activities – applied iteratively as a project progresses • Communication • Planning • Modeling • Construction • Deployment • Umbrella Activities – manage and control progress, quality, change and risk • Software project management • Formal technical reviews • Software quality assurance • Software configuration management • Work product preparation and production • Reusability management • Measurement • Risk management
What is a software process? • A set of activities whose goal is the development or evolution of software • Fundamental activities in all software processes are: • Specification - what the system should do and its development constraints • Development - production of the software system (design and implementation) • Validation - checking that the software is what the customer wants • Evolution - changing the software in response to changing demands
What is a software process model? Software Process Model is a simplified representation of a software process, presented from a specific perspective • Examples of process perspectives: Workflow perspective- represents inputs, outputs and dependencies Data-flow perspective - represents data transformation activities Role/action perspective- represents the roles/activities of the people involved in software process • Generic process models • Waterfall • Iterative development • Agile Development • Component-based software engineering
What are the costs of software engineering? • Roughly 60% of costs are development costs, 40% are testing costs. For custom software, evolution costs often exceed development costs • Costs vary depending on the type of system being developed and the requirements of system attributes such as performance and system reliability • Distribution of costs depends on the development model that is used
Aspects of Software Engineering • Problem solving processas a team • Software products are large and complex • Development requires analysis and synthesis • Analysis: decompose a large problem into smaller, understandable pieces • abstraction is the key • Synthesis: build (compose) software from smaller building blocks • composition is challenging
The Essence of Software Engineering Practice • Understand the problem (communication and analysis). • Plan a solution (modeling and software design). • Carry out the plan (code generation). • Examine the result for accuracy (testing and quality assurance).
Understand the Problem • Who has a stake in the solution to the problem? That is, who are the stakeholders? • What are the unknowns?What data, functions, and features are required to properly solve the problem? • Can the problem be compartmentalized? Is it possible to represent smaller problems that may be easier to understand? • Can the problem be represented graphically? Can an analysis model be created?
Plan the solution • Have you seen similar problems before?Are there patterns that are recognizable in a potential solution? Is there existing software that implements the data, functions, and features that are required? • Has a similar problem been solved? If so, are elements of the solution reusable? • Can subproblems be defined? If so, are solutions readily apparent for the subproblems? • Can you represent a solution in a manner that leads to effective implementation? Can a design model be created?
Carry out the plan • Does the solution conform to the plan? Is source code traceable to the design model? • Is each component part of the solution provably correct? Has the design and code been reviewed, or better, have correctness proofs been applied to algorithm?
Examine the Result • Is it possible to test each component part of the solution?Has a reasonable testing strategy been implemented? • Does the solution produce results that conform to the data, functions, and features that are required?Has the software been validated against all stakeholder requirements?
Who Does Software Engineering? • Participants (stakeholders) in a software development project
What does Software Engineer do? • Spend less than 10% of their time writing code • Other 90% of their time (partial list) • Eliciting requirements • Analyzing requirements • Writing software requirements documents • Building and analyzing prototypes • Developing software designs • Writing software design documents • Researching software engineering techniques or obtaining information about the application domain
What does Software Engineer do? (cont.) • Other 90% of their time (cont.) • Developing test strategies and test cases • Testing the software and recording the results • Isolating problems and solving them • Learning to use or installing and configuring new software and hardware tools • Writing documentation such as user manuals • Attending meetings with colleagues, customers, and supervisors • Archiving software and readying it for distribution
Members of the Development Team • Requirement analysts: work with the customers to identify and document the requirements • Designers: generate a system-level description of what the system us supposed to do • Programmers: write lines of code to implement the design • Testers: catch faults • Trainers: show users how to use the system • Maintenance team: fix faults that show up later • Librarians: prepare and store documents such as software requirements • Configuration management team: maintain correspondence among various artifacts
Members of the Development Team (cont.) • Typical roles played by the members of a development team
Why does SoftwareFail? • Software is too expensive • Software takes too long to build • Software quality is low • Software is too complex to support and maintain • Software does not age gracefully • Not enough highly-qualified people to design and build software
Software Cost • The cost of Change • Software projects often go over budget • Hurts the company and the customer • Bad for the project/company • Many projects are cancelled • People may get fired or may quit • Bad for the final product • Features are not implemented • Bad quality: not enough money to get it right • Expensive in the long run
Software Time • Software projects often take too long • Loss of revenue and market share • Both for the vendor and for the client • E.g.: baggage system at Denver airport • Cost: $1 million per day • Projects may become obsolete • Technology changes rapidly • Competing products already on the market • Not enough time to implement all features and to ensure quality
Some Questions • Studies of IT projects by the Standish Group • 80000+ applications • What percentage of projects were • What was the cost/time overrun?