软件工程导论 Introduction to Software Engineering 王湖南 wanghunan@scu. edu 软件工程导论 Introduction to Software Engineering 王湖南 wanghunan@scu.edu.cn 四川大学软件学院软件工程系
Instructor Information Email: wanghunan@scu.edu.cn QQ:********** Resume 1992、9-1996、7 电子科技大学 (UESTC) 1996、7-1999、9 中国科学院成都分院计算机应用研究所 1999、9-2002、4 电子科技大学 (UESTC) 2002、4-now 四川大学计算机(软件)学院
Instructor Information (con.) Maxim “机会总是青睐有准备的人”
Teaching assistant Assistant: 王茜 Email: vancyw@foxmail.com
Introduction to SE
Quiz (10 minutes) Did you know or use following concepts? Please give a brief description for each as your opinion. Software Requirements(软件需求) Software modeling and analysis (软件建模与分析) Software Design(软件设计) Software Coding(软件编码) Software Verification and Validation(软件验证与确认) Software Testing(软件测试) Software Operation and Maintenance(软件运行与维护) Software Evolution(软件进化) Software Management(软件管理) Software Process(软件过程)
Questions 为什么要研究软件工程? 什么是软件工程? 软件工程研究的内容是什么? 软件工程的特点是什么? 如何研究软件工程?
实例1: 美国IBM公司在1963年至1966年开发的IBM360机的操作系统。 这一项目花了5000人一年的工作量,最多时有1000人投入开发工作,写出了近100万行源程序。 据统计,这个操作系统每次发行的新版本都是从前一版本中找出1000个程序错误而修正的结果。 这个项目的负责人F. D. Brooks事后总结了他在组织开发过程中的沉痛教训时说:“......程序设计工作正像这样一个泥潭,......一批批程序员被迫在泥潭中拼命挣扎,......谁也没有料到问题竟会陷入这样的困境......”。 IBM360操作系统的历史教训成为软件开发项目的典型事例为人们所记取。
实例2: 1996年,美国 Washington Post 报导 Dallas, Aug. 23 — 美国航空公司一架直升飞机撞上山崖,造成163人死亡。 原因:飞行目的地代码输入错误。 驾驶Boeing 757的机长认为他输入了目的地Cali的单字符代码,通常在大多数计算机数据库中Cali和Bogota的代码是不同的,而在南美的航空资料中, Cali的单字符代码和Bogota的是一样,所以系统将目的地处理成了Bogota。
Software used, but criticized or dropped Software delivered but 软件开发的问题——软件使用率 Software used, but criticized or dropped 19% Software used after modifications 3% Software paid for but never delivered 29.7% Software delivered and used as is 2% Software delivered but never used 47% GAO: General Accounting Office (http://www.gao.gov) 1982: Nine DOD contracts amounting to $6.8 million (source: GAO, quoted in CMU/SEI-93-EM-8)
软件开发的问题——软件开发的分工 Distribution of the development effort: Common belief Specification Testing Design Encoding
软件开发的问题——软件开发实际 Distribution of the development effort: What actually happens Specification Design Coding Testing Maintenance
硬件和软件的故障率 Failure Rate "Infant Mortality" ”Wear & tear" Change Actual Ideal Time Time FAILURE CURVE FOR HARDWARE FAILURE CURVE FOR SOFTWARE Hardware tends to have a wear-in time during which it has a higher probability of failure. This is generally referred to as infant mortality. Once the initial period is passed, hardware tends to operate without failure until components age enough to cause breakdown. Lesson to be drawn Do not buy extended warranty contracts. Standard warranty is usually long enough to take you through the infant mortality period. Software also shows an early error rate, but updates should remove the most obvious problems which render the software unreliable. Updates for added functionalities often add more problems, as is shown by the spikes on the software failure curve. As updates are made, more latent errors appear in the software making it less and less reliable until it becomes too unreliable for use. The software then undergoes a major redesign and is rewritten. * Software Engineering, Module 1, Richard Conn, University of Cincinnati, May 1993
问题: 如何进行软件开发? 如何保证软件的质量、成本和进度? 方法学问题!!
Familiar Problems ….
什么是软件工程(Software Engineering)? The application of a systematic, disciplined, quantifiable approach to the development, operation and maintenance of software; that is, the application of engineering to software. 运用系统的、规范的、可量化的方法开发、运行和维护软件,即将工程化的方法运用到软件开发中。 (IEEE Standard Glossary of Software Engineering, 1990)
软件工程相关活动
软件工程中的角色
什么是软件工程? 软件工程=计算机科学+管理+工程 运用系统的、科学的、可度量的方法开发、运行和维护软件; 研究软件开发、运行和维护的工程化过程、方法和工具; 软件工程是建立在计算机科学和数学的基础上; 软件工程=计算机科学+管理+工程
与软件工程相关的学科 计算机工程 计算机科学 管理 数学 项目管理 质量管理 软件人类工程学 系统工程
软件工程与计算机科学的关系 计算机科学 软件工程 是一门科学,研究信息和计算的理论基础,以及在计算机系统应用中的具体实现技术 是一门工程学科,它要求以系统化、可控制和有效的工程化方法创建高质量的软件。 涉及到相关的数学和计算理论,包括描述和变换信息的算法、有效地自动化等。 涉及到相关的质量、规划、经济、知识、应用等方面的原理和方法。 知识领域:计算理论、算法和数据结构、编程方法和语言、计算机组成和体系结构、通信和网络、安全、数据库、计算机图形、科学计算、人工智能、人机交互等。 知识领域:软件需求、软件设计、软件构造、软件测试、软件维护、软件配置管理、软件工程管理、软件工程过程、软件工程工具和方法、软件质量等。 涉及数学、计算学科。 涉及计算机科学、管理、工程等学科。
软件维护是一个持续开发的过程或改进的过程 软件工程与传统工程的关系 软件工程 传统工程 基础是计算机科学 基础是自然科学 数学基础是离散数学 数学基础是连续数学 研究的对象是抽象和逻辑实体 研究的对象是具体的物理对象 软件没有制造过程 大多有生产、构造过程 软件维护是一个持续开发的过程或改进的过程 有比较明确的完成结点 软件不能被用尽 可以被用尽
软件工程学科
软件工程学科
软件工程教育
软件工程师的理想素质 决策能力 定量分析能力 团队协作能力 多重角色的承担 工具运用能力 社会交流能力 成果的重用能力
软件工程专业学生的基本要求 掌握软件工程的知识,技能和专业问题; 能够独立或作为团队成员开发和提交高质量的软件产品; 能综合考虑成本、实践、知识、现有系统和组织关系等因素解决项目中的问题; 用软件工程方法在一个或多个应用领域设计适当的解决方案,涉及道德,社会,法律和经济相关的问题; 理解现有的问题识别和分析,软件设计,开发,实现,验证和文档编写的理论,方法和技术,并能够应用。 理解和正确评价在一个典型的软件开发环境谈判,有效工作习惯,领导能力和良好客户沟通能力的重要性。 学习新的模型和技术。
Introduction to the Course
Question: Why do I need to learn software engineering? To be a software engineer or a IT engineer……
The Relationship with Other Courses
Job in Software Engineering 应用软件开发: 分析、设计和实现 软件开发服务和管理: 系统集成和测试、系统维护、技术支持、市场营销、软件项目管理等 软件应用领域服务; 软件工程领域学术研究、教育、咨询; 其它
2013 Top 10 Best Jobs in U.S.A. 1 精算师 ( Actuary) 2 生物医药工程师 2 生物医药工程师 3 软件工程师(Software Engineer) 4 听觉学专家 (Audiologist) 5 财务计划师(Financial Planner) 6 牙科保健员(Dental Hygienist) 7 职业治疗师 (Occupational Therapist) 8 验光师 9 物理治疗员 10 计算机系统分析师(Computer Systems Analyst) -美国就业网站“CareerCast”
2012 Top 10 Best Jobs in China 软件工程师 设计师 机械工程师 销售总监 教师 采购经理 理财/投资顾问 网络市场营销 店长/楼面经理 财务经理 -前程无忧
Top 10 Things Every Software Engineer Should Know Fundamentals of Emotional Intelligence(情感智能) Understand the Business of your Customer Minimum One Programming Language for each Mainstream Development Paradigm(主流开发模式) Know your Tools Standard Data Structures, Algorithms and Big-O-Notation Don’t Trust Code without Adequate Test Basics of Project Management, Lean Management and Agile Concepts Key Metrics of Software Development The Root Cause of the Last Defect Understand the Infrastructure By Markus Sprunck
Question: What should I learn from this course? In brief , you will learn how to develop software. You will know what’s difference between programming and development. Further, you will learn how to think and to solve problem.
Course Content Unit 1 Introduction Unit 2 Process Models Unit 3 Requirements Engineering Unit 4 Building the Analysis Modeling & UML Unit 5 Design Concepts and Principles Unit 6 Architectural Design Unit 7 Component-level Design Unit 8 User Interface Design Unit 9 Software Testing Strategies and Techniques Unit 10 Introduction to Web Engineering
about textbook Textbook:《software Engineering A Practitioner’s Approach》7th Edition, Roger S. Pressman, 2011, China Machine Press
About resource 《Software Engineering》9th Edition, Ian Somerville, 2009, China Machine Press 《Object-Oriented and Classical Software Engineering》8th Edition, Stephen R. Schach, 2010 China Machine Press http://www.mhhe.com/engcs/compsci/pressman http://www.acm.org http://ieeexplore.ieee.org http://www.umlchina.com http://www.sei.cmu.edu http://www.csai.cn http://research.microsoft.com http://www.51cmm.com
About Grading Course(80%) Experiment (20%) Midterm (20%) Final exam (40%) Class Participation (10%) Assignments (20%) Experiment (20%) Lab1 ( 25%) (week 7) Lab2( 25%) (week 11) Lab3( 25%) (week 13) Lab4 ( 25%) (week 15)
Class Participation 课前阅读、准备; 课堂出勤(课堂签到,缺勤30%以上不得参加期末考试); 做笔记(教材、讲义、笔记本、纸、笔); 课堂讨论、交流、回答问题; 课堂小测验; 课堂报告; 课程网站互动参与; 其它; To be active!
assignments 文档命名:学号-姓名-章节号; 文档格式:.DOC 或 .PDF; 提交时间:每周周一之前,提交网站: http://cc.scu.edu.cn/ 提醒: 杜绝作业抄袭,一旦发现,平时成绩一律按照0分处理; 按时提交作业,无特殊情况不得补交作业;
About course website 四川大学课程中心:http://cc.scu.edu.cn/ 课程: 软件工程导论(王湖南) 课程: 软件工程导论(王湖南) 教材学习网站: http://www.mhhe.com/pressman/ 要求本周内在课程网站内注册!
课程参考文献 全球最有影响力的软件工程期刊: • Transactions on Software Engineering ( IEEE ) • Software ( IEEE ) • Software Engineering Notes ( ACM Special Interest Group ) • Transactions on Software Engineering and Methodology ( ACM ) • The Journal of Systems and Software ( Elsevier ) • Proceedings of the International Conference on Software Engineering ( ACM / IEEE ) • Proceedings of the International Conference on Software Maintenance ( IEEE ) • Software Maintenance: Research and Practice ( Wiley )
Chapter 1 Introduction to Software Engineering Software Engineering: A Practitioner’s Approach, 7th edition by Roger S. Pressman
The Law of Unintended Consequence(非故意结果) Computer software can have profound and unexpected effects on: Science Business Engineering Commercial People, and Culture None could have foreseen!
Where is Software? Transportation Medical Telecommunications Military Industrial Entertainment Office Machines Education etc. 软件已运用到政府、银行和金融、教育、交通、娱乐、医疗、农业和法律等方面: 以网络为中心的系统 信息系统和数据处理 金融和电子商务系统 生物医学系统 多媒体、游戏和娱乐系统 嵌入式和实时系统 容错和免疫系统 。。。。。。 有没有或不能用软件的地方吗?
Key Point Ideas and technological discoveries are the driving engines of economic growth. ------ The Wall Street Journal
Outline The Evolving Role of Software Software The Changing Nature of Software Legacy Software Software Myths
Software’s Dual Role(双重作用) Software is a product Transforms information - produces, manages, acquires, modifies, displays, or transmits information Delivers computing potential of hardware and networks Software is a vehicle(载体) for delivering a product Controls other programs (operating system) Effects communications (networking software) Helps build other software (software tools & environments) Information transformer - function behavior Computing potential - non-functional behavior Example of functional behavior? Type characters into keyboard => word processor displays them on screen Input program file => compiler translates to byte code Example of non-functional behavior? Type character in instant messenger => appears on friend’s screen Compile large program within a few seconds Performance - time and space Vehicle for product delivery Examples of SW controllers (other than OS) Examples of communication SW Examples of development tools
Outline The Evolving Role of Software Software The Changing Nature of Software Legacy Software Software Myths
The Definition of Software Software is: Instructions that when executed provide desired features, functions, and performance; Data structures that enable the programs to adequately manipulate information; and Documents that describe the operation and use of the programs Services that support users to apply software
The Definition of Software 作为软件工程的研究对象,软件是: The collection of computer programs, procedures, rules, and associated documentation and data。 (IEEE) 软件是一种逻辑,用计算机语言表达,是可在计算机硬件上执行的指令集合。
Hardware vs. Software Hardware Software Manufactured Wears out Built using components Relatively simple Developed/Engineered Deteriorates(退化) Custom built Complex
Characteristics of Software Software is engineered, not manufactured. Software doesn’t “wear out”, but it does deteriorate. Most software continues to be custom built.
Manufacturing vs. Development Once a hardware product has been manufactured, it is difficult or impossible to modify. In contrast, software products are routinely modified and upgraded. In hardware, hiring more people allows you to accomplish more work, but the same does not necessarily hold true in software engineering. Unlike hardware, software costs are concentrated in design rather than production.
Wear Out (用尽)vs. Deterioration(退化) Hardware wears out over time
Wear Out (用尽)vs. Deterioration(退化) Software deteriorates over time
Component-Based vs. Custom Built Hardware products typically employ many standardized design components. Most software continues to be custom built. The software industry does seem to be moving (slowly) toward component-based construction.
Outline The Evolving Role of Software Software The Changing Nature of Software Legacy Software Software Myths
Software Applications system software application software engineering/scientific software embedded software product-line software web applications Artificial Intelligence software Ubiquitous(普适) computing Netsourcing(Outsourcing外包) Open source Please visit: http://shareware.cnet.com/ http://sourceforge.net/
Software Complexity I believe the hard part of building software to be the specification, design, and testing of this conceptual construct, not the labor of representing it and testing the fidelity(逼真) of the representation. If this is true, building software will always be hard. There is inherently no silver bullet. - Fred Brooks, “No Silver Bullet” http://www.computer.org/computer/homepage/misc/Brooks/
Outline The Evolving Role of Software Software The Changing Nature of Software Legacy Software Software Myths
Legacy Software Why must it change? It must be fixed to eliminate errors. It must be enhanced to implement new functional and non-functional requirements
Legacy Software What types of changes? Be adapted to meet the needs of new computing environments. Be enhanced to implement new business requirements. Be extended to make it interoperable with other systems. Be re-architected to make it viable(可实施的) within a network environment.
E-Type Systems Software that has been implemented in a real-world computing context and will therefore evolve over time
Outline The Evolving Role of Software Software The Changing Nature of Software Legacy Software Software Myths
Software Myths but … therefore … Affect managers, customers (and other non-technical stakeholders) and practitioners Are believable because they often have elements of truth, but … Invariably lead to bad decisions, therefore … Insist on reality as you navigate your way through software engineering
Software Myths If we get behind schedule, we can add more programmers and catch up. A general statement about objectives is sufficient to begin building programs. Change in project requirements can be easily accommodated because software is flexible.
Software Myths Once we write a working program, we’re done. Until I get the program running, I have no way of assessing its quality. The only deliverable work product for a successful project is the working program. Software engineering will make us create too much documentation and will slow us down.
Management Myths “We already have a book of standards and procedures for building software. It does provide my people with everything they need to know …” “If my project is behind the schedule, I always can add more programmers to it and catch up …” (a.k.a. “The Mongolian Horde concept”) “If I decide to outsource the software project to a third party, I can just relax: Let them build it, and I will just pocket my profits …”
Customer Myths “A general statement of objectives is sufficient to begin writing programs - we can fill in the details later …” “Project requirements continually change but this change can easily be accommodated because software is flexible …”
Practitioner’s Myths “Let’s start coding ASAP, because once we write the program and get it to work, our job is done …” “Until I get the program running, I have no way of assessing its quality …” “The only deliverable work product for a successful project is the working program …” “Software engineering is baloney. It makes us create tons of paperwork, only to slow us down …”
Summary The Evolving Role of Software Software The Changing Nature of Software Legacy Software Software Myths