Future Development Trend of Software Engineering
The intention of this article is to discuss the future development trend of software engineering, but the development of software engineering cannot be isolated, so we need to first think about the changes and trends of the computing model and software development itself, then we can speculate on the Development Trend of software engineering.
In terms of computing models, the traditional von noriman is still in use. However, from the perspective of computing power, we have noticed three changes:
● CPU computing capability is rapidly improved according to Moore's law, but it is increasingly difficult to improve the computing capability of a single CPU;
● Parallel computing technology and multi-core and multi-thread technology enable a rapid increase in server processing capabilities. server processing capabilities are no longer bottlenecks, resulting in a large number of migration of computing capabilities to servers, the C/S structure has been relentlessly abandoned, and thin clients (B/S structure) have become the trend of the times;
● The rapid popularization of the Internet makes cloud computing possible. Server clusters connected through the Internet provide more powerful computing capabilities on the server side;
Based on the above changes in computing power, we have noticed the following six trends in the software development model:
● Middleware technologies that provide high parallel computing capability and availability are widely used because of the fast and centralized computing capability on the server end, and have even become necessary for building large-scale software systems;
● Because of the middleware technology, the software development team can focus more on the business logic, but can hand over many details to the middleware for management, thus greatly reducing the need to writeCodeThe number of lines also directly leads to smaller and smaller software development teams, but more and more professional roles (such as understanding industry demand analysts and architects of middleware technologies and domain architectures );
● The enhancement of computing power makes the software more and more easy to use, so that the software becomes ubiquitous and the number of software developers needed increases sharply (the organization form is a large number of small-scale development teams ); with this factor and the pressure to reduce costs, development outsourcing has become very popular;
● SOA has become a hot topic in order to allow systems distributed on the Internet to collaborate with each other;
● The popularity of the Internet brings together scattered developers. As long as there is a suitable foundation and framework, they can develop tool software of production grade (using eclipse, JBoss, mySQL, subversion as an example), so open source has become a trend;
● B/S structure systems are very easy to upgrade, which greatly speeds up Software Delivery and upgrade (from months to weeks );
Back to the question, how will software engineering develop under these big trends? I think we will see the following trends in the next few years:
● Demand engineering becomes a hot topic: professional roles, increasingly complex business innovation, globally distributed teams, and Internet-level delivery speeds, these all put forward higher requirements on the correctness and effectiveness of demand engineering. I expect that the research and implementation of demand engineering will become a hot spot in the near future, among them, the Use Case technology will be more widely and correctly applied, and the development of related tools will become a hot spot (such as IBM Rational requirements composer, and ravenflow.
The advantage of use cases is that they are inherently black boxes. They use natural languages to abstract the interaction between users and the target system, avoiding mixing analysis, design, and implementation details, to ensure that use cases can be truly understood by business and testers who do not understand specific technologies. At the same time, the demand analyst can easily use case analysis (that is, use case analysis) to try to implement the use case in an ideal way) and turn the demand system into an analysis model. In this process, the demand analyst can further improve the case-based demand system without worrying that the analysis model will pollute the demand, thus realizing the separation of demand and analysis and effective interaction.
● DSSA, MDD, and lao shu Xinhua (domain-based architecture (DSSA) and model-driven development (MDD): With the increasing popularity of software applications, software has exceeded the scope of automation of manual processes, and began to become the main driving force of business innovation. Therefore, the introduction of DSSA, which captures the most advanced requirements in a specific field and its implementation architecture, has become one of the hot topics of customers in the industry. In addition, the introduction of DSSA greatly reduces the MDD threshold and makes DSSA-based MDD support tools possible, which can greatly improve development efficiency and ensure Software Quality (for example, telelogic Rhapsody is a successful MDD tool based on real-time embedded system architecture ).
● Iteration/Agility: as the software delivery cycle accelerates, iterative development has become a required option for most software development teams. However, iteration imposes higher requirements on the requirements, architecture, collaboration, and testing capabilities of the entire team. Now many development teams are trying to import iterative development, agility is seen as an import method for iterative development, but the scope of agility is actually greater than that of iterative development.
Three elements of agility are iterative development, frank cooperation, and self-adaptability. Honest cooperation is actually the essence of agility. As Ivar said, agility is actually about social engineering. The main contribution of agility is that he thinks more about how to motivate developers' enthusiasm. This is a relatively ignored field in the development of software engineering for decades.
● Continuous integration: continuous integration is the main method to ensure the quality of iterative development. Continuous integration can be used to ensure the code quality as automatically and as early as possible. With the popularity of iteration and agility, continuous integration-related tools have become a new hot spot in the market (such as the continuous integration framework IBM Rational buildforge, open-source software cruisecontrol, and code static analysis tool klocwork insight, IBM Rational Software analyzer ).
Continuous integration is a complex system project. The Organization must first closely integrate the existing configuration management/change management tools with the Build Environment and complete the automated build process, define how to automatically detect software quality (static code analysis, unit testing, or Smoke Testing) based on the current situation of enterprises, projects, and products, and define management reports to be automatically generated.
● The process framework based on practice is in the ascendant: the professional and distributed globalization of development roles require the software development process to be more standardized, while agility requires the process to closely fit the actual needs of the project, therefore, the traditional unification process cannot meet this requirement. The new generation of processes will focus on practice, and projects can be assembled with different practices to meet project requirements. Iji (Ivar jacbson International)'s esswork and IBM Rational RMC are both a new generation of practice-based process frameworks.
Based on the long experience of Process experts, they (and she) carefully componentized a complete development process, abstract The practices that can be imported separately and assembled together from the development process, so as to gradually improve the process. For a software organization, if a mature software development process has been established, but this process is not suitable for the actual needs of all projects, at present, we can repeat the existing process in a practical way, so that the project team can assemble a realistic process based on practice. In addition, the Organization can also import industry-specific practices that apply to the organization into existing processes. iji experts have extracted eight best practices from the best practices in the industry and the relevant information is accessible (Http://www.esslab.net: 4040/NGP/).
● Configuration Management: the complexity of configuration management is greatly reduced as the development team scales down. We have noticed that more and more users are switching to open-source configuration management tools (such as subeverison, JIRA, hosted-projects, etc.); in the future, more configuration management tools will appear in the form of a full lifecycle management platform (Application lifecycle management, it weakens individual configuration management capabilities and emphasizes full-Process Integration (such as Microsoft visualstudio team system and IBM Rational team concert ).
Even if the complexity of configuration management is reduced, it is still one of the most important supporting platforms for development project management. At present, the focus should be to strengthen the training of the project manager on configuration management knowledge so that they can understand the configuration management capabilities (such as parallel development and baseline rollback) how to help the project development process, so that the value of the configuration management tool/environment can be fully utilized.
As a conclusion, the importance of Software Engineering for software development does not need to be repeated. Although I listed some software engineering hotspots above, readers must carefully analyze the characteristics of the Organization to determine the improvement steps of the software engineering and make solid improvements, instead of blindly pursuing hot spots!