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.
From the perspective of the computing model, the traditional von noriman is still in use. However, in terms of computing power, we have noticed three changes:
●CPU computing capability is rapidly improved according to Moore's law. However, it is increasingly difficult to increase 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 massive migration of computing capabilities to servers, the C/S structure is relentlessly abandoned, and thin clients (B/S structure) 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:
●As the computing capability is quickly centralized on the server side, middleware technology that provides high parallel computing capability and availability is widely used and has even become a required option 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 number of lines of code to be written, it also directly leads to a smaller and smaller Software Development Team, but more and more professional roles (such as understanding industry demand analysts, understanding of middleware technology and domain architecture architects ).
●The enhancement of computing capability makes software more and more easy to use, so that software becomes ubiquitous and the number of software developers needed increases dramatically (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 a good framework, they can develop tools and software of production grade (using eclipse, JBoss, mySQL, subversion as an example), so open source has become a trend.
●The B/S structure of the system is 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 is becoming a hot spot: Professional roles, increasingly complex business innovation, globally distributed teams, and Internet-level delivery speeds all put forward higher requirements on the correctness and effectiveness of demand acquisition; I expect that the research and implementation of demand engineering will become a hot spot in the near future, and the use case technology will be widely and correctly applied, the development of related tools will also become a hot topic (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, using the analysis class to try to implement the 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 lashu Xinhua (based on the domain 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, gradually becoming standard: As the Software Delivery cycle is accelerating, 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 can be 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, ready to go: Continuous integration is the main way to ensure the quality of iterative development. Through continuous integration, you can use automation to ensure code quality 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.
●A hands-on process framework is emerging: The Professional Development Role and the globalization of distribution require more standardized software development process, while agile requires that the process closely meet 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. The esswork framework of iji (Ivar Jacob bson International) and The RMC of IBM Rational are both a new generation of practical process frameworks.
Based on the long experience of Process experts, they carefully and 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 could also import industry-specific practices for the Organization into existing processes, and iji experts extracted eight practices from the best practices in the industry, with information accessible to http://www.esslab.net: 4040/NGP /.
●Configuration Management, yesterday: As the scale of the development team decreases, the complexity of configuration management is greatly reduced. We 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 project managers 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.
I don't have to go into details about the importance of software development for the software engineering team. Although I listed some software engineering hotspots above, readers must carefully analyze the characteristics of the Organization to determine which improvement steps should be taken next, rather than blindly pursuing the hotspots!