Parallel Engineering Management in git-based software development

Source: Internet
Author: User

Parallel Engineering Management in git-based software development

What is parallel engineering? I will not explain Baidu here). In fact, in the software development process, software that involves multi-person cooperation to complete development in the form of a project team here refers to the broad sense) more or less, the concept of parallel engineering is used. In formal project development, project team members always divide their work and work together to complete part of the work, and then merge the work. In practical application, although the waterfall model is used for development, all project team members always start to complete their own parts at the same time. This is actually a parallel project. We can proudly announce that: in the development process, we use parallel engineering to improve the development speed. Therefore, you have to raise your salary!

It looks simple, but what is it? If you want to use the above sentence to raise your salary, the boss will definitely blow your face, and then return: This simple division of labor and cooperation is also called parallel engineering? Are you a part-time physical education instructor! Yes, a simple division of labor and cooperation cannot be called parallel engineering. The concept of parallel engineering is a bit like that, but from the perspective of requirements, it is still far behind, so how can we use parallel engineering in the software development process? It's easy: Find out the conditions for using parallel projects and satisfy them! It's easy, right. Have a cup of coffee to celebrate our unemployment.

Of course, there is nothing wrong with the Statement of meeting the parallel engineering conditions. In view of the complexity of calling various codes in software development, what is API call, module call, and so on, as a result, the waterfall model is basically used in the software development process, that is, the process can be simplified as follows: requirement Analysis-functional design-code writing-test-use and maintenance; these five steps basically represent the entire development process, in addition, the starting condition of each step playing is after the completion of the previous step playing. That is to say, in this inheritance mode, there is no way to do parallelism at all. Even if parallel is required, it can only be done within the step playing, this can improve the speed of project development, but it does not play a major role. That is to say, to achieve effective parallelism, we need to change this step. How can we change it? First, the demand analysis cannot be changed. After all, you must analyze the requirements for what you want to do, and the last use and maintenance must not be changed, how can we change the three steps in the middle? From the actual situation, the functional design can be split, because there must be more than one function, and a function must be implemented to implement several sub-functions, so let's start from here, how to change it? This is a problem.

We know that the process of executing commands on the CPU is to take and execute commands, and the CPU uses the pipeline to speed up this process. Here we can learn from it, but it is not a reference pipeline, instead, we can use this idea to split the functional design and joint demand analysis. When the demand analysis gives a requirement, we will start to design the functions, after the function design is complete, you can directly write and test the Code. In this way, every time you put forward a requirement, you can directly go to the test. If you regard this process as a pipeline, then, there are as many pipelines as you need in the entire development process. When there are enough developers, multiple pipelines go hand in hand and enter the use and maintenance phase.

This is the theoretical basis for parallel engineering. In fact, no matter what aspects of parallel engineering are used, the specific steps are similar, but they are changed according to different project categories, but the core idea is to start multiple projects, go hand in hand. Now that the theoretical basis has been completed, what is the actual effect? The result is very troublesome. Due to the special nature of software development, cross-path reference, calling, and even cross-host are not new things, this leads to a very close relationship between source code, and sometimes it is difficult to implement parallel operations even if only one letter is modified, even if there are guidance documents on stability and technical specifications, but due to the differences in personality between people, even if the things made under the same guidance document are different, the members of the same development team can say, face-to-face communication can solve this problem, but once the project is large, there are too many project teams or developers involved, or even the development team itself is developed through the network, there is no way to solve the problem of difference. The final result is that there is a lot of trouble in parallel, so it is better not to do it. That is to say, this problem must be solved if parallel engineering is to be implemented in software development! Parallel processing is a joke if the problem of difference is not solved.

Based on this problem, the modular concept is proposed. The specific implementation process is that for a function module, it can run independently of other modules at the same level or higher level, and can depend on sub-modules, however, it can only rely on its own sub-modules. That is to say, the module has a complete functional library and I cannot accurately express this concept. Specifically, the module has a complete and independent component, including icons, runtime libraries, and linked libraries) This is done to break the mutual calls in the source code. It can only be performed in parallel if they are independent of each other. For modular design, I have referred to some Internet materials, some sources of information and the construction industry. It can be said that there is no big gap between the modules here and those in other industries)

Solved the issue of source code mutual dependency and mutual calling. What should I do next? There is only one thing, that is, splitting. for the entire project, a project is split into several functional modules, and then these functional modules are split into several sub-modules ...... Until it is split into basic modules and functions that cannot be split, the entire project has actually become a set of basic modules, when all the split modules are completed, the project is completed. Maybe you want to say that I didn't see parallel projects in this process. What !! I don't know how to do this? Find a bunch of people to complete these modules! How can parallel computing be performed without parallelism? Too many modules, too few? How can I publish a reward for so many programmers nationwide who earn extra money? Git!

Well, all the problems of parallel engineering have been solved. Next, let's talk about how to develop this item based on git. We know that git is not a file in strict terms, instead, it solves the problem. Every time a sub-module is created, it is OK to create the corresponding folder in the main folder of the project, the folder is then pointed back as an independent project. Of course, there is a permission problem, and there is also a problem of merging sub-modules when the project is completed, but this problem is not a problem, you only need to make instructions in the main project to edit the Makefile file)

I think it is not a problem to develop this item based on git. Oh, there is also a problem with version control. After all, if it is modularized, it is certain that the same module will have different versions. Otherwise, how can I upgrade the money? So there is also a version library. The so-called version library is actually a night folder, but this folder is named after the version number. As for the code of the new version module using the old version module, it's easy, directly copying the source code itself is not big. Even if it is large, will the storage space be a problem with the current conditions?

However, parallel processing may lead to two problems. One is that the final product will be relatively large. After all, many resources can be shared when there is no modularization, but there will be no shared resources after modularization, the resources of each module are exclusive. Therefore, the requirement for modularization is to use the shared library and dynamic link library provided by the operating system as much as possible to minimize the number of exclusive resources; second, security issues, after all, there are multiple modules and the modules are independent from each other. This means that there may be no security issues for all modules, but there are problems in combination. The window system itself is an example ).

From: http://my.oschina.net/u/1265071/blog/324516

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.