DMIoT, School of Computing Software Engineering Academic Program Fundamentals of Software Engineering By Yayehudar T. Chapter One Introduction and Overview to Software Engineering Introduction ❑The use of computers is growing very rapidly. • Probably you can say no discipline that does not use computer systems now. • With this increased use of computer, the need for software is increasing. • The complexity of these systems is also increasing. ➢Software Engineering is the discipline to deal with this crisis (complexity). 3 What is Software? ❖Software is defined as: • The collection of computer programs, procedures, rules, and associated documentation and data such as requirements, design models and user manuals. Or • Software is a set of programs, which is designed to perform a well-defined function. • A collection of programs whose objective is to enhance the capabilities of the hardware. ➢The collection of computer programs, procedure rules and associated documentation and data.(IEEE) 4 Cont’d… • Software products may be developed for a particular customer or may be developed for a general market. ❑Software products may be: • Generic - developed to be sold to a range of different customers e.g. PC software such as Excel or Word. • Bespoke (custom) - developed for a single customer according to their specification. ➢A program to solve a problem and a programming systems product (software) to solve the same problem are two entirely different things. • Much more effort and resources are required for software. 5 Program Vs. Software Program Software • Usually small in size • large • Author himself is sole user • Large number of users • Single developer • Team of developers • Lacks proper user interface • Well-designed interface • Lacks proper documentation • Well documented &user-manual prepared • Ad hoc development. • Systematic development ⁘ Brooks rule of thumb: software costs approximately ten times as much as a corresponding program. 6 Software Characteristics ➢Software doesn’t wear out: Software is not susceptible to the environmental maladies (dust, vibration, abuse, temperature) that cause hardware to wear out. ➢Most software is custom built: Software components designed and implemented so that it can be reused in many different programs. • This will enable the software engineer to create application from reusable parts. ➢ Software is intangible: Software is invisible till it is ready and runs ➢Maintenance is without spare part ➢Software is complex 7 Types of Software ▪ System Software: they are written to serve other programs. • Characterized by heavy interaction with computer hardware, concurrent operation that requires scheduling, resource sharing, sophisticated process management. • For example, compiler, operating systems. ▪ Embedded software: Controls hardware ▪ Real-time Software- Programs that monitor/analyze/control real world events as they occur. ▪ Business Software- Programs that business information. access, analyze and process ▪ Personal Computer Software : Word processing, spreadsheets, computer graphics, multimedia, entertainment, 8 Cont’d… ▪ Engineering/Scientific Software : Computer-aided design, system simulation, and other interactive applications have begun to take on real-time and even system software characteristics. ▪ Artificial Intelligence software : Use non numerical algorithms to solve complex problems that are not amenable to computation. • Includes robotics, expert systems, artificial neural networks, game playing. ▪ Internet Software: Programs that support internet accesses and applications. • For example, search engine, browser, e-commerce software, authoring tools. 9 Software Crisis ▪ During software development, many problems are raised and that set of problems is known as the software crisis. ▪ What are the symptoms of the software crisis? • Fail to meet user requirements • Over budget • Difficult to alter, debug, and enhance • Frequently crash • Often delivered late • Use resources non-optimally. 10 Cont’d… Factors contributing to Software Crisis ✓Poor communication between the customer and software developer. ✓Poor project management ✓Lack of adequate training in software engineering and project management ✓Increasing skill shortage and manpower turnover ✓Low productivity improvements. 11 What is Software Engineering ? • The term software engineering is the product of two words, software and engineering. ➢Software is a collection of integrated programs. ➢Engineering is the application of scientific and practical knowledge to invent, design, build, maintain, and improve systems, processes, etc. 12 Cont’d… ❑According to IEEE's definition software engineering can be defined as: • the application of a systematic, disciplined, quantifiable approach to the: • development, operation, and maintenance of software, and the study of these approaches; ❖that is, the application of engineering to software. 13 Cont’d… ❑Software Engineering is an engineering branch related to the evolution of software product using well-defined scientific principles, techniques, and procedures. • Software engineering is an engineering discipline whose focus is the cost-effective development of high-quality software systems. ➢The result of software engineering is an effective and reliable software product. 14 Cont’d… ❖Software engineering is an engineering discipline that provides knowledge, tools, and methods for: • Defining software requirements • Performing software design • Software construction • Software testing • Software maintenance tasks • Software project management 15 Cont’d… Software Engineering Vs Computer Science ✓computer science is concerned with theory fundamentals ✓software engineering is concerned with the practicalities of developing and delivering useful software • 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. • CS is as essential for SW engineers as physics is for electrical or mechanical engineers. 16 Cont’d… Software Engineering Vs System Engineering ➢Software engineering is part of System engineering. ➢System engineering is concerned with all aspects of computer-based systems development including: • Hardware, • Software and • Process engineering • System engineers are involved in system specification, architectural design, integration and deployment 17 Software Quality • Software quality product is defined in term of its fitness of purpose. • That is, a quality product does precisely what the users want it to do. • For software products, the fitness of use is generally explained in terms of satisfaction of the requirements laid down in the SRS document. ➢Although "fitness of purpose" is a satisfactory interpretation of quality for many devices such as a car, a table fan, etc. for software products, "fitness of purpose" is not a wholly satisfactory definition of quality. Example: • Consider a functionally correct software product. • That is, it performs all tasks as specified in the SRS document. • But, has an almost unusable user interface. ➢Even though it may be functionally right, we cannot consider it to be a quality product. 18 Cont’d… What is Good Software? • Software has number of attributes which decide whether it is a good or bad . • The software is required by the customer, used by the end users of an organization and developed by software engineer . • Each one will evaluate the different attributes differently in order to decide whether the software is good. ❑The three dimensions of quality of a software product: ➢Product operation: will be operation characteristics • Correctness, Reliability, Efficiency, Integrity, usability ➢Product transition: adaptableness to new condition • Portability, Reusability, Interoperability ➢Product revision: capability to undergo changes • Maintainability, Flexibility, Testability 19 Cont’d… Software Quality Factors Functionality Reliability Sub Factors Definitions Suitability The capability of software product to provide sets of appropriate functions for specific user’s requirements. Accuracy The capability of a software to deliver accurate results Security The capability of software to control unauthorized access Maturity The capability of the software product to avoid failure due to errors in the software Fault tolerance The capability of the software to maintain a certain level of performance during either faults in the software or infringement of its interface. Recoverability The capability of the software product to reestablish to a certain level of performance and recover data 20 affected during failure Cont’d… Software Quality Factors Usability Compliance Sub Factors Definitions Learnability The capability of the software product to enable the user to learn its application Training Indicates the effort required to teach how to use the software to the users of software Communicati veness It is associated to how well the software communicates to the users. Usability compliance The capability of software product to adhere to guides, regulations and standards related to usability Execution efficiency indicates the time a software takes to perform tasks Storage efficiency The capacity of the software to use appropriate type and amount of resources when performing its functions 21 Cont’d… Software Sub Factors Quality Factors Communication Commonality Interoperability Data Commonality Operability Aesthetic Definitions The software that provide the use of standard protocols. The software that provide the use of standard data representation. Ease of Use, User It indicates the capacity of the Error Protection, software to be easily operated by Technical Accessibility, end users Technical Learnability Consistent Text Layout, The user interface of the software Page Layout, Font Size, product should be attractive, Font Color enjoyable and pleasant enough for users to create an emotional appeal 22 to use it. Cont’d… ❖The modern view of a quality associated with a software product has several quality methods such as the following: • Portability: A software device is said to be portable, if it can be freely made to work in various operating system environments, in multiple machines, with other software products, etc. • Usability: A software product has better usability if various categories of users can easily invoke the functions of the product. • Reusability: A software product has excellent reusability if different modules of the product can quickly be reused to develop new products. • Correctness: A software product is correct if various requirements as specified in the SRS document have been correctly implemented. • Maintainability: A software product is maintainable if bugs can be easily corrected as and when they show up, new tasks can be easily added to the product, and the functionalities of the product can be 23 easily modified, etc. Software Engineering and the Engineering Profession Profession • A duty requiring specialized knowledge and often long and intensive academic preparation • Any working field or business • A paid occupation, especially one that involves prolonged training and a formal qualification. Engineer • The term “engineer” was first used in the sense of a military engineer building of engines of war and other military construction. • In the eighteenth century that the term “civil engineer” began to be used to distinguish engineers who were concerned with civil rather than military construction 24 Cont’d… History of Software Engineering • Software is everywhere – buying bread, driving car, washing clothes ➢Software separated from the hardware in 1950’s – emerged as a distinct technology – became independent product • Original programmers recruited from the ranks of hardware engineers and mathematicians. 25 Cont’d… Software Organization Structure ❑A software house is a company whose primary products are software. ➢Large and well-known companies producing Commercial off-the shelf (COTS) such as Microsoft, Oracle Corporation, HP, Adobe Systems, Apple Inc. etc. ➢Companies producing Software as a Service SaaS, such as Google, Facebook, LinkedIn ➢Companies producing software components, such as Developer Express, Dundas, Component One and Sohn Software ➢Companies focused on delivering bespoke (custom-built) software solutions for vertical industries or particular geographical regions 26 Cont’d… Common roles in a software house: ❑Professional software house normally consists of at least three dedicated sub-teams: • Business analysts who define the business needs of the market. • Software developers who create the technical specification and write the software. • Software testers who are responsible for the whole process of quality management. 27 Cont’d… ❑In bigger software houses, greater specialization is employed, and quite often there are also: • Technical writers who write all the documentation such as user guides. • Release specialists who are responsible for building the whole product and software versioning. • Graphic designers who are normally responsible for the design of the graphical user interface. • Maintenance Engineers who are behind two, three or more lines of support. • Consultants responsible for making the intelligence software, integrating with existing solutions, and implementing business scenarios in Business Process Management software. 28 Ethics in Software Engineering • Software engineering is carried out within a legal and social framework that limits the freedom of engineers. • Software engineers must accept that their job involves wider responsibilities than simply the application of technical skills. ➢They must also behave in an ethical and morally responsible way if they are to be respected as professionals. • You should not use your skills and abilities to behave in a dishonest way or in a way that will bring disrepute to the software engineering profession. 29 Cont’d… • However, there are areas where standards of acceptable behaviour are not bounded by laws but by the more tenuous notion of professional responsibility. • Some of these are: 1. Confidentiality • You should normally respect the confidentiality of your employers or clients irrespective of whether a formal confidentiality agreement has been signed. 2. Competence • You should not misrepresent your level of competence. • You should not knowingly accept work that is outside your competence. 30 Cont’d… 3. Intellectual property rights • You should be aware of local laws governing the use of intellectual property such as patents and copyright. • You should be careful to ensure that the intellectual property of employers and clients is protected. 4. Computer misuse • You should not use your technical skills to misuse other people’s computers. • Computer misuse ranges from relatively trivial (game playing on an employer’s machine, say) to extremely serious (dissemination of viruses). 31 Cont’d… ❑Professional societies and institutions have an important role to play in setting ethical standards. • Organizations such as the ACM, the IEEE and the British Computer Society publish a code of professional conduct or code of ethics. • Members of these organizations undertake to follow that code when they sign up for membership. • These codes of conduct are generally concerned with fundamental ethical behaviour. 32 Cont’d… • The ACM and the IEEE have cooperated to produce a joint code of ethics and professional practice. • Computers have a central and growing role in commerce, industry, government, medicine, education, entertainment and society at large. • Software engineers are those who contribute by direct participation or by teaching, to the analysis, specification, design, development, certification, maintenance and testing of software systems. • Because of their roles in developing software systems, software engineers have significant opportunities to do good or cause harm, to enable others to do good or cause harm, or to influence others to do good or cause harm. ❖To ensure, as much as possible, that their efforts will be used for good, software engineers must commit themselves to making software 33 engineering a beneficial and respected profession. Cont’d… ❑In accordance with that commitment, software engineers shall adhere to the following Code of Ethics and Professional Practice. ➢The Code contains eight Principles related to the behaviour of and decisions made by professional software engineers, including practitioners, educators, managers, supervisors and policy makers, as well as trainees and students of the profession. • The principles identify the ethically responsible relationships in which individuals, groups, and organizations participate and the primary obligations within these relationships. 34 Cont’d… • The Clauses of each Principle are illustrations of some of the obligations included in these relationships. ▪ These obligations are founded in: ✓ the software engineer’s humanity, ✓in special care owed to people affected by the work of software engineers, and ✓the unique elements of the practice of software engineering. • The Code prescribes these as obligations of anyone claiming to be or aspiring to be a software engineer. 35 Software Engineering Code of Ethics and Professional Practice ACM/IEEE-CS Joint Task Force on Software Engineering Ethics and Professional Practices • Software engineers shall commit themselves to making the analysis, specification, design, development, testing and maintenance of software a beneficial and respected profession. ➢In accordance with their commitment to the health, safety and welfare of the public, software engineers shall adhere to the following Eight Principles: 36 Cont’d… 1. PUBLIC – Software engineers shall act consistently with the public interest. 2. CLIENT AND EMPLOYER – Software engineers shall act in a manner that is in the best interests of their client and employer consistent with the public interest. 3. PRODUCT – Software engineers shall ensure that their products and related modifications meet the highest professional standards possible. 4. JUDGMENT – Software engineers shall maintain integrity and independence in their professional judgment. 5. MANAGEMENT – Software engineering managers and leaders shall subscribe to and promote an ethical approach to the management of software development and maintenance. 6. PROFESSION – Software engineers shall advance the integrity and reputation of the profession consistent with the public interest. 37 Cont’d… 7. COLLEAGUES – Software engineers shall be fair to and supportive of their colleagues. 8. SELF – Software engineers shall participate in lifelong learning regarding the practice of their profession and shall promote an ethical approach to the practice of the profession. 38 Thank You! ? 39