One from the software crisis talked to the software crisis refers to a series of serious problems encountered during the development and maintenance of computer software. At the late 1960s to the early 1970s, the term "software crisis" was widely circulated in the computer world. In fact, from the day of the birth of the computer, there was a software crisis, only in 1968, in the International Software Engineering Conference held in the original Xidieng encryption (Garmish), it was widely recognized. 1 Software Crisis (1) The software cost is increasing in the early days of computer development, and large computer systems are mainly designed to be very narrow military fields. During this period, the cost of developing computers is mainly provided by state finances, and the developers rarely consider the development cost problem. With the development of computer marketization and civilization, cost and costs become one of the most important issues considered by investors. In the 1950s, software costs accounted for 10% -20% in the entire computer system cost. However, with the development of the software industry, the software cost is growing. In contrast, computer hardware With the advancement of technology, the price is expanded, the price is continuously declined. In this way, the proportion of software costs is increasing in the computer system. By the mid-1960s, the proportion of software costs in computer systems has increased to about 50%. Moreover, the number is constantly increasing, the following is a set of data from the US Air Force computer system: In 1955, the software costs account for 18% of the total cost, reaching 60% in 1970, reaching 72% in 1975, 1980 reached 80%, about 85% in 1985. (2) It is difficult to control the development of software because software is logical, intellectual products, and software development needs to establish a huge logic system, which is different from other products. For example: a machine is produced in the factory. When time is tight, we must work overtime or implement "three classes", and these methods cannot be used in software development. In the software development, users have no unexpected situations such as changes, so that software development process is difficult to ensure that they have brought great difficulties to project plans and arguments. Brook has been proposed: "In the delayed software project, the increase in manpower will only make it more difficult to complete." In fact, the structure of the software system is very complicated, and the additional contacts of each part are great, and blindly adding software developers cannot proportionally improve software development capabilities. Conversely, as people increases, people's organization, coordination, communication, training and management of personnel will be more serious. Many important large software development projects, such as IBM OS / 360 and world military command control systems (WWMCCS), after a lot of human and financial resources, because of the difference between the predetermined goals, it has to declare failure. (3) The result is not satisfactory even if the software quality difference software project can be completed according to the scheduled date. From 1965 to 1970, the Van Denburg base launched a rocket failed many times, and most of the faults were caused by application errors. Some minor errors can cause catastrophic consequences, for example, once, in the United States, Kennedy launched an Auris Rocket, the rocket flies from tens of miles in the ground began to flip, the ground control center is forced to blow up. After the examination, it was found that a hyphen was missing in the flight plan program. It is such a small 漏 that has caused this rocket test worth $ 18.5 million. In the "Software Workshop", the programmer is almost always habitually used to replace the user's demand with its own ideas. Many functions are only the programmer's "wish" "Moreover, this is an important factor that can't be satisfied with the software.
(4) Software maintenance difficulties are officially put into use, there is always a certain number of errors. Under different operating conditions, the software will fail, so it is necessary to maintain. However, due to software design and development, there is no strict accordance with software development standards, all kinds of random are very large, and there is no complete realistic reflection system status record document, which has caused huge difficulties to software maintenance. Especially during the software use, the original developers may have left the original development organization for various reasons, so that software is almost unacceptable. In addition, software modification is a very "dangerous" work, for a complex logic process, even if you do a small change, you can introduce potential errors, often "correct a mistake brings more new errors" Problem to generate side effects. Information shows that the cost of maintaining software payment is 40% -75% of all hardware and software costs. 2 Causes of software crises From the performance of the software crisis and software as a specialty of logic products, the reason for software crises can be found: (1) User demand is not clear in software development, the user's demand is not clear, and it is mainly reflected in four aspects. : ◇ Before the software is developed, the user does not know the specific needs of the software; ◇ The user's description of the software needs is not accurate, may have an omissions, have an unisforced, and even errors; ◇ In software development, users still The requirements for modifying software features, interfaces, supporting environments; ◇ Software developers have differences in understanding of user needs and users. (2) Lack of correct theoretical guidance lacks powerful methods and tools. Since the software is different from most other industrial products, its development process is a complex logical thinking process, and its products greatly depend on the high intellectual intelligence investment in developers. It is also an important reason for the software crisis due to excessively relying over the skills and creativity of program designers in software development. (3) The size of the software is getting bigger and larger with the increase in software applications, and the software scale is getting more and more. Large software projects need to organize certain human resources, and most managers lack experience in developing large-scale software systems, and most software developers lack management experience. The information exchange of all kinds of personnel is not timely, inaccurate, and sometimes misunderstandings. Software project developers cannot effectively handle all the relationships and individual branches of large software independently, so they are prone to omissions and errors. (4) The software complexity is increasingly high, not only rapidly expands in scale, but also has a sharp increase in complexity. The specificity of software products and the limitations of human intelligence, leading to people's powerful? Quot; complex issues ". The so-called" complex problem "concept is relatively, once people use advanced organizational forms, development methods and tools improve software development Efficiency and ability, new, larger, more complex problems are in front of people. 3 How to overcome the software crisis people have seriously study and analyze the real reasons behind the software crisis, they have got a "people face" Not only is a technical problem, more importantly, management issues. It is necessary to fail to fail. "The conclusion, starting to explore the possibility of software production using the process of engineering, that is, the development, principles, techniques and methods of modern engineering, the development, management and maintenance of computer software. So, a new field of computer science technology - - Software engineering is born. Software engineering is developed by the principles and methods of engineering, science and mathematics, maintaining computer software related technical and management methods. Software engineering includes three elements: (1) method. Software engineering method provides software development The technology "how to do" is the technical means of completing software engineering projects; (2) Tools.
Software tools are the extension and extension of human intelligence and physical strength in the development of software, providing an automated or semi-automatic software support environment for software engineering methods; (3) process. The process of software engineering is integrating software engineering methods and tools to achieve reasonable, timely development of computer software development. So far, software engineering research and application have achieved great achievements, and it is greatly alleviated by software development methods, tools, management and other aspects. The passive situation caused by the software crisis. Two-component and software reuse 1 software reuse software reuse refers to the process of repeating the same or similar software elements during two or more different software development. Software elements include program code, test case, design document, design process, demand analysis document, or even domain knowledge. Typically, this reusable element is referred to as a soft member, the larger the software element, and the greater the particle size of the reuse. Using software reuse technologies can reduce a large number of repetitive work in software development activities, so that software productivity can be improved, reduce development costs, and shorten the development cycle. At the same time, since the soft components are mostly strict quality certification, they are validated in the actual operating environment, and the reuse soft components help improve software quality. In addition, a large number of soft components, software flexibility and standardization are also expected to be improved. Here, we are just for the convenience of the subsequent text, simply introduce the concept and role of software reuse techniques. Software Reuse is a profound technology, interested readers can further refer to information and books. 2 The component is generally believed that the component is a unit software that is complete, syntax correct and a reusable value. It is a system that can be clearly recognized in the software reuse; structure, it is a composite of a semantic description, communication interface and implementation code . Simply put, the component is a program body with a certain function, can work independently or can be coordinated with other components, and the use of components is independent of his development, production. From an abstraction, object-oriented technology has reached a class reuse (code reuse), which is encapsulated in units. Such reuse granularity is still too small, not sufficient to resolve heterogeneous interoperability and higher efficiency. The component refers to an extent of the abstraction to a higher level, which is a combination of a set of classes and represents a specific service of one or more functions, and provides users with multiple interfaces. The entire component hides the specific implementation and serves only using the interface. In recent years, component technology has developed rapidly, and has formed three main genres, namely IBM CORBA, Sun's Java platform and Microsoft COM . If the software system is considered a collection of components, the components constituting a system can be divided into five classes: (1) independent and mature components. Independent and mature components have been used for multiple inspections of the actual operating environment. This type of component hides all interfaces, and users only need to use the predetermined command. For example, database management systems and operating systems, etc. (2) A restricted component. The restricted components provide an interface indicating that the conditions and premise of use, this component is assembled, generating resource conflicts, coverage, and the like, which need to be tested during use. For example, a variety of basic class libraries in object-oriented object programming languages. (3) Adaptive components. The adaptive member has been packaged or used interface technology, and the incompatibility, resource conflict, etc. can be used directly. This component can be used in various environments without modifying. For example, ActiveX, etc. (4) Assembled components. When the assembled component is installed, it has been assembled at different levels of the operating system, the database management system, or the information system, and the use of the glue code can be used. At present, most software products offer most software products are here.
(5) Modified components. Modified components can be replaced. If you modify an error on the original component, add new features, you can use re-"package" or write interface to implement the replacement of the component. This component is used in application system development. Component-based software development typically includes component acquisition, component classification, and retrieval, component assessment, adaptive modification, and assembly of existing components in new contexts into new systems. Component acquisition can have a variety of different ways: (1) obtaining a component that meets the required requirements from the existing member, directly use or adaptive modification to obtain reusable components; (2) through the heritage project, will have potential reuse value The component is extracted, resulting in reusable components; (3) purchasing ready-made commercial components from the market, ie the COTS component; (4) developing new components that meet the requirements. When a business or organization is in progress, it must take into account the disposable cost of obtaining components in different ways and future maintenance costs, making optimal choices. The Software Architecture 1 Software Architecture The Software Crisis of the Supreme Software Crisis has enabled people to pay attention to the research of software engineering. At first, people focus on the software design in the selection of data structures and algorithms. As the software system is growing, it is increasingly complex, and the structure and specifications of the entire system are more important. The extent of the software crisis is increasingly, and the existing software engineering method is distinct to this. For large-scale complex software systems, the overall system structure design and specifications have become more important than the algorithm and data structure of the calculated algorithm and data structure. In this context, people recognize the importance of the software architecture and believe that the system of software architecture, in-depth research will become new most promising ways to improve software productivity and software maintenance issues. Since the software system is first divided into many modules, there is an interaction between the modules, which combines the overall attributes, which has an architecture. Good developers often use some architectural model as a software system structure design strategy, but they did not normally, expressed clearly, which could not communicate their knowledge with others. The software architecture is a further development of design abstraction, meeting a better understanding of software systems, more convenient to develop larger, more complex software systems. In fact, software is always a system structure, there is no software without architectural structure. The term "architecture" is the meaning of "building" in English. Compare the software as a building, from the whole, because it has foundations, mains and decorations, the infrastructure software on the operating system, implement the user interface program for calculating logic, easy to use. Seeing every program from the details. Early structured procedures are architectural structures in statement composition modules, modules aggregation, and nesting forming layer. Structured Program (Expression) Structure and (Calculated) The consistency of the logical structure and the top-down development method naturally form the architecture. Due to the size of the structured program design era, it is necessary to obtain a relatively good structure by emphasis on structured programming methodology, self-top, gradual refinement, and pay attention to the coupling of the module, so it is not specifically studied. Architecture. We can make a simple metaphor, the structure of the structured program is taking brick, tile, gray, sand, stone, prefabricated beams, columns, roof panels, and small buildings, the whole wall, whole room , A staircase prefabricated cover high floor building.
How does the component are reasonable? How to construct the architecture? How do important components have changed, how to ensure that the entire tall building does not fall? What components do you need for each application (Hospital, factory, hotel)? What are the practical, beautiful, intensity, and reasonable component skeletons to make the build building (ie, architecture) to meet the needs of users? Like civil engineering into modern architecture, software has also entered the modern software engineering into modern-oriented software engineering to study the architecture of the entire software system, seeking the fastest, lowest cost, and best quality. Although the software architecture is inspected in software engineering, it has formed a large number of valuable ideas and methods in the computer architecture and network architecture. In recent years, the software architecture research has been completely independent of software engineering, and has become computer science. One of the latest research directions and independent discipline branches. The main content of software architecture research involves software architecture description, software architecture style, software architecture evaluation and software architecture formulation. Solving the reuse, quality, and maintenance issues of good software is the fundamental purpose of the research software architecture. 2 The definition of software architecture Although software architecture has extensive applications in software engineering, there is no definition recognized by everyone. Many expert scholars are portrayed from different angles and different sides, which are typical definitions: (1) Dewayne Perry and A1EX WO1F have been defined in this way: software architecture is a structural element with a certain form, that is, components Collection, including processing components, data components, and connecting members. The processing component is responsible for processing the data, the data component is the processing, the connection member connects the different portion of the group of the architecture. This definition focuses on distinguishing the processing members, data components, and connecting members, which are substantially maintained in other definitions and methods. (2) Mary Shaw and David Garlan believe that the software architecture is a level in the software design process, and this level exceeds the algorithm design and data structure design during the calculation process. Architecture problems include overall organizations and global control, communication protocols, synchronization, data access, to assign specific functions, design elements, design elements, and choose between design sites. Software Architecture Processing Algorithm and Data Structure About the overall system structure design and description, such as global organizations and global control structures, protocols, synchronization and data access, design component function definition, physical distribution and synthesis , Design, evaluation and implementation, etc. (3) Kruchten pointed out that the software architecture has four angles that describe the system from different aspects: conceptual perspective description system and the relationship between them; the module angle includes functional decomposition and hierarchy; operational angle describes A dynamic structure of a system; the code perspective describes the organization of various code and library functions in the development environment. (4) Hayes Roth believes that the software architecture is an abstract system specification, mainly including interconnection, interfaces, and relationships between the functional components and components described by their behavior. (5) David Garlan and Dewne Perry use the following definition in the IEEE Software Engineering Journal: Software architecture is the structure of a program / system allocation, the interrelationship between them and the principles of design and over time. Evolutionary guidelines. (6) Barry Boehm and his student have proposed, a software architecture includes a collection of software and system components, interconnects, and constraints; a collection of system requirements; a basic principle is used to explain this component, interconnection and constraints can meet system requirement.