450 likes | 458 Views
CS251 – Software Engineering Lecture 1: A Course Overview. Slides by Mohamed El-Ramly, PhD http://www.acadox.com/join/563R9V. عام جديد. كل عام و أنتم على الطاعة أدوم و من الله أقرب كل عام و أنتم على البرمجة أقدر و من التخرج أقرب عام جديد على عملك شهيد فاغتنمه فإنه إن مضى لا يعود أبدا.
E N D
CS251 – Software EngineeringLecture 1: A Course Overview Slides by Mohamed El-Ramly, PhD http://www.acadox.com/join/563R9V
عام جديد • كل عام و أنتم على الطاعة أدوم و من الله أقرب • كل عام و أنتم على البرمجة أقدر و من التخرج أقرب • عام جديد على عملك شهيد • فاغتنمه فإنه إن مضى لا يعود أبدا
Lecture 1 Outline • Course Objectives • Software Crisis • Introduction to Software Engineering • Tools • Course Administration • Assignment / Project • Eiffel Option
1. Course Objectives • This course aims to teach students the disciplined way of engineering software products. It aims to: • Educate the students about the cost of software failures and the importance of software engineering. • Train the students on the application of engineering practices in software development • Introduce them to the Software Engineering Body of Knowledge.
1. Course Objectives • This course aims to teach students the disciplined way of engineering software products. It aims to: • Train them on the basics of software requirements engineering, modeling, design, construction, project management and quality assurance. • Train students on teamwork
2. Software’s Chronic Crisis • Many software system fail to serve their purpose or even may cause harm. • Many projects never deliver. • IBM survey of 24 companies developing distributed systems: • 55% of the projects cost more than expected • 68% overran their schedules • 88% had to be substantially redesigned
2. Software’s Chronic Crisis • Software product size is increasing exponentially • faster, smaller, cheaper hardware • Software is everywhere: from TV sets to cell-phones • Software is in safety-critical systems • cars, airplanes, nuclear-power plants
2. Software’s Chronic Crisis • We are seeing more of • distributed systems • embedded systems • real-time systems • These kinds of systems are harder to build • Software requirements change • software evolves rather than being built
2. Software’s Chronic Crisis • Software’s chronic crisis: Development of large software systems is a challenging task • Large software systems often: Do not provide the desired functionality; Take too long to build; Cost too much to build Require too much resources (time, space) to run; Cannot evolve to meet changing needs
2. Software’s Chronic Crisis • We are the only industry that states something like this on their product licenses: • إخلاء المسؤولية عن الضمان. يتم ترخيص البرنامج "بالحالة التي عليها" و"على علاته" و"بالحالة التي يتم توفيره عليها".وبالتالي فإنك تتحمل مسؤولية استخدامه. لا تقدم MICROSOFT، والموزعون التابعون لها وأيٍ من الشركات التابعة لنا المعنية والموردون (المشار إليهم فيما بعد باسم "الموزعون")، أية ضمانات أو تعهدات أو شروط صريحة بموجب هذا البرنامج أو فيما يتعلق به. قد تكون لك بعض حقوق المستهلك الإضافية بموجب القوانين المحلية الخاصة بك، والتي لا يمكن لهذه الاتفاقية أن تغيرها. وإلى الحد الذي تسمح به القوانين المحلية الخاصة بك، ينفي الموزعون عن أنفسهم أي ضمانات أو شروط ضمنية، بما في ذلك الضمانات أو الشروط الخاصة بالقابلية للتسويق والملاءمة لغرض معين وعدم الانتهاك. • تحديد الأضرار واستثناؤها. يمكنك الحصول على تعويض من Microsoft ومورديها مقابل الأضرار المباشرة فقط بحيث لا يتجاوز ذلك المبلغ الذي دفعته مقابل البرنامج. لا يمكنك الحصول على أي تعويض يتعلق بأية أضرار أخرى بما في ذلك الأضرار اللاحقة أو خسارة الأرباح أو الأضرار الخاصة أو غير المباشرة أو العارضة.
2. Software’s Chronic Crisis • Failure of software causes the loss of: • Time • Money • User satisfaction, and • LIVES
Werewolves Out of all the scary monsters of the past, werewolves were the scariest because the change shape without notice.
Software Werewolf • Software is like a werewolf—it looks normal until the moon comes out and it turns into a monster • Missed deadlines • Blown budgets • Buggy software
No Silver Bullet • In 1987, in an article titled: “No Silver Bullet: Essence and Accidents of Software Engineering” • Frederick P. Brooks made the argument that there is no silver bullet that can kill the werewolf software projects
Essence vs. Accident • Essence vs. accident in software development • We can get rid of accidental difficulties in developing software • This will increase productivity • For example using a high level programming language instead of assembly language: • The difficulty we remove by replacing assembly language with a high-level programming language is not an essential difficulty of software development, • It is an accidental difficulty brought by inadequacy of assembly language for programming
Essence vs. Accident • Brooks argues that software development is inherently difficult • “The essence of a software entity is a construct of interlocking concepts: data sets, relationships among data items, algorithms and invocations of functions. This essence is abstract in that such a conceptual construct is the same under many different representations. ... The hard part of building software is the specification, design, and testing of this conceptual construct, not the labor of representing it and testing the fidelity of the representation.”
Inherent Difficulties in Software • Software has the following properties in its essence: • Complexity • Conformity • Changeability • Invisibility • Since these properties are not accidental representing software in different forms do not effect them
Complexity • Software systems do not have regular structures, there are no identical parts • Identical computations or data structures are not repeated in software • In contrast, there is a lot of regularity in hardware • for example, a memory chip repeats the same basic structure millions of times
Complexity • Software systems have a very high number of discrete states • Infinite if the memory is not bounded • Elements of software interact in a non-linear fashion • Complexity of the software increases much worse than linearly with its size
Conformity • Software has to conform to its environment • Software conforms to hardware interfaces not the other way around • Most of the time software systems have to interface with an existing system
Changeability • Software is easy to change, unlike hardware • Once an Intel processor goes to the production line, the cost of replacing it is enormous (Pentium bug cost half billion dollars) • If a Microsoft product has a bug, the cost of replacing it is negligible. • Just put the new download on a webpage and ask users to update their software
Changeability is not an Advantage • Although it sounds like, finally, software has an advantage over hardware, the effect of changeability is that there is more pressure on changing the software • Since software is easy to change software gets changed frequently and deviates from the initial design • adding new features • supporting new hardware
Invisibility • Software is invisible and un-visualizable • Complete views can be incomprehensible • Partial views can be misleading • All views can be helpful • Geometric abstractions are very useful in other engineering disciplines • Floor plan of a building helps both the architect and the client to understand and evaluate a building • Software does not exist in physical space and, hence, does not have an inherent geometric representation
3. What is this course about? • This is the third in a series of courses on software development. • Programming 1 (CS112) • Programming 2 (CS213) • Algorithms and Data Structures (CS214) • File Organization (CS215) • Databases Systems 1 (IS211) • Software Engineering 1 (CS251) • Software Engineering 2 (CS352) – (CS, IS)
3. What is Software Engineering? • The process of solving customers’ problems by the systematic development and evolution of large, high-quality software systems within cost, time, and other constraints • Other definitions: • IEEE: (1) the application of a systematic, disciplined, quantifiable approach to the development, operation, maintenance of software; that is, the application of engineering to software. (2) The study of approaches as in (1). • The Canadian Standards Association: The systematic activities involved in the design, implementation and testing of software to optimize its production and support.
SWEBOK’s Key 10 Knowledge Areas SWEBOK 2004 SWEBOK 2013 added 5 more KAs
Software Requirements • The Software Requirements Knowledge Area (KA) is concerned with the elicitation, analysis, specification, and validation of software requirements. • It is widely acknowledged within the software industry that software engineering projects are critically vulnerable when these activities are performed poorly. • Software requirements express the needs and constraints placed on a software product that contribute to the solution of some real-world problem.
Software Design • Design is defined as both “the process of defining the architecture, components, interfaces, and other characteristics of a system or component” and “the result of [that] process.” Viewed as a process, software • Software design is the activity in which software requirements are analyzed in order to produce a description of the software’s internal structure that will serve as the basis for its construction.
Software Construction • The term software construction refers to the detailed creation of working, meaningful software through a combination of coding, verification, unittesting, integrationtesting, and debugging.
Sofwtare Testng • Testing is performed to evaluate and improve product quality by identifying defects and problems. • Software testing consists of the dynamicverification of a program’s behavior on a finite set of test cases, suitably selected from the usually infinite executions, against the expected behavior.
Software Maintenance • Software development efforts result in the delivery of a software product that satisfies user requirements. Accordingly, the software product must change or evolve. • Once in operation, defects are uncovered, operatingenvironments change, and newuserrequirements surface. • The maintenance phase of the life cycle begins following a warranty period or post-implementation support delivery, but maintenance activities occur much earlier.
Software Configuration Management • Software configuration management (SCM) is the task of tracking and controlling changes in the software, part of the larger cross-discipline field of configuration management.” • SCM practices include revision control and the establishment of baselines. If something goes wrong, SCM can determine what was changed and who changed it.
Software Engineering Management • Software Engineering Management can be defined as the application of managementactivities — planning, coordinating, measuring, monitoring, controlling, and reporting—to ensure that the development and maintenance of software is systematic, disciplined, and quantified.
Software Engineering Process • In this knowledge area “software engineering processes” are concerned with work activities accomplished by software engineers to develop, maintain, and operate software, such as software requirements, software design, software construction, software testing, software configuration management, and other software engineering processes.
Software Quality • Software quality assurance (SQA) consists of a means of monitoring the software engineering processes and methods used to ensure quality. The methods by which this is accomplished are many and varied, and may include ensuring conformance to one or more standards, such as ISO 9000 or a model such as CMMI.
Course Contents We will cover as much of these as we can: • Overview of Software Engineering ½ Week • Software Disasters ½ Week • Review of OOP 1 Week • Software Lifecycle and Software Engineering Processes 1 Week • Requirements Engineering (SRS, use cases, storyboards, etc.) 1 Week • Software Modeling and Analysis and UML 3 Weeks • Software Patterns 1 Week • Software Architecture 1 Week • Software Construction 1 Week • Software Quality and Unit Testing 1 Week • Software Configuration and Project Management 1 Week
4. Course Tools • This course will introduce a combination of new tools for software Engineering, which will include some of these: • Software Engineering tools (we teach): • Models: UML • SCM: GitHub • Management: Scrum
4. Course Tools • This course will introduce a combination of new tools for software Engineering, which will include some of these: • Latest Technologies (You learn): • Language: Java or Eiffel • IDE: Eclipseor Eiffel Studio • Technologies: Androidor GWT