INTRODUCTION TO SOFTWARE ENGINEERING Have you ever noticed how the invention of one technology can have profound and unexpected effects on other seemingly unrelated technologies, on commercial enterprises, on people and even on culture as a whole? This phenomenon often called:“THE LAW OF UNINTENDED CONSEQUENCES”. Today, computer software is the single most important technology on the world stage, and software is also a prime example of the “Law of Unintended Consequences”. No one could have foreseen that over the past 50 years, software become embedded in system of all kinds. i.e. Banking, Medical, Transportation, Entertainment and so on. And if we believe in the Law of Unintended Consequences, there are many more effects that we can not yet predict! As software’s importance has grown, the software community has continually attempted to develop technologies that will make it easier, faster and less expensive to build and maintain high quality computer programs. Some of the Software technologies are targeted at a Specific Application Domain (e.g. Web site design and implementation). Others focus on a Technology Domain (e.g. O.O System and programming) and still these are Broad-based software Applications domain (e.g. Operating Systems such as Linux), However we have yet to develop a Software technology that targeted to all the likelihood of one arising in the future is small. WHAT IS COMPUTER SOFTWARE? Computer Software is the product that Software professionals (Software Engineers) build and then support over the long term. It encompasses programs that execute within a computer of any size and architecture, content that is presented as the computer program executes and documents in both hardcopy and virtual forms that encompasses all forms of electronic media. The intent of SOFTWARE ENGINEERING is to provide a framework for building ‘’Higher Quality Software.” WHY IS SOFTWARE IMPORTANT? Software affects nearly every aspect of our lives and has become pervasive in our commerce, our culture and our everyday activities. THE EVOLVING ROLE OF SOFTWARE: The role of computer software has undergone significant change over a span of little more than 50 years. Dramatic improvements in Hardware performance profound change in Computing architectures, vast increases in Memory and Storage capacity and a wide variety of exotic input and output options have all precipitated more sophisticated and complex computer based system. Today, a huge software industry has become a dominant factor in the economies of the industrialized world. 1 The “LONE PROGRAMMER” of the earlier Software era has been replaced by teams of Software Specialists, each focusing on one part of the technology required to deliver a complex application. And yet the questions that were asked at the “Lone programmer” era are the same questions that are asked when modern Computer-based Systems are built: Why does it take so long to get software finished? Why are development costs so high? Why can’t we find all errors before we give the software to our customers? Why do we spend so much time and effort maintaining existing programs? Why do we still have difficulties in measuring progress as software is being developed and maintained? These questions and many others demonstrate the Software industry’s concern and the manner in which it is developed, a concern that has lead to the adoption of Software Engineering practice. To gain and understanding software, it is important to examine the Characteristics of Software that makes it different from other things than human beings build. Considering that software is a Logical rather than Physical system element, the Software has characteristics that are considerable different than those of hardware. SOFTWARE CHARACTERISTICS: 1) Software is Developed or Engineered. It is not manufactured in the classical sense. Although some similarities exist between software development and hardware manufacturing, yet the two activities are fundamentally different. 2) Software does not wear out but deteriorates due to changes. Software is not susceptible to the environment maladies that cause hardware to wear out. Software undergoes changes during its life. As changes are made, it is likely that errors will be introduced; causing the failure and thus increased failure rate indicates the decoration of software as a result of change. Another aspect of Software and Hardware differences caused by wear-out is that:When a Hardware component wears out, It is replaced by a spare part. There are no software spare parts. Every Software failure indicates an error in design, or in program coding, therefore, Software maintenance involves considerably more complexity than Hardware maintenance. 3) Most Software continues to be Custom built. Although the industry is moving towards Component-based construction, most software continues to be custom built. In hardware industry the components parts are designed to be reusable and can be ordered off the shelf. These are called Standard Design Components. Component use is a natural part of the Hardware engineering process. 2 However in the Software world, it has only begun to be achieved on a broad scale.. A Software component should be designed and implemented so that it can be “Reused” in many different programs. ”Reusable Objects” or ‘’Reusable Software Components’’ enable the Software Engineers to create new applications from reusable parts. THE CHANGING NATURE OF SOFTWARE Seven categories of Computer Software present continuing challenges for Software Engineers. Each of these challenges will undoubtedly obey the ‘’Law of Unintended Consequences’’ and have effects that can not be predicted today. However Software Engineers can prepare a process that is agile and adoptable enough to accommodate dramatic changes in Technology and Business rules that are sure to come in the next decade. SEVEN BROAD SOFTWARE CATAGORIES 1) 2) 3) 4) 5) 6) 7) System Software Application Software Engineering/Scientific Software Embedded Software Product-line Software Web Application (WebApps) Artificial Intelligence Software (AI Software) SYSTEM SOFTWARE: System Software is a collection of Programs written to service other Programs.( e.g Compilers, Editors, File management utilities, etc) These software are process complex but determinate information structure. Other system software, like Operating Systems, Drivers, Networking software, Telecommunications processors, process largely intermediate data. Caharacteristics of System Software System Software area is characterized by heavy interaction with Computer hardware, heavy usage by multiple users, concurrent operation that regain scheduling, resource sharing and sophisticated process management, complex data structure and multiple external interface. APPLICATION SOFTWARE Application software consists of standalone programs that solve specific business need. Application software processes business data in a way to facilitate business operation or Management decision making. (Hotel Management System, Decision Support Systems etc) 3 ENGINEERING / SCIENTIFIC SOFTWARE Formerly, characterized by “Number crunching” algorithms. Engineering and Scientific Applications range from Astronomy to Volcanology, from Automotive stress analysis to Space shuttle orbital dynamics and from Molecular Biology to Automated manufacturing. EMBEDDED SOFTWARE Embedded software resides within a product or system and is used to implement and control features and functions for the end-uses and for the system itself.(e.g: Keypad control for a microwave oven, digital function in an Automobile such as fuel control, Anti-braking system (ABS) etc. PRODUCT-LINE SOFTWARE (SOFTWARE PACKAGE PROGRAMS) Designed to provide a specific capability for use by many different customers. It can focus on a limited and esoteric marketplace.(e.g: Inventory control products, Database Management System, Personal and Business Functional Applications, Word processing, Computer graphics etc) WEB APPLICATIONS (WEB APPS) WebApps in their simplest form can be little more than a set of linked hypertext files that present information using text and limited graphics. However as e-commerce and B2B (business to business) applications grow in importance, webApps are evolving into sophisticated computing environment. WebApps not only provide standalone features, computing functions and content to end-users, but also are integrated with Corporate databases and Business applications. ARTIFICIAL INTELLIGENCE SOFTWARE (AI SOFTWARE) (AI) software makes use of “NON NUMERICAL ALGORITHMS” to solve complex problems that are not amenable to computation or straight forward analysis. (e.g Robotics, Expert systems, Pattern recognition, Image or Voice recognition) , Artificial Neural networks, Theorem proving and Game playing.) Millions of Software Engineers worldwide are hard at work on Project in one or more of the above mentioned 7 software categories. In some cases new Computer System are being built, but in others, Existing Software Application are being corrected, adapted and enhanced. It is common for a young Software Engineer to work on a program that is older than he/she is! Past generation of Software Engineers have left behind a “Legacy” in each of the Seven Software categories. Hopefully the Legacy left behind by the Present (Current t) Software Engineers will ease the burden of Future Software Engineers. 4 THE NEW SOFTWARE CHALLENGES ON THE HORIZON The following new Software challenges have appeared on the horizon: Ubiquitous computing Net sourcing Open source The New Economy (Dot.com) UBIQUITOUS COMPUTING The rapid growth of ‘’Wireless Networking’’ may soon lead to true Distributed Computing. The challenge to current Software Engineers is to develop System and Applications software that will allow “Small Device”, Personal Computers and Enterprise System to communicate across vast networks. NET SOURCING (WWW) is rapidly becoming a Computing Engine as well as a Content Provider. The challenge for current Software Engineers is to architect simple and sophisticated application that provide benefit to targeted end-user markets world wide (e.g. personal financial planning applications) OPEN SOURCE A growing trend that results in “Distribution of Source Code) for Software applications (e.g. Operating systems, Database and Development environments) so that customers can make Local modification. The challenges for current generation Software Engineers is to build Source code that is “Self- descriptive”, but more importantly, to develop techniques that will enable both customers and developers to know what changes have been made and how those changes manifest themselves within the software. THE NEW ECONOMY (DOT COM) The DOT COM) gripped Financial markets during late 1990’s and the bust that followed have lead many Business people to believe that the New Economy is dead. The New Economy is alive and well but it will evolve slowly. The New Economy will be characterized by mass Communication and Distribution. The challenge for current Software Engineers is to built Application and Mass Product Distribution using concepts that are only forming now. LEGACY SOFTWARE Hundreds of thousands of Computer Programs fall into one of the Seven broad Application categories as mentioned above. Some of these Programs are State-of-the-art Software; but other programs are older programs often referred to as Legacy Software. Legacy Software have been developed decades ago and continually modified to meet changes in business requirements and computing platforms. The proliferation of such system is causing headaches for large organizations who find them costly to maintain and risky to 5 evolve. Still many Legacy Systems remain supportive to core business functions and are indispensable to the business. Hence, Legacy Software is characterized by ‘’Longevity and Business critically’’. Unfortunately, there is one additional characteristic that can be present in Legacy software; that is “Poor quality”. Legacy software system in many cases have inextensible design, code, poor or nonexistent document, test cases and results that were never archived, a poorly managed change history and so on,,,,. Yet these systems are expected to support “Core business functions and are indispensable to the business. What can be done about Legacy Systems? The reasonable answer may be to do nothing as long as it meets the needs of its users and run reliable; it is not broken and does not need to be fixed. However, as time passes Legacy System often evolve for one or more of the following reasons and needs to undergo some significant changes. The software must be adapted to meet the needs of new computing environments or technology. The software must be enhanced to implement new business requirement. The software must be extended to make it inter operational with more modern system and database. The software must be re-architectured to make it viable within a network environment. When these models of evolution occur, a Legacy System must be Reengineered. SOFTWARE EVOLUTION Regardless of its Application domain, Size or Complexity, Compute Software will evolve over time. Change (often referred to as Software Maintenance) drives this process and occurs when:- Errors are corrected. Software is adopted to a new environment, Customer requests new feature on functions Application is reengineered to provide benefit in a modern context. 6 SOFTWARE MYTHS Software Myths are beliefs about software and the process used to build it, can be traced to the earliest days of computing. Myths have a number of attributes that have made them insidious. For instance, - Myths appear to be reasonable statements of fact (sometimes containing an element of truth); - Have an intuitive feel and are often promulgated by experienced Software Professional who “know the score”. Today most knowledgeable Software Engineering Professionals recognize Myths for being “Misleading attitudes’’ that have caused serious problems for both managers and technical people alike. Nevertheless, old attitudes and habits are difficult to modify and remounts of software myths are still believed. MANAGEMENTS MYTHS Managers with software responsibilities are often under pressures to maintain budgets, keep project schedules from slipping and improve quality. Like a drawing person who grasps at a straw, a Software Manager often grasps at belief in a Software myth, even if that belief will lesson the pressure even temporarily. Management Myths Examples:Myth:If we get behind the Project schedules, we can catch up by adding more programmers to the Project team. Reality: This is called the “Mongolian Horde Concept”. Software development is not a mechanistic process like manufacturing. Addition of Programmers to a late Software Project makes it later! At first this statement seems counterintuitive. However, as new people are added, people who were working must spend time to educate the new comers, there by reducing the amount of time spend on productive development effort. . People can be added to a Project but only in a planned and well-coordinated manner. Myth If I decide to Outsource the Software Project to a third party, I can just relax and let that firm build it! Reality If an organization does not understand how to manage and control Software Projects internally, it will be invariable struggle when it outsource Software Project. 7 CUSTOMER MYTHS A Customer who requests Computer Software may be a person within one of the department within the company (i.e Marketing department, Sales department etc) or from an outside company, requesting the software under a contract. In many cases Customer believes myths about Software become Software Managers and Software Professionals do little to correct misinformation. Myths lead to false expectations (by the Customer) and ultimately cause Customer dissatisfaction with Software Developers. Customer Myths Examples: Myth: Project requirements continually change, but change can be easily accommodated because software is flexible. Reality: It is true that Software Requirements change, but the impact of change varies with the time at which it is introduced. When Requirement changes are requested early (before Design or Coding has been started) cost impact is relatively small. However as time passes, cost impact grows rapidly – resources have been committed, as Design framework has been established, and change can cause upheaval that requires additional resources and major Design modifications. Myth A general Statement of Objectives is sufficient to begin writing Programs- We can fill in the details later Reality Although a comprehensive and stable Statement of Requirements is not always possible, an ambiguous statement of objectives is a recipe for disaster. Unambiguous requirements (usually derived iteratively) are developed only through effective and continuous communication between Customer and Developer. SOFTWARE PROFESSIONALS MYTHS Myths are still believed by Software Practitioners have been fostered by over 50 years of programming culture. During the early days of Software, programming was viewed as an art form. Many Software Professionals recognize the fallacy of Software Myths. Regrettable, habitual attitudes and methods foster poor management and poor technical practices, even when reality dictates a better approach.. Recognition of software realities is the first step toward formulation of practical solutions for Software Engineering. 8 Software Practitioner’s Myth Examples: Myth: Once we write the program and get it to work, our job is done! Reality Someone once said that sooner you begin to writing Program codes, the longer it will take you to get finish it! Industry data indicates that between 60 – 80 % of all effort expended on Software will be expended after it is ‘’Delivered’’ to the customer for the first time. Myth The only deliverable work product for a successful project is the working program ! Reality: A working Program is only one part of a software configuration that includes many elements. Documentation provides a foundation for successful engineering and more importantly, guidance for Software Support. --------------------------------------------------------------------------------------------. 9