Chapter 5 Set Software Production
After the process is finished, it is also possible to process the executable set software (Package). Generally, even the program that can be executed, there is no error, and there is a distance from the degree of the package. Of course, the program detection is also one of the process, sometimes the detection and program writing can be carried out simultaneously. But experienced programmakers, have a full-contained understanding, often wait until the program is connected and then detected. Comprehensive detection after the completion of the program, it is best not to rely on a writer. Because the program is often not a user, they only detect the concept under their designs. Of course, this error must be corrected, but the most prone to errors, but the user is not careful when entering, or when using the instruction, it violates the concept of the program. This incorrect occurrence is not forgiven. The program is originally designed for the user. If the user is inconvenient, the program has lost the value. The programs are the detection of whether the program is in line with the needs of users. Generally speaking, there should be a special person responsible, and there are people who let the writing manual, and the work of the PRO. This allows both the functions and operation methods described in the manual to check whether the two are consistent between the two. There is also a common vessel method. When the product is completed, the third party that is not involved in the formula is handed over to the objective position, making comprehensive trials, and puts a test report or proposal. The product management is qualified, and it is the last job such as packaging, manual. This is not to say that the packaging and manual should be finally done. In contrast, especially the manual, it is often necessary to design, ready, such a program, will not be arbitrarily, out the subject. First test detection
Regardless of what tools, you must have a clear mind when you use it, and check the processes and instructions step in step by step. Everyone will have a unique habitual error. It is best to record the mistakes you have every time, not only the error will gradually decrease, but it is easy to find when the error occurs. Test detection is a very important means. Some people think that the first-class program should not make mistakes, even if it makes mistakes, it is very small. My opinion is different, not because I often make mistakes, and it is wrong. The real reason is to master the correct thinking direction in the right time. When programming, it is intentionally ignored some details, so that it can be made up, and it will not be reinforced. This is like a drawing, some people like to make a sketch first, some people habits are drawn from the details. Regardless of the personal style, it is important to last results. I first consider the entire structure before the writer, and then prepare the brackets in each place, then consider having a common feature, and I will finish it. And it is quick to seek fast, so as not to lose the feeling of the time. When the structure is generally completed, I finally fill some less important details. As for the correct or not, it will be corrected by test detection. This kind of writing must have a strong overall concept, and what is the nature and function of each program. I have written a lot by system program to application tools, and there is a lot of programs, which have a deep understanding of this writing method. The only disadvantage is that if the program is too large, more than 20KB, my memory is difficult to bear. (The young man may not be the case), but the advantage is that the structure is streamlined and the production time is extremely short. In our Chinese system, the 8KB program, even the detection, just spent two months of Kung Fu. However, in the process of training program, I found that it is better to step. Every time I finished writing, I immediately detected the wrong, this section was correct, and then wrote next. Unless there is absolute grasp, there is no problem, otherwise, don't wait until all prices are finished, and then debug. By then, if you find a problem, in each of the deactivated prices, you have to find the error, that is the big sea fishing needle. The case of "comparable", often causes PUSH and POP imbalance, and when doing loop, the counter is negative to cause lock. If the program is too much "Segment", it should pay special attention to the change of the "segment" changes. For example, these details, it is best to record the imaginary value of the programming, don't trust your memory, the time is long, the program is big, and I have forgotten what I have forgotten. There is another point, there must be a habit and record the tracking process in the detection. Because the detection is a very trivial work, it is difficult to find the problem once, and it should be the second improvement experience. If you don't add a record, you will be an extremely painful thing every time you have to start. You may wish to treat the detection as a puzzle, a mental challenge, which should be an interesting enjoyment under compliance with certain rules. Second section research improvement
Want to write the program, must constantly study, improve, learn from the mistake, experienced experience in the improvement, cultivate a keen observation ability and good writing habits. At the beginning, this process needs a lot of time, but for a program, the writer is a lifelong profession, can you not excel? The following two instances will be given to illustrate how to study improvements have been completed. 1. Application of the instruction: The following communication processing program, not only the grammar and the instruction are completely correct, not there is no error in the execution, is it possible to improve? 1-1 In the previous provision, the description has been used in the description: SND-Transfer RCV-Receive Let-Left RGT-Right Ver-straight HOR-horizontal 1-2 programmed Number of 'c'. 1-3 paragraphs omitted. 1: CSND0: 2: MOV DX, 03FDH; Output 埠 3: MOV Al, 80H 4: OUT DX, AL; Output Instruction 5: MOV DX, 03F8H; LSB Speed Control 6: MOV Al, 06H; Speed = 19200 / sec 7: OUT DX, Al 8: MOV DX, 03F9H; MSB Speed Control 9: MOV Al, 0; Speed = 19200 / Second 10: OUT DX, Al 11: MOV DX, 03FBH; Row Control Speaker 12: MOV Al 03H; No Parity, 1; Stop, 8 13: OUT DX, Al 14: MOV DX, 03FCH; Communication Control 15: OUT DX, Al 16: MOV DX, 03F9H; Interrupt Valid 17: MOV Al, 0 18: OUT DX, Al 19: CSND1: 20: MOV DX, 03FDH; State Speaker 21: IN AL, DX 22: Test Al, 10h; 23: JNZ CRCV0; 24: Test Al, 20h; channel has Nothing? 25: JZ CSND1; 8250 Unclear 26: MOV AH, 1; keyboard has input? 27: INT 16H 28: CMP Al, 07h; = 'ctrl g' 29: JE CEND; Yes, 100: MOV DX, 03F8H 31: OUT DX, AL; JMP CSND1 32: JMP CSND1 33: CRCV0:; Receive 34: MOV DX, 03FCH; Communication Control 35: MOV Al, 08H; Pause Interrupt 36: Out DX, Al 37: MOVDX, 3F8H 38: IN AL, DX; TRIC 39: MOV AH, 0EH 40: INT 10H; Blush Block Display 41: MOV DX, 03FCH 42: MOV Al, 0BH 43: OUT DX, Al; Continue Accept 44: JMP CSND1; cycle work 45: CEND: 46: RET; completion
This parameter has a total of 84 words, very streamlined, but still has a residual room, and points in DX. The DX value is from 03f8h to 03fdh, and it is known that the value of DH is unchanged, and only the DL can be changed. Every time the DX is changed, three characters are required, such as only DL, only two characters. This command has been used for 11 times, except for the first time, other ten words can save 10 words. Then there is more than a thousand, and you can also squeeze two characters. In 5 to 8, you only need one by one by INC DX. In addition, 31, 32 and 43, 44 are wasteful practices, as long as they are numbered at Article 18, they can save the instructions of the two character outputs. In addition, there are 35 and 39 instructions, it should be merged, and AX is ready once, so it has provistered a character. First order DH = 3 1: Csend0: 2: MOV DL, 0FDH; Output 埠 3: MOV Al, 80H 4: OUT DX, AL; Output Instruction 5: MOV DL, 0F8H; LSB Speed Control 6: MOV Al, 06H; Speed = 19200 / sec 7: OUT DX, Al 8: Inc DX; MSB Speed Control 9: Sub Al, Al; Speed = 19200 / Second 10: OUT DX, Al 11: MOV DL, 0FBH; Row Control Speaker 12 : MOV Al, DH; NO PARITY, 1; STOP, 8 13: OUT DX, Al 14: Inc DX; Communication Control 15: Out DX, Al 16: MOV DL, 0F9H; Interrupt Active 17: Sub Al, Al 18: CSNDA: 19: OUT DX, Al 20: CSND1: 21: MOV DL, 0FDH; State Speaker 22: IN AL, DX 23: Test Al, 10h; Is it available? 24: JNZ CRCV0; 25: Test Al 20h; channel has been normally? 26: JZ CSND1; 8250 is not clear 27: MOV AH, 1; keyboard has input? 28: INT 16H 29: CMP Al, 07h; = 'Ctrl g' 30: JE CEND; Yes , 31: MOV DL, 0F8H 32: JMP CSNDA; send input character 33: CRCV0:; Receive 34: MOV DL, 0FCH; Communication Control 35: MOV AX, 0E08H; Pause Interrupt 36: OUT DX, Al; and Display 37 : MOV DL, 0F8H 38: in Al, DX; Collect characters 39: INT 10H; Blush screen display 40: MOV DL, 0FCH 41: MOV Al, 0BH 42: JMP CSNDA; cycle work 43: CEND: 44: Ret; completion seems to be like this Small gas, but the so-called art, it is necessary to have a meticulous attitude, and then the 84 fl cells becomes 66 words, saving nearly 100%, and the speed is fast.
This kind of program is originally streamlined, only the training, and the perfect programmer will be obtained. Another approach is to write repeated processes to loops, and save a few characters. However, due to time law restrictions, communication program is quite time-effective, whether the loop is worth it, but it is necessary to analyze, and it is impossible to determine. 2. Example of the loop: The previous discussion, the efficiency of the program, often determines the processing method of the loop and its skills. It has a small impact on space, but a good design concept, often reaching up to ten times, or even a difference in speed, readers must already know, but how can we apply known techniques to improve design? The loop is to use counters, repeatedly perform the same program job, this program, the purpose is to save space, relatively, and time is inevitably lost. Therefore, when designing the circuit, you must consider clearly: whether the saving and time exchange is worth it? Second, you must fully master the characteristics of the loop, you have to use it just right, you can't fall light. In principle, in the loop, the instructions should be streamlined, the process is very clear, especially important, should strive to avoid using a buffer in the loop, preferably use the teleconcape. If the time efficiency is extremely important, you may wish to abandon the way. There is a display, the purpose is to send 16 * 16-point patterns to the screen. The object is a graphics card of Hercules 640 * 400, and the score is interactive. This is another "high-tech" world, when IBM PC is launched, the highest density graphics state, only 640x200 lattice, that is Divide the scanning method of the TV screen, first send a single line level signal, then send the double line, so divided into two districts. In order to increase the density, the Hercules card applied Interlace technology and added a line in the single-double horizontal scan line, it became four districts. Hercules is very suitable for Chinese display, such as using 16x16 glyphs, just display 25 rows, 40 words per line, completely compatible with English. If you want a status display, you can use a 15x15 glyph to leave a 24 line for the status bar. Unfortunately, in the most important Chinese, preferred display devices such as CGA, EGA. Not only is the price is high, the functions are not enough, but it is not born. The most ideal or VGA shows that there is a 640x480 screen point, not only the space is large, in the memory, only one district, the application is very flexible. Below, let's introduce Hercules's display methods, and discuss how the loop is handled. 1: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 2: Hercules Chinese display processing program. ; 3:; Enter parameters: Si = Dot matrix glyph, Di = screen position. ; 4:; DS = CG, ES = 0B800H (screen section).
; 5: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 6 : CDSP0: 7: MOV CX, 16; High 16:00: CDSP1: 9: Movsw; Move to the screen 10: add di, 1ffeh; plus zone, each zone = 2000H 11: JNS CDSP2; no transcendence area, Continue 12: Add di, 8050h; transcendence area, rescue area 13: CDSP2: 14: loop CDSP1 15: RET program to this end, quite streamlined, tips on section 10 to 12. Detection method. The general practice is to check the area, use: add di, 1ffeh; plus zone value CMP DI, 8000H; Maximum area limit JB CDSP2; not exceeding SUB Di, 8000H; minus the restriction, there is more 4-character Directive, add 4 clock pulses, and lose 64 clock pulse values for 16 loops. When the full screen is displayed, it is calculated at 1,000 words, and it is a lot. Of course, the loop speed can also be accelerated. As a result, it is necessary to add 130 words, and the time is 272 clock pulses. Whether it is worth it, it is necessary to see actual needs. Another method, to increase 2 words, but can be thrown 36 clock pulses, the law is on Article 11: 11: JS CDSP3 12: CDSP2: 13: LOOP CDSP1 14: RET 15: CDSP3: 16: Add Di, 8050H 17: JMP CDSP2 to change one method, if BX is 1FFEH, DX is 8050h, then in the original, Articles 10 and 12 are changed to: 10: Add di, BX 12: Add Di, DX, the clock pulse is 2, 16 times, if you add to the loop, it is more meaningful. The original increased by 130 characters, only 94 characters, and the time will save 304 clock pulses. If the full screen shows 1,000 words, at 8 MHz frequencies, the speed of 1/25 seconds will be accelerated. In the loop, if time efficiency is taken, it should be avoided to avoid using PUSH and POP, which is 15 clock pulses due to PUSH, and POP is 12, and the two are added 27 clock pulses, which is very uncomfortable. One of the solutions is: Try to store the value that is not allowed to store the unused scratcher; if it is a fixed constant, you may wish to re-enter each time, just 4 clocks. The most troublesome is the variable value, in addition to the design module, there is no good policy. Third section merge
Although the various combined forms I have ever seen are not much, there is at least 100. The most problem is of course the lack of complete planning. Second, it is a trust of the horse, a no-folded water! Obviously the gate is in the east, the program is hard to west, until you have finished the Grand View Garden, the sky is black, before you go out! This kind of program I collected a big stack, but the example of the example, but my heart is weak. The reason is nothing, it is really impossible to copy it, you will have a headache when you see it! The strongest function of the computer is to deal with complicated duplicate work. Why is the general program to be aware of vinegar with computers? Don't say anything else, the light has been entered into the computer, it is worth spending for a few months, really worth doing this? There is a program, there are more than forty pages of foot, I only adjust it slightly, and it is shorted to ten pages, and the processing speed is five times. Why is it like this? Very simple, some people don't like to use the brain, long time, habits become natural, the brain has rust! In addition to waiting for this, you will not think about anything. To be an excellent programmer, the first condition cannot be lazy, the second condition must have a habit of analyzing observations, and the third is also the most important, it is necessary to have the spirit of pursuing perfection. The program is like an artist, whether it is his own or someone else, and then tastes the taste improvement. I have seen a woman who sweeping the floor, she can't see any dirty. This kind of talent is worthy of respect, this spirit is great, and has nothing to do with her career! The program is not streamlined. There are three reasons. The first is the programming unobstructed. This program can be written, it can be run, it is quite rare; the second reason is not to understand the skill, hard bridge hard horse, I don't know what is efficiency, I don't know how to achieve it. The programs you wrote are not seeing, and what others have? The third is the lack of professionalism, perfunctory, and this kind of person I am most fascinating. At the beginning of the deployment, if you understand the task, then analyze the factors, and segment the module. All similar situations are merged to one place, and then replace them, unified execution. This is originally working, the foregoing situation is impossible! What should I do after the problem? I suggest that it is best to rewrite. If you must change, you have to use the skills of the program, concentrate. The purpose of the merger is to enhance efficiency, and the merged method varies depending on the situation, just like life, it must first identify the cause, otherwise it will not be able to add medicine. I tried some examples you know, briefly explain it. First, the merger of the process:
To do the merger of the process, you must first identify the following points: 1, first identify the process is similar, all moved to a bunch, if you can't find it, then it is not saved. However, such a program is too small, it is impossible to have a similar situation, no longer writing messy, Xinma swim. There is a similar process, but there is no consensus, there is no concentration. Of course, there may be some programs, because there are too many details of workload and processing, so that it cannot be concentrated.
2, in a similar program, find a different instruction or process, if not, it is repeated, it is right.
3. Replace the differential instructions or processes, or place the entrance of different programs in the scratch.
4. Set the variables and use of the temporary system before applying this process.
5. The merge similar program segments, and the variables in different places are replaced. Let's take a form, a piece of drawing program, a grade of the original title, and will be scattered in a number of different sections, are listed below: 189: Mask Proc Near 190: MOV DX, 3C4H 191: MOV Al, 2 192: Out DX, Al 193: MOV DX, 3C5H 194: Mov Al, Pcolor 195: Out DX, Al 196: Ret 197: Mask Endp 380: MOV DX, 03CEH 381: MOV Al, 3 382: Out DX, Al 383: MOV Al, 18H 384: Inc DX 385: OUT DX, Al 386: Ret 490: MOV DX, 3CEH 491: MOV Al, 3 492: Out DX, Al 493: MOV DX, 3CFH 494: MOV Al, 0H 495: OUT DX, Al 496: RET 589: Cross Proc Near 590: MOV DX, 3C4H 591: Mov Al, 2 592: Out DX, Al 593: Inc DX 594: MOV Al, 0FH 595: Out DX, Al 596 : RET 597: Cross Endp
Such paragraphs have more than ten, it seems that each of them is slightly different, and it doesn't seem to merge. However, careful analysis, it is obviously that the programmer is not enough, and a very rule-free program is arranged very disordered to this point. We first summarize the problem and decide how to merge. First, the above sections should be unified as a slap; second, all variables are only four, two of which are transmitted values, two are output input. The latter has a continuous relationship, equal to only one. Therefore, before calling this sub-program, it should first make DX to the output, and then load the variable into the AX and call once. This subline is as follows: 300: Sub: 301: Out DX, Al 302: Inc DX 303: MOV Al, AH 304: OUT DX, Al 305: Ret This shorter, there is nothing necessary, end-seeking time and space set. No matter how it is sorted, it is far better than the original. In addition, there is a situation, more terrible, is after the keyboard is input, the input code is compared by the process, and then processed separately. For example, in order to check the movement of the left, right, upper and lower, etc. of the cursor key, in order to make the corresponding processing, the program is actually written: 100: PP1: MOV AH, 0 101: INT 16H 102: CMP AX, 4800H ◆ Age 103: Call MovData; SET BUFFERS 105: Call set, set, set,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, YYY 111: JMP PP1 112: Next1: 113: CMP AX, 5000H; □ Age 114: JNE Next2 115: Call Movdata; SET BUFFERS 116: Call SetDLT; SET Increment 117: NXT02: 118: Call Dotdown 119: loop nxt02 120: Call xordot; SET New Dot 121: Call Xydisp; DISP New XXX, YYY 122: JMP PP1 123: Next2: 124: CMP AX, 4B00H; There is a cursor movement and which cursor is moving. Then, you have to check the other changes one by one, there are eighteen valid code.
I really admire this kind of program, not only have a very resistance, but also extraordinary imagination, but I can write a very simple and ordinary program! If it is me, I will write no fun: 100: PP1: SUB AH, AH 101: INT 16H 102: OR Al, Al 103: JNZ PP1; Al Non 0 invalid 104: MOV BH, Al 105: MOV BL, AH 106: SUB BL, 47H; Minimum word key 107: Jle PP1; Non-processing range 108: SHL BX, 1 109: Call Func [BX] 110: JMP PP1 This is the main proxidation, short, fast, maintenance Easy, look at it, there is any mistakes to be clear. 1000: Func dw next02; ▲ 1001: dw next0; ◆ 1002: dw next04; ※ 1003: dw pPret; invalid 1004: dw next2; ■ 1005: DW pPret; invalid 1006: dw next4; △ 1007: dw ppret; invalid 1008: DW next12; → 1009: dw next1; □ 1010: DW next14; ← Because this is a substructure, add a paragraph, minus a paragraph is easy. Even if it is a substructure, there is a big exquisite, in the previous paragraph, between 104 and 110, it is worth thinking twice. 104: Call MovData; SET BUFFERS 105: SET INCRT; SET INCREMENT 106: NXT01: 107: Call Dotup 108: Loop NXT01 109: Call xordot; SET New Dot 110: Call Xydisp; DISP New XXX, YYY First, 104 and 105 Repeat multiple times, 109 and 110 are also, why not merge it? This is also a very common program combined manner, two calls are once, and the speed and space are more economical. Before the subsentrical setdlt, you will then use MOVDATA, and the other XYDISP is also the same. First: Call MovData; assuming this code has him 3002: setdlt: 3003: 3100: Xydidot: 3101: Call Xordot; 3102: XYDISP: 3103: n: 110: Next0: 111: Call SetData 112: NXT01: 113: Dotup should be moved, no need to set it to a substructure. 120: loop nxt01 121: jmp xydidot; if necessary, you can first merge it, the effect is not only ten times higher, etc., waiting to truly learn the skills, the speed of writing can also increase several times. Second, the process of branch:
The branch is an inevitable means in the program. It is well used, and the entire program has always been, there is a wonderful flow of the cloud. The previous example does not have a branch condition, so it cannot be considered a branch, but the program is wrong. Then take an example below, due to poor branches, striped by procedure. This is a quick program that calculates the parabolic, and there is no function in the use of the multi-fold method. Several paragraphs are like this: 100: Beg00: 101: CMP BP, BUFY 102: JLE BE7 103: OR CX, CX 104: JG be20 105: Mov AX, BP 106: SHL AX, 1 107: DEC AX 108: JL BE10 109: BE2: 110: Call Be1 111: JC Beg00 112: Call BE3 113: JMP Beg00 120: BE14: 121: Lodsw 122: CMP AH, 1FH 123: JGE BE141 124: Loop Be14 125: Pop DI 126: POP CX 127: MOV SI, DI 128: JMP BE142 129: BE141: 130: POP DI 131: POP CX 132: MOV SI, DI 150: BE10: 151: Call BE1 152: JMP Beg00 153: BE20: 154: Mov AX, CX 155: Sub AX, DX 156: SHL AX, 1 157: DEC AX 158: Jle BE BE2 159: Call be3 160: JMP Beg00 161: BE1: 162: INC DX 163: Add CX, DX 164: Add CX 166: Add Di, BX 167: CMP Di, BX 168: Jle Be1ret 169: Call Be01 170: Sub Di, BX 171: Be1ret: 172: Ret 190: BE01: 191 : MOV Al, 1 192: CMP [Si 1], Al 193: JNZ Be011 194: Inc Byte PTR [Si 1] 195: RET 200: Be141: All prices are not large, but more than 100 instructions, but slightly improved, but can save many instructions, speed It will also speed up. The focus is over the branch of 106 to 113, so that the BE10 BE20 BE3 BE01 sect is available. Lei, the BE1 BE3 BE01 should not be used as soon as possible, and the BE14 should be rewritten, so, the entire program is completely different.
It turns out by 105: 105: MOV AX, BP; ★ No need 106: SHL AX, 1; ★ No need 107: DEC AX; ★ No need 108: JL BE10 109: BE2: 110: Call BE1; ★ After merger, No need to call 111: jc begrad; ★ Another branch 112: Call be3; ★ no need to call 113: JMP beg00 is now changed to: 107: BE1:; original DEC AX branch processing 108: incd; original 161 substructure Mainflow 109: Add CX, DX 110: Add CX, DX 111: Inc CX 112: Add Di, BUFX 113: CMP Di, BX 114: Jle BE11 115:; Call BE01; Ben sub-program rewriting as follows: 116: CMP BYTE PTR [Si 1], 1 117: JNE BE1A 118: Inc Byte PTR [Si 1] 119: BE1A: 120: SUB DI, BX 121: JC Beg00; Original 111 122: ...; Original BE3 program and 125 The three instructions are also branch errors, white and white waste. 120: BE14: 121: LODSW 122: CMP AH, 1FH 123: JGE BE141 124: LOOP BE14 125: POP DI; ★ can omit 126: POP CX; ★ ★ can omit 127: MOV Si, Di; ★ ★ can omit 128: JMP BE142; ★ can omit 129: BE141: 130: POP DI 131: POP CX 132: MOV SI, DI; 127 Move to this 133: JNZ BE142; 128 Move to this 134: Section 4
First, manual:
The manual writing has not been related to the program writing, but because the general program is not known to the importance of the manual, it is often written very good, and the market word of mouth is poor, and the wicked is lost. In fact, today's market trends are tended to screen tips, so that the manual is only auxiliary role to help users understand various functions. The problem is here, a functional introduction, explanation, and the application of this feature, it is entirely different levels. "Screen Tips" is often produced by the program, and the application and understanding of the text concept is often not too high, and the results can be imagined. The manual should have a special writing. This kind of person must apply the text concept. It is necessary to fully understand the function of the computer. It's hard to cultivate a programmaster, and it will take three to five years from three months to six months. Regrettably, general computer companies do not have this kind of vision, thinking that the writing program requires technology, and the manual will find someone to go. The importance of the manual is not only in this, a valuable program, must have a weekly plan, a blueprint made. This plan and blueprint, through the concept of text concept, should be the manual itself. In other words, there is a good plan, inevitably there is a manual as a blueprint, and then make a program according to the manual. Second, version:
After the completion of the program, unless some special reasons, as long as there is practical value, it will inevitably improve, strengthen. This will face the issue of version update, the programming teacher must consider the week. Don't want to write a good time, completely, not only that is impossible, but also to find trouble. Any person, even if it is a king genius, it is impossible to experience all of the events in people. The scope of the program needs to be adapted is dynamic, and as people's knowledge and experience are growing. Therefore, once a brand new program has been admitted, it becomes a new thing in the world. After the experience of people's experience is expanded, the new demand will follow. Just completed the form, the moment of completion, has become a past style. Therefore, in the program plan, you must be far-sighted. The more considering it, the more the power of the program is. At the same time, in the other hand, the program must be handed over to the user's hands, and there is actual value. It is a problem with how to make effective considerations between the planning and completion of the week, and the completion of the work, it is a problem. One of the solutions is to use the "version" concept to divide the product into several periods. In this way, not only the product can be used quickly in the hands of the user, but the user can provide the feedback of its application experience, which is more advantageous, and the program is constantly growing, mature, and perfect. With the concept of the version, there is also a clear plan for the production of the version. Each version of the file maintenance, the revision is corrected, and there must be a special person. Otherwise, when the version already listed, the new version has begun to design. If an accident is not careful, it is unclear which version is, which is unbearable, and it will be able to understand the Older.
Third, packaging: