530 likes | 796 Views
Computing and SE II Introduction and Overview. Er-Yu Ding Software Institute, NJU. Main Contents. What is SE (Software Engineering) ? SE .vs. CS (Computer Science)? Contents of SE About SE professional How to learn SE? Course overview. What is SE ?. Your thoughts here! ?.
E N D
Computing and SE II Introduction and Overview Er-Yu Ding Software Institute, NJU
Main Contents What is SE (Software Engineering)? SE .vs. CS (Computer Science)? Contents of SE About SE professional How to learn SE? Course overview
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.
Walker Royce Dimensions of software complexity
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 scientificprinciples and methods to the construction of usefulstructures & 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 Solution Problem General machine Solution machine Expected world
2. SE .vs. CS ? Problems/Solutions Real world Solution Problem analysis design Implementation (Programming, Test) General machine Solution machine Expected world Installing maintaining
2. SE .vs. CS ? Problems/Solutions Methods Techniques Languages Tools … Real world Solution Problem analysis design Implementation (Programming, Test) General machine Solution machine Expected world Installing maintaining
2. SE .vs. CS ? SE Methods Techniques Languages Tools … Real world Solution Problem analysis design Implementation (Programming, Test) General machine Solution machine Expected world Installing maintaining
2. SE .vs. CS ? CS Methods Techniques Languages Tools … Theory Real world Solution Problem analysis design Implementation (Programming, Test) General machine :OS, Compilers,DBMS,… Solution machine Expected world Installing maintaining
What is the difference between software engineering and computer science? • the practicalities of developing • delivering useful software • theory • fundamentals 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
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 environment • Separated from its environment by a boundary • A system receives inputs from the environment & send outputs to the environment • Systems 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 …
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
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 (2000)
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 目标 建立软件工程的初步知识框架 理解软件工程的工程性 理解软件工程的基本活动 了解软件工程中的各种常见方法与技术 了解软件工程的有效实践