Software engineering learning summary
I have always wonduated this course before I didn't touch the software project, because I think this class is very NB, it is something that is the title of engineer title. But after learning, the biggest feeling is: Software Engineering Method must start from the doll, otherwise it will return to the head after returning, it is definitely the hardship of hell. Below is some summary and experience in the nearly two months of learning, I hope to make up the reunion. Since it is a beginner, it is inevitable that it is shallow and missed, and everyone will give you a lot of advice.
Software engineering
It is said that the programmers in the last year of the 1960s are genius. The writer is like writing a diary. If you have dinner, you can write a few out. You can also take it on the next day. So, at that time, in everyone's eyes, with those who made art, music, known as "artists".
But the transit is moved, just like anyone else, there will never be fast. As a result, the rapid development of hardware and more and more variable. I remember to go to the classmate to copy the play, usually a few floppy disk can get it, and now the game, two three CD-ROM are countless. Like such a huge complicated monster, even if you are genius, a person must be impossible, otherwise, waiting for you to write out, people Intel have developed. It is necessary to develop large software to pursue speed (so in order to make money), so naturally, the concept of cooperation has been raised.
In the early days of starting cooperation, because everyone is used to "artists", the results can be imagined, one is the Picasso Party, and the other is an Italian impressionist, plus a painted ink mountain water painting, if If you come up with this, you can't have problems, then Bill has already told. So, then the big software, it is said that "blue screen" is more than Windows 98.
Marx tells us that all things have changed from the quantity. With the continuous emergence of the problem, some MASTERs have begun to sum up experience and summarize some specification to guide software analysis, design, implementation, testing, maintenance, personnel exchange collaboration, project budget and time limit control, etc., which is software. Project predecessor.
Software engineering has now been developed for more than 30 years, which can be said to be quite mature. Now developing software, it is said that it is a big gang arrangement, and it works on a set of rules and regulations. So, software has developed into "project", and the programmer is also "worker".
Initially, the problem is Dijkstra. He is written in the letter of the Goto Statement Considered Harmful in 1968, which points to the negative effect of the GOTO statement, and proposes a solution that the series of effects raised eventually brought about the birth of software engineering. (The original text of the letter can be seen on www.acm.org/classics/oct95, but when you see this article, you know that it is still there!)
Software engineering core
Whether in the previous century or now, the work involved in software development has basically not changed, and they all start with an actual need or a sense of inspiration, then analyze, design, encoding, debugging, and maintenance. These tasks dynamically form a software development throughout the process, which is the so-called "software development cycle".
But for these work, how to do it, when doing, everyone has its own way, and even some people have a few ways. In this way, when several people work together, the final result can only be confusing. So you need a set of rules, everyone will do things according to rules, and the problem will be much less. Good rules are called norms, and the norms are made by some MASTERs based on experience, and they are constantly supplemented by long-term experience. They can be said to be essential, managed according to specifications, and improve software quality and work. Efficiency is naturally helpful. The software engineering is white, which is such a set of teams for software to improve software quality and programmer work efficiency. Its core is to work 5 important components for software development: demand analysis, design, coding, commissioning, maintenance, how to organize these five parts of the work, and how to complete each job. Simply, it is the overall organization and for local implementation.
The specification is just a good example to describe a kind of thought, how to achieve every link, for different companies or groups, all have a thousand autumn, because it is impossible to have a set of the world's feasible standards. Just like C , it is only a set of standards, and different compilers have their own implementations, and the level of support for standards is also different. Therefore, in different companies or groups, although core thinking is small, it is often different from each step. I have a GB8567-88 document template. For those small programs that are only a few thousand rows, if you really write it on the requirements, it is simply a torture! It is said that the current industry's most authoritative standard is CMM.
Software development process organization
How to organize every step in the software development process is the problem to be solved by the software development cycle model.
In fact, developing software is like solving a logical problem. Think about how you usually write procedures. The first thing is to have an idea, that is, the program I wrote is to do; then it is about one or more implementation methods for the core functions to be realized, and selecting a self-thinking is better; It is a module that will be divided into various modules that will be divided into the major or secondary functions involved; the final is the module to encode and debug. In my opinion, in addition to the first step, the rest should be a loop process. During the encoding process, you always need to constantly turn over the head to modify the original module design, or even select the implementation algorithm. For example, the easiest thing is that you usually have found the same code in the two members' functions. At this time, the programmer's intuition tells you that you should add a private member function for your class and put a public The code is placed in it; or, you suddenly discovered that a function in a module has high versatility, you can extract it as an independent functional component, and you should do this; if you are unlucky, You are likely to suddenly discover when you finally debug, your program runs too slow, even you can't stand it. So you are looking for, I finally found the evil 20 in 80/20. It turned out to use an O (N) algorithm. At this time, you will have a better algorithm for the old man.
In short, unless you are a prophet, otherwise, for a software with certain scale and complexity, there is too much unpredictable and variableity in the "design-encoding" process, you can't get a whole Grasp each detail. Of course, this is the view that is based on my current level. I don't know if it is a master, it will be different, because there is no one around me. Since software development is a dynamic process with unpredictable and variability, then the organization of each step, the cyclical model, it must be contained in its nature.
Now let's take a look at the oldest, most classic, and also the most criticized waterfall model.
The waterfall model is a linear model, and its greatest feature is simple and intuitive. It plans software development process as "Analysis - Design - Coding - Test - Maintenance" linear processes, that is, you must first analyze every job you want to do, and then A module, every interface, no giants, it is designed very perfect, then start the coding work, and just like the model model, you don't have to look back, of course, is Start tested after all the code is finished.
The whole process, I think it is as cold!
The waterfall model completely ignores the dynamic changes of the software development process. I am afraid there is only those systems that have developed very mature, and have little scale, for example, use Access to make a background, with the VB painting database application, there is a place where the waterfall model is exhibited.
In contrast, some cycle models now are closer to human natural thinking, such as a helix model is a model I prefer.
Implementation of software development process
How to do every step, however, I have mentioned before, it is very flexible, just grasp the general direction. When analyzing, design, encoding, debugging, and maintaining the work of these parts, the most core is the writing of documents. The role of the document is that the following three aspects: First, it can help organize ideas. To finish the target, system of the system, the function of each module, and then write down, then in the development process, it is possible according to it, when needed to change the design, there is also a certificate. Can test. The second is to facilitate communication. Imagine the situation when you meet. A big gang people rushed to fight, fiercely debate, and then the end of the people, the ideological inspiration will be scattered, the result is a half-day will, and I have not discussed anything. This is the reason why the meeting was invented later. In the mind, it will be scattered and chaotic. When expressing the language, it is easy to lose three, others are difficult to grasp your thoughts. However, after the finish writing on the paper, it will be clear, whether it is someone else or yourself, it looks at a glance. Third, it can be used as a reference for future maintenance. There is a famous saying: "Pen and paper are always more reliable than brain", meaning, putting things in the brain say no, I will forget, but writing something on paper, as long as there is no accident, generally Can't lose. After a while, when you need to go back to modify your program, you will find that the document you wrote before is too valuable. Don't expect your source code. For complex programs, simple source code will almost kill all your time.
As for how the document is written, most of the textbooks are a full-time, just like some local governments, it is actually not necessary, as long as it can meet the needs. If it is in the company, most of each company has a set of document templates inside them, and individuals have no rooms. For this amateur, write a procedure in addition to practicing crafts, nothing to play with friends and family, there is no need to make too complicated. Here is the outline of my own document template, although the sparrow is small, but the fifty organ is complete. Feasibility analysis is the analysis result about the current project. The main considerations include: Can I develop this project; if possible, how much time it is expected to meet the time requirements of the guests; how much manpower and funding are required; the most important thing is whether this project can make money, How much can you earn. It is also necessary to evaluate the possible risk, for example, what should I do if the project supervisor is hit by a car. Of course, this is meaningless for me, I am writing just to keep intact.
Project Description This is a description of the current project after deciding on the decision. The following aspects: (1) The name or number of the item; (2) Description of the client; (3) Description of the developer; (4) Description of engineering tasks; (5) Engine input and output (6) Development environment; (7) Other additional conditions. Here, the description of the engineering task is from the overall point of view, for example, can analyze and make the artificial intelligence system for the current chess game and make optimal decisions. The project input and output can be written: Enter the data description of the current chess board; output the optimal chess, including the choice of the chess pieces and step methods.
Demand analysis is the definition of functional requirements for customers. Note that the word "definition" is used here, which means the description of the customer needs, although not necessarily the formal definition, but must also be precise, no dismiss. At the same time, it is also necessary to list the functional modules and logic flows of the program, that is, the program function module corresponding to each of the customers, and these functional modules are required to complete the customer requirements. Note the difference between the function modules mentioned here to the program module when encoding. For a complex functional requirement of the customer, it is generally divided into one or more sub-functions with a granted method, each of which corresponds to a functional module, and each function module can be implemented by one or more program modules. The function module is based on design logic, and the program module is directly-directed. When using OO programming, I usually use the class as the basic unit divided by the program module. In summary, this part of the document must include 3 parts: (1) Detailed description of customer needs; (2) The division of program function modules and its correspondence with customer needs; (3) The logic flow of the function module.
Software Design This is a documentation documentation for detailed designs of each module of the program. It consists of the following components: (1) correspondence and related description of program modules and functional modules; (2) implementing the logic flow and organizational structure of program modules for each functional module; (3) Details of each program module description. This part of the document is the most changed, if combined with the spiral cycle model, even need to looping every module in depth, in order to facilitate management, I usually have a separate module Establish a document. As for the flow chart or structure map of the module, it has always been my most headache, that a lot of dazzling paintings and symbols often make a good coming. In fact, for the individual, as long as you can express it, it doesn't matter if you want to draw it. The key is that you have a standard, don't be in this figure, the rectangular representation process, and in another figure, it means I / O . The meaning representation of each symbol is required, otherwise someone seems to be a mist. If you are troublesome, you simply use the standards approved by most people, such as UML maps. But if you go to the company, it is still in the company's rule. I have always thought that this is the most interesting part of the document. The development log is equivalent to the document in the coding phase, which can be very casual, mainly to record some inspirations that suddenly germinate when writing programs, or some minor changes to code, or some small changes to the program structure, etc. These modifications to these modifications have some descriptions, for example, why is it to change to this look. Don't underestimate these records, it tends to be an important basis for your maintenance in the future. It is to know that people's IQ, EQ, etc. will vary with people's physiological and psychological states. At some point, you may be light, make a very great change, but after a while, when you go back and re-read the same code, you are likely to remember here. The change is very wise, but no matter how much it is, no matter where it is wise. At this time, a log will save a lot of trouble.
Test analysis is used to indicate the existence or potential defects and errors, and the digital description of the program performance. It consists of several parts: (1) a description of the measured module; (2) tester; (3) a detailed description of each function of the module; (4) indicates current presence or potential problems. In the test description, it should include the result of the input data set and the output, and the time of operation, etc. For the company, the requirements for test analysis are very strict. But for my individual, I just recorded it as a module test, to prevent some known defects and errors, and simple testing for some core modules for time and spatial efficiency. In the future.
Individual feelings