200 likes | 207 Views
Learn about the importance of software engineering in the face of increasing size and complexity of software systems. Understand the inherent and accidental complexity of software and discover the dominant discipline and tradeoffs involved in software development.
E N D
CSED191 컴퓨터공학소개Software EngineeringIntroduction & Overview CSE 99 서광열, CSE 05 김윤수
Why Software Engineering? • Increasing Size • Increasing Complexity Software systems are like cathedrals; first we build them and then we pray - S. Redwine
Software Size & Complexity 50 lines per page Double sided 500 pages/ream (2inches) NT5.0 = Statue of Libery Reference: UW CSE584(Winter 2001) Software Engineering Lecture Note 1
“The Software Crisis” We cannot produce or maintain high-quality software at reasonable price and on schedule Gibb’s Scientific American article
Inherent & Accidental Complexity • Frederick P. Brooks : Two kinds of Complexity • Inhrent Complexity: Cannot hope to reduce • Accidental Complexity: Hope to reduce • Some of the inherent complexity comes from the incredible breadth of software we build • However, not always easy to distinguish between these two kinds of complexity Reference: No Silver Bullet, Essence and Accidents of Software Engineering by Frederick P. Brooks, Jr.
Dominant Discipline As the size of the software system grows, the key discipline changes – Stu Feldman
Software Observations! • Ideas borrowed from David Notkin, a professor of UW • The question is What happens in a real software project?
Don’t assume similarity among software systems Nuclear power system shutdown vs Reliability of educational game program Design of a sorting algorithm vs Design of event-based GUI system • Assume differences until proven • Not doing so causes a tremendous amount of confusion in the degree of applicability of different research approaches, tools, etc
Intellectual tools dominate software tools in importance • How you think is more important than the notations, tools, etc that you use • EX: Information Hiding • EX: Design Pattern
Estimating benefits is easier than estimating costs • “If only everyone only built software my way, it’d be great” is a common misinterpretation • EX: The formal methods community • EX: Many methodologists • At the same time, estimating costs and benefits is extremely hard
Programming languages ensure properties distant from the ones we want • Programming languages help a lot, but they do not solve inhrent problems • EX: Contravariant type checking in ML has significant benefits, but it does not eliminate all errors in ML programs
Tradeoffs are key • We always choose in favor of hard criteria(e.g., performance) over soft criteria(e.g., extensibility) • Brooks’ Golden Rule doesn’t really work NO!
We know why now. Then What is Software Engineering? (서광열 발표)
Software Engineering Definition IEEE Definition (1993) Software Engineering: • The application of a systematic, disciplines, quantifiable approach to the development, operation, and maintenance of software; that is the application of engineering to software. (2) The study of approaches as in (1).
Software engineering is a “wicked problem” • cannot be easily defined so that all stakeholders agree on the problem to solve; • require complex judgements about the level of abstraction at which to define the problem; • have no clear stopping rules; • have better or worse solutions, not right and wrong ones; • have no objective measure of success; • require iteration-every trial counts; • have no given alternative solutions-these must be discovered; • often have strong moral, political or professional dimensions. Reference: Representing Hard-to-Formalise, Contextualised, Multidisciplinary, Organisational Knowledge - Simon Buckingham Shum
Software Goals & Principles • Goals • Productivity • Quality • Desirable Properties • Understandability • Modifiability • Maintainability • Reusability • Testability • Reliability • Principles • Abstraction • Modularlization • Information Hiding • Encapsulation • Hiearchy • Decomposition • Refinement Reference: An Introduction to Software Engineering 포항공대 소프트웨어 공학 연구실
Software Engineering Topics • General • Requirements and specification • Design • Evolution (maintenance, reverse engineering, reengineering) • Analyses and tools (static and dynamic) • Quality assurance and testing • Others • Metrics and measurement • CASE • Software process - CMM, ISO 9000, etc. • Specific methodologies • UML • Software engineering for specific domains (real-time, the web, etc.)
Classic Books “A classic is something everyone wants to have read, but nobody wants to read.” - Mark Twain • Read anything by Brooks, Jackson & Parnas • “The Mythical Man-month” by Brooks