View
214
Download
0
Category
Tags:
Preview:
Citation preview
An Introduction to
Software Engineering
Communication Systems
A Communications Model
Data Communications Model
voice mail Twitter
e-mailinstant messaging
chat rooms
newsgroups telephony videoconferencing
collaboration groupware global positioning system (GPS)
Objectives
• Understand what Software Engineering is, and why it is important
• Answer fundamental questions about Software Engineering
• Introduce ethical and professional responsibility issues as they relate to computer scientists and software engineers
Questions about Software Engineering
• What is software?– Software includes source code, executable, and associated
documentation such as requirements documents, design models, and user manuals
– May be targeted for some general purpose (web browser, word processor, etc), or for a specific custom need
– New software can be produced from scratch, by configuring generic software systems, or by reusing existing software
Questions about Software Engineering
• What is Software Engineering?– Software engineering is an engineering
discipline that applies theories, methods, and tools to solve problems related to software production and maintenance
– Software engineers strive to deliver high-quality software, on time and within budget
Questions about Software Engineering
• Why is Software Engineering Important?– Financial, security, and safety critical systems rely on
software
– Software mediates every aspect of our Internet experience
– The economies of all developed nations are dependent on software
– There is an increasing need to cost effectively develop high-quality software
– Software engineering is concerned with producing usable software for today; computer science is concerned with finding fundamental truths about theoretical problems for posterity
– Software engineering projects have fixed budgets and schedules; computer science projects have open-ended budgets and schedules
– Software created by software engineers must evolve as user’s needs change; solutions created by Computer Scientists never change
What is the difference between Software Engineering and Computer Science?
What is the difference between Software Engineering and Computer Science?
• Software engineers require domain knowledge to function; computer scientists rely on mathematical principles to function
• Unlike physics and electrical engineering, software engineers often rely on methods and principles borrowed from other engineering disciplines instead of computer science
Questions about Software Engineering
• What is the difference between Software Engineering and System Engineering?– System Engineering is concerned with all aspects of
computer based systems, including hardware, software and process engineering; applies tested and known principles; the discipline is thousands of years old
– Software Engineering is concerned with developing the software infrastructure, control, applications, and databases in the system; often apply new and untested elements in software projects; the discipline is about 50 years old
Questions about Software Engineering
• What is a Software Process?– A software process is a set of activities and their output,
which result in a software product – Four fundamental process activities are:
• Specification: Defines what the software should do, and its operational constraints
• Design and implementation: Designs the solutions, and produces the source code to meet the specification
• Validation: Checks that the software produced is what the customer wants
• Evolution: Changes made to the software that meet user’s changing needs
Questions about Software Engineering
• What is a Software Process model?– An abstract representation of a software process,
presented from a particular perspective; for example, workflow (sequence of activities), data-flow (information flow), or role/action (who does what)
– These process models explain different approaches to software development; for example, Waterfall, Iterative, and Component Based Software Engineering
Questions about Software Engineering
• What is the cost of Software?
– Software costs often dominate computer system costs.
– Software costs more to maintain than to develop from scratch. The maintenance costs for systems with a long-life, may be several times its development costs
Questions about Software Engineering
• What are Software Engineering methods?– Structured approaches to software development,
including:• Model descriptions: Describes graphical models (i.e.
object, data-flow, state machine models, etc)• Rules: Constraints applied to system models (i.e. entities
must have unique names)• Recommendations: Best practices for designing software
(i.e. include no more than nine processes in a data flow diagram)
• Process guidance: what activities to follow (i.e. document object attributes before defining its operations)
Questions about Software Engineering
• What is CASE?– Computer Assisted Software Engineering, used to
provide automated support for software process activities
– Often used for method support
– Upper-CASE tools support requirements gathering and design activities
– Lower-CASE tools support implementation, debugging, and testing activities
Questions about Software Engineering
• What are the attributes of good software?– Software should deliver the functionality required
by the user. In addition, it should deliver non-functional requirements such as:• Maintainability: Must be easy to evolve to address
changing needs• Dependability: Must be trustworthy• Efficiency: Should not waste system resources• Acceptability: Users must be able to use the software
Questions about Software Engineering
• What are the key challenges facing software engineering?– Heterogeneity: How to build software that works on
different platforms, that can integrate with older legacy systems which are written in different programming languages
– Delivery: How to shorten the time it takes to deliver a finished software product, without compromising its quality
– Trust: How to develop techniques to demonstrate that software can be trusted by its users
Professional and Ethical Responsibility
• Software engineering involves wider responsibilities than just the application of technical skills
• Software engineers must behave in honest and ethically responsible ways to be respected as professionals
• Ethical behavior is more than simply upholding the law
Two Ethical Perspectives on Reciprocity
• Confucian: “Never impose on others what you would not choose for yourself.” - Analects XV.24, tr. David Hinton ”
• Christian: “Just as you want others to do for you, do the same for them.” Luke 6:31
Issues of Professional Responsibility
• Confidentiality– Always respect confidentiality of employers or
clients, even when there is no formal confidentiality agreement
• Competence– Never misrepresent one’s level of competence.
Never accept work beyond one’s level of competence
Issues of Professional Responsibility
• Intellectual property rights– Ensure that the intellectual property of employers
and clients is protected– Be aware of local laws governing use of
intellectual property such as patents and copyright
• Computer misuse– Never use technical skills to misuse other people’s
computers
Recommended