1. The first computer programmer in the world
The first write software is ADA (Augusta Ada Lovelace), in the 1860, she tried to write software for the mechanical computer computer computer computer in Babbage (Charles Babbage). Although their efforts have failed, their name will always load the history of computer development. Her father is the fanatic, invisible, radical poet and adventurer Byron. She is also a character of a radiant photo-mathematical root and some degree of gambler. Her most important contribution comes from cooperation with inventor Charles Babbage to design the world's first large computer-Difference Engine and Analytical Engine, and Analytical ENGINE. She even thinks if there is a correct instruction, Babbage machine can be used to compose, this is a crazy idea, because most people only think it as a mechanized abacus, but she has rendering and appeal Spread her thoughts.
2. The emergence of modern computer software
In the 1950s, the software was born with the birth of the first electronic computer. People who write software to occupational have begun to appear, they are mostly trained mathematicians and electronic engineers. In the 1960s, the University of America began a degree in computer professionalism, and teaches people to write software.
At the beginning of the development of computer systems, hardware is usually used to perform a single program, and this program is compared to a specific purpose. Early when generic hardware became a usual thing, the versatility of software is very limited. Most software is developed by individuals or institutions using the software, software often has a strong personal color. Early software development also has no system method to follow, software design is a hidden process completed in a person's mind. Moreover, in addition to the source code often has a document such as a software manual.
3. Software crisis
From the mid-1960s to the second period of computer system development in the middle of the 1970s, the software started as a product in this period, and there was a "software workshop" to write software. The method of this software development is basically used in the early autologous software development method, but the number of software is sharply expanded. The software demand is more complex, and the maintenance is more and more difficult, and the development cost is surprisingly high, and the software that failed The development project is not uncommon. "Software Crisis" begins like this!
"Software Crisis" has made people start a more step-by-step study on software and their characteristics, and people have changed the incorrect view of the software. The procedures that were considered to be excellent were often difficult to understand by others, and they were full of program techniques. Nowadays, excellent programs should be easily understood in addition to functionality, excellent performance, easy to use, easy to modify and expand.
The 1968 Northern Atlantic Convention Organization's computer scientists put forward the "Software CRISIS" in the International Academic Conference held in Federal Germany. In summary, the software crisis includes two aspects: 1. How to develop software to meet grow, increasingly complex needs; Second, how to maintain the number of software products that constantly expand.
4. Software engineering
In the fall of 1968, the NATO (NATO) science and technology committee convened nearly 50 first-class programmers, computer scientists and industrial giants, discussions and formulated the countermeasures to get rid of "software crisis". The concept of software engineering (Software Engineering) is proposed at that meeting.
Software Engineering is a discipline for software development and maintenance with engineering principles and methods such as systematic, standardization, quantification. Software engineering includes two aspects: software development technology and software project management. Software development technologies include software development methods, software tools and software engineering environments. Software project management includes software measurements, project estimates, progress controls, personnel organizations, configuration management, project plans, etc.
5. Traditional software engineering
In order to meet the challenge of the software crisis, people have made unremitting efforts. These efforts are mostly carried out simultaneously along both directions.
First, from the perspective of management, I hope to implement the engineering of the software development process. The most famous results in this regard are the "waterfall" life cycle model of everyone who is familiar with. It is the first lifecycle model that appears after the "Software Crisis" in the late 1960s. As shown below: Analysis → Design → Encoding → Test → Maintenance
Later, some people put forward the rapid prototyping method, spiral model, fountain model, etc. to supplement the "waterfall" lifecycle model. Now they are widely adopted in the practice of software development.
The efforts in this regard also enable people to recognize the standards of the documentation and the development of the developer and the user's communication. Standards in some important document formats are determined, including variables, naming rules of symbols, and standardized standards.
The Second Direction of Software Engineering Development, focusing on the study of analyzing and designing in software development. The important results in this regard are the construction methods that are popular in the 1970s, namely the PO (process development or structured method), and structural analysis, design, and corresponding test methods.
The goal of software engineering is to develop products and production products with good software quality and cost. The cost is intended that the entire overhead of software development can meet the degree of user requirements, and the software quality refers to the sum of the software that can meet the specific and implicit demand capabilities of characteristics and characteristics. Software quality can be evaluated by six characteristics, namely functionality, reliability, easy usability, efficiency, maintenance, and easy transplantability.
6. Modern software engineering
The software is not a puremification, which contains people's factors, so there are many changes, it is impossible to do like physics, etc. based on ideal material production process. Early software development only considers human factors, traditional software engineering emphasizes physical properties, the most fundamental modern software engineering is the relationship between people and machines (tools, automation) on different levels of constant loop development .
Object-oriented analysis, design methods (OOA and OOD) have caused traditional development methods to change. The object-oriented modeling language (represented by UML), software multiplexing, component-based software development and other new methods and areas.
It corresponds to software process management from the perspective of enterprise management. That is, a series of activities implemented in the software survival cycle and involving continuous optimizing the established software processes and its instances through process metrics, process evaluation, and process improvements such as process measurements, process evaluation, and process improvements such that the software process is reciprocated, and the spiral rises development. . The most famous software process maturity model is the CMM (Capability Maturity Model) established by the University of Carnegiemelon University (SEI), which is the ability to maturity. This model is based on the establishment and development, the main purpose is to provide a comprehensive and objective review based on the bidding activities of large software projects, while developing, while being applied to process improvement activities within many software institutions.
About the Author:
Nette: One sand gull
Fudan University Software Engineering Laboratory
Research direction: software architecture, component-based software development, configuration management, and re-engineering