computing and se ii introduction and overview er-yu ding software institute, nju
TRANSCRIPT
Computing and SE II
Introduction and Overview
Er-Yu DingSoftware Institute, NJU
Main Contents
1. What is SE (Software Engineering) ?2. SE .vs. CS (Computer Science)?3. Contents of SE4. About SE professional5. How to learn SE?6. Course overview
1. What is SE ?Your thoughts here!
?
What is Software Engineering?
• As defined in IEEE Standard 610.12:–( 1) The application of a systematic,
disciplined, 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 )
–( 1 )应用系统化的、学科化的、定量的方法,来开发、运行和维护软件,即,将工程应用到软件。
–( 2 )对( 1 )中各种方法的研究。
What is software?
Your thoughts here!
?
Software
• In the first, software is not exist• When software is produced, it are
tools– Software = programs + documents + data
• About now, software is simulation more than tool– Knowledge is carried on software – Software = programs + documents + data
+ knowledge
Software is complex
• As simulation of the world, software must simulative to the real world mostly and can solve problems of the real world
• The real world is complex• So …
– Software is complex• Problems are complex• Solutions are complex
– Only programmers can’t deal with software development well
• They don’t know the problems and solutions• And none can tell them the knowledge clearly
– If we still produce software only with programming, badly things will happen.
Dimensions of software complexity
Walker Royce
Technique
Scale
Restriction
Embedded, Real-time, Fault-tolerant , High-performance
Large scale, Many stake holders
Distributed, Creative, Architectural Reengineering, Special technical difficulty
Mostly 4GL, or component-based Application reengineering Interactive performance Small scale Single stakeholder No special restriction
Software needed to be engineered
• 1968 年北大西洋公约组织的计算机科学家在联邦德国召开的国际学术会议上第一次提出了“软件危机” (software crisis) 这个名词– 软件危机 : 指的是在计算机软件的开发和维护过程中所遇
到的一系列严重问题• 开发成本超出预算,实际进度比预定计划一再拖延。• 用户对“已完成”系统不满意的现象经常发生。• 件产品的质量往往靠不住。 Bug 一大堆, Patch 一个接一
个。• 件的可维护程度非常之低。• 软件通常没有适当的文档资料。• 软件的成本不断提高。• 软件开发生产率的提高赶不上硬件的发展和人们需求的
增长• 1969 年的后续会议中提出了“软件工程”的发展之路
Software engineering is about managing the complexity!
Engineering
• Examples– Mechanical engineering– Architectural engineering– Chemical engineering– Electrical engineering– Nuclear engineering– …
• Yours thoughts here– What is the word “Engineering” means?
What is the “Engineering” means?• Engineering is …
– The application of scientific principles and methods to the construction of useful structures & machines which can solve some problems of the real world
– Creating cost-effective solutions to practical problems by applying scientific knowledge to building things in the service of mankind
Factors of Engineering
• Problem: Motivation
• Scientific Knowledge: Instrument
• Solution/Machine: Objective
• Cost-Benefit Effective: Condition
Software engineering• Problem
– Real world chaos• If the state of the real world do not accord with our
expectations , then there is a problem.– Broad scope
• All fields that mankind set foot in• In others engineering, problems are limited
– Mostly not clear, needed to be discovered• In others engineering, problems are specific and clear
• Can software engineer master so much knowledge?– As a software engineer, communication and negotiation skill
is very important– With all kinds of people, especially users.
Software engineering
• Scientific Knowledge– Computing science as the scientific basis
• Formal techniques– Based on mathematics and logic
– Many aspects have been made systematic
• Methods/methodologies/techniques• Languages• Tools• Processes
Software engineering• Scientific Knowledge
– Science .vs. Practice• Formalists: base
their work on the theoretical foundations of computing science
• Pragmatists: take that software engineering is a practical discipline that can be benefit from more than formal techniques
Software engineering
• Scientific Knowledge– Computing science knowledge is basis of SE
• Features of the computer• Software entities (program languages)• Methods/methodologies/techniques• …
– Practice knowledge should also be effective shared
• Methods/techniques• Problems/solutions• …
Software engineering
• Solution/Machine– General machine + specific solution
• Solution can be mapped into the general machine with the help of program languages
• Not different machines for different problems, like others engineering
– Development of solution is the essential task of SE
– Mapping solution into general machine is accidental task of SE
Tasks of software development
• All software construction involves essential tasks, the fashioning of the complex conceptual structures that compose the abstract software entity
• And accidental tasks, the representation of these abstract entities in programming languages and the mapping of these onto machine languages within space and speed constraints.
-------Frederick P. Brooks, Jr., No Silver Bullet, 1986
Software engineering
• Cost-Benefit Effective– Feasibility study
• Benefit is up to clients• Cost is up to software engineer
– There are always many ways to a destination, software engineers should choose the most cost-benefit effective one (not the most advanced one).
• Tradeoff is very important in SE– When cost-benefit is inessential, then SE may
disappears• Cost is small
– Small program• Benefit is implicit
– Exploration study• Cost is inessential
– Computer science study
2. SE .vs. CS ?
• General machine– Computer construction
• How to design a computer to solve as many problems as we can?
– Computing theory: computable, Turing machine, λcalculus
• Computer architecture/Computer instructions
2. SE .vs. CS ?
• General machine– Virtual machine
应用软件
编译器数据库管理系
统网络系
统 …
操作系统
硬件
2. SE .vs. CS ?
• Problems/Solutions
Real world Problem Solution
General machineSolution machine
Expected world
Expected world
2. SE .vs. CS ?
• Problems/Solutions
Real world analysis Problem design Solution
General machineSolution machine
Implementatio
n
(Pro
gramming, T
est)
Installingmaintaining
Expected world
2. SE .vs. CS ?
• Problems/Solutions
Real world analysis Problem design Solution
General machineSolution machine
Implementatio
n
(Pro
gramming, T
est)
Installingmaintaining
MethodsTechniquesLanguages
Tools…
Expected world
2. SE .vs. CS ?
• SE
Real world analysis Problem design Solution
General machineSolution machine
Implementatio
n
(Pro
gramming, T
est)
Installingmaintaining
MethodsTechniquesLanguages
Tools…
Expected world
2. SE .vs. CS ?
• CS
Real world analysis Problem design Solution
General machine:OS, Compilers,DBMS,…
Solution machine
Implementatio
n
(Pro
gramming, T
est)
Installingmaintaining
MethodsTechniquesLanguages
Tools…
Theory
What is the difference between software engineering and computer
science?Computer Science Software Engineering
is concerned with
Computer science theories are currently insufficient to act as a complete underpinning for software engineering, BUT it is a foundation for practical aspects of software engineering
theory fundamentals
the practicalities of developing delivering useful software
Scientist vs Engineer
• Computer Scientist– Proves theorems about algorithms, designs languages,
defines knowledge representation schemes– Has infinite time…
• Software Engineer– Develops a solution for an application-specific problem
for a client– Uses computers & languages, tools, techniques and
methods– Works in multiple application domains– Has limited time (maybe only 3 months...)– …while changes occurs in requirements and available
technology
Programming VS SE——The means of “software”
• When we say software, we are not talking about programs, but about program system products
• We all know all about programs, but what about program system products?
• Fred Brooks explains the difference and shows the effort involved
Programming VS SE ——Program and Program
system product (1)• Program– program is complete by itself– program is ready to run by author for planned
inputs on system on which it was developed, and probably under no other circumstances
• Product system– each program is a component in integrated
collection (system)– precisely defined interface to which all programs
in system must comply– each program must stick to reasonable resources– each program is tested with other programs;
number of combinations grows quadratically with each additional program
Programming VS SE —— Program and Program
system product (2)• Program Product:– product can be run, tested, repaired, extended
by anyone, not just author– product runs on multiple platforms – product accommodates many sets of data– range and form of input to product must be
generalized– product must test for validity of input and
provide response to invalid inputs– must be product documentation for
maintainers and users
Programming VS SE —— Program and Program
system product (3)• Program System Product:– all attributes of program system and– all attributes of program product
(multipliers may be bigger if the number of components is large)
Programming VS SE —— Program and Program
system product (4)• Perhaps the key problem is that when we should be thinking about program system product , we continue to think about programs, and all expectations are off by an order of magnitude.– ease vs. difficulties,– time,– costs,– …
• We see only the program and forget all the other junk that must be added to make it a program system product !
Programming VS SE
• Shortcomings with programming and without SE– Programming from scratch– Programming before reasoning– Implementing the first design– Designing for the implementer– Failing to understand problem scale– Writing throwaway exercises– Ignoring reliability, safety, economic, and other
system requirements• Practical, useful software doesn’t happen by
accident. It requires design skills not unrelated to traditional engineering design.
Another comparison:Software Engineering VS System
Engineering• What is a system?– Some part of reality that can be observed to
interact with its environmentSeparated from its environment by a boundaryA system receives inputs from the environment & send outputs to the environmentSystems have interesting emergent properties
Another comparison:Software Engineering VS System
Engineering• Information Systems – Software intensive systems exist to
support Human Activity
• System Engineering – Designing, implementing, deploying and
operating information systems which include hardware, software and people
• Software engineering• Hardware engineering• People engineering
3. Contents of SE
• Software technologies– Technologies to produce software
• Software process and management– Methods to ensure engineering
principles
Software technologies
• Analysis• Design• Implementation• Testing• Maintaining• …
Expected world
Real world analysis Problem design Solution
General machineSolution machine
Implementatio
n
(Pro
gramming, T
est)
Installingmaintaining
Software technologies
Software process and management
• Management of resources– Including human, money, time, etc.– Project management / software management
• Management of activities– Process Management
• Management of output– Software configuration management
• Management of objective– Quality management
• Management of tools– Tools and environments
Software process and management
4. About SE professional
• Systems Analyst -- analyzes requirements for an application, may also do business case analysis (economic analysis)
• Software Designer – design the solution structure• Software Architect – designs the overall structure of
the application• Software Programmer – implements the design using
software development tools• Software Tester (independent verification and
validation – e.g. NASA IV&V Facility, South Fairmont)• Software Project Manager –plan, organize, direct,
coordinate, control a software project (emphasis on risk management)
4. About SE professional
• Software Configuration Manager – identify, change control, status accounting, audits and reviews
• Software Quality Manager/Engineer – software reliability modeling, statistical quality control, defect analysis
• Software Network Specialist – LAN/WAN Network design, installation, maintenance
• Software Systems Administrator – administers user accounts, technology refreshment, software deployment to users, software problem solvers
• Software Database Administrator – administers the database (installation, maintenance, backup, refreshment)
• …
what knowledge is important to a software professional ( 200
0 )
what knowledge is important to a software professional (2000)
5. How to learn SE?
外因问题背景工具技术、方法
内因知识背景实践经验灵感
中间方案创造性 逻辑验证 解决方案
软件质量
问题软件工程活动 软件产品
If you want to be an excellent software engineer, you need to prepare these knowledge.
5. How to learn SE?
• 外因:问题背景– 职业决定– 学习特殊领域的特点:嵌入式、信息系统、网络…
• 外因:工具– 掌握常用工具的使用 : 编程工具、管理工具…– 实践
• 外因:技术、方法(重要)– 课堂学习 : 结构化、面向对象…– 实践巩固
5. How to learn SE?
• 内因– 知识背景(重要)
• 课堂学习基础• 课外大量阅读
– 实践经验(重要)• 多动手实践• 多参与交流(浏览专业论坛)
– 灵感• 各求多福
5. How to learn SE?
• 软件质量– 学习、实践、阅读
5. Course overview
• 目标– 建立软件工程的初步知识框架– 理解软件工程的工程性– 理解软件工程的基本活动– 了解软件工程中的各种常见方法与技
术– 了解软件工程的有效实践
5. Course overview
• 内容– 软件技术
• 需求工程• 软件设计• 软件构造• 软件测试• 软件维护与软件演化
– 软件过程与管理• 项目管理• 过程管理• 质量管理• 配置管理• 工具与环境
– 软件实践• 技术实践• 管理实践
Any Question?
Recommend paper《 Prospects for an engineering discipline of
software》 《 what knowledge is important to a software
professional 》
Next Lecture——A brief history of SE