[2019BUAA Software Engineering] personal feelings Closing summary

EDITORIAL

  After a semester to study software engineering, he completed a knot agile development process and programming three cycles. In this blog I for one semester of study were summarized and made for his original doubts answered.

  I should start before the semester course requires read a book Zou Yan teacher "building law", and a certain amount of software engineering research, raises several questions. This is the blog's link .

  In addition, we attach a pair programming blog links and team development team blog directory .

To answer questions

  After a semester of study, the author from the theoretical and practical aspects were learning for the development of software engineering. For some of the issues raised by the beginning of the semester also gradually have their own answer. The following is the author's views on these issues now.

  • Personal Development Process (Personal Software Process) own time overhead? Define the various stages of the border?

  The problem for the quantitative assessment of the software development process is very important. However, in previous development experience for the author to calculate the time development of each stage accurately it is very difficult - a lot of time in the development process is the design, development, testing period crossover manner. This results in the simultaneous recording time will be busy trouble.
  When pair programming, the author exclusively on the personal development process were quantified. In the course requirements, the need for time overhead is required at all stages of the PSP is expected to be early at the beginning of development, and to start work as planned in various stages of development after the time in. During the development process, thanks to the PSP plan of spending time limit, the author's purpose in a certain time for each stage of the twinning program has been put on the control . Try to complete the work within the expected time. If the analysis afterwards can deviate from the actual time of use, the better.
  Back to the question, how can we better define the boundaries of each stage, to better quantify the cost of time to develop it? Knot when planning for most of the development is done from the beginning in my drive. That is, limited period of time to be dedicated to the completion of a stage of the work. If you could have been completed according to plan development (best case), then the plan is final personal development time overhead. Of course, in the process of pair programming, the author and his teammates I have encountered many unexpected problems, and did not fully complete all phases of the scheduled time. For example, time spent on the design of less than the scheduled time and the time it takes to develop and test a little more than the scheduled time. At this point, only time overhead plan to fine-tune for the benchmark.
  Overall, the cost of personal time to quantify the development process so that I have more to control the overall progress and time in the development process, but also be able to reflect on their own problems at each stage of the deviation generated.

  • Timing optimization and generalization.

  When optimizing code? When abstract generalization of code? The two questions I still have not quite accurate answer, or only, as the case may be.
  Basically no generalization when the author pair programming, is more optimized. This is mainly because of pair programming does not need to face a lot of changes in demand, all requirements outset have been identified. On top of this, the program requirements on operating efficiency is high, you need to have begun with the optimization of the code, otherwise affect the optimization results very last.
  During the development team, the situation is completely the opposite. Because of the need for three iterations, the face of fast changing needs, the program needs to have a higher ductility. He was required to generalize earlier, according to the abstract function, the preparation of the corresponding common function module. And optimize prematurely may not have much income.

  • Knot division and rotation efficiency of the programming of the two.

  For this problem, the author in the process of pair programming in encountered. Due to the nature of the arrangements and the development of sub-problems on two time, the author and his teammates take on programming in conjunction with taking the way of independent development. The author at the junction summary of the programming cycle for the division of labor and efficiency to give their views.

  Knot like programming and development division of single-threaded and multi-threaded . When a large amount of work tasks and development tasks of each module can be broken down into sub-tasks a high degree of parallelism, it is very clear division of labor "multi-threaded" development efficiency will be higher. Again based on one, in the face of the larger task of workload, pair programming is likely to appear on advancing the development progress difficult. In my early pair programming, two programming efficiency is more significant, and soon completed the basic functions. However, the ensuing testing, optimization, regression testing, GUI rendering and so had time to make the task less affluent knot difficult to advance the progress of the program appears. They eventually I will be part of the task of the task was the development of the division of labor, ease the pressure on the junction of the task.

  Pair programming is a method for people development. However, all is not suitable for pair programming under all circumstances, we need to choose the actual situation. Need to be estimated for expenses incurred in the choice of development mode, we decide the division of labor. When the expected efficiency is unsatisfactory can considerations into other development mode, or directly change policy development.

  • Agile development mission planning and advance issues.

  In the team development process, he did not play the role of Project Manager (PM), but the assisted project manager at the α iteration. And "Building of the law," a book talking about the same, Scrum is an initiative by each member-driven, and project manager mainly for the transmission of information on the whole, to ensure that each part of the collaborative team. For planning tasks, and more are discussed by team members together to complete. In this case, one can accomplish a more complete plan; but to avoid the errors that can occur when relayed task. For the project to promote the issue, on the basis of each member on the initiative, but also the project manager, truly communicate among each member. In my team there have been difficult not to raise false report their progress, etc., affect the progress of the project also makes the cooperation become very unwell.
  All in all, the most important thing is communication, the problem is placed on the table so that we can discuss. Let every member to participate in the mission planning and project to promote and improve everyone's participation and initiative.

  • Team development assessment of individual performance.

  This semester, she has participated in the development of software in two teams. Each group has a different way of assessing individual performance of. In fact there is no best way to assess performance. In a group, so that everyone can accept the assessment is a good way. Group courses should be required, prior to development, the way each group to assess individual performance were discussed to ensure that the assessment methods can be accepted as members.


Software development project summary

  We will sum up their experience from the six phases of software engineering development in this part of the author.

Demand Analysis - Analytical Framework NABCD

  For the needs analysis phase, a book "Building of the law" NABCD proposed analytical framework, from the original requirements, take practice to the benefit of users, competitors and five ways to promote the project needs analysis. After the project team project, each group in accordance with the five directions NABCD conducted an investigation for the needs of the project. This way a more comprehensive needs analysis to measure the objectives of the project, as well as potential obstacles that may be encountered, so that the focus of project development more clearly. For example, after the author's analysis of the project team found that the greatest difficulty lies in the promotion. So the team needs more experience for the establishment and promotion of the use of groups.

Design - to form a complete document before work

  After completing the needs analysis, the most important thing is to form a complete workable document on demand. In this regard, I can say is deep feelings. Team in the early stages of α, because the team members (including the author) a certain lack of front and back end development experience, resulting in some errors generated during the design interface documentation, there are many defects in the formation of the document. This leads to frequent remodeling process developed in the late interface documentation is required, even to the last entire document has been discarded. This greatly influenced the author team of development progress.
  Abstract demand at the design stage, the function of writing the document after refinement, the front and rear end interface documentation, and so on. These documents are equivalent to the contract for the project team members, played a leading role at a later stage. In addition, the document also need to write more concise, to avoid bias on the understanding of the text. Team work is necessary before discussions to form a perfect document.

Realization - always follow the design according to the document

  After the completion of requirements analysis and design, each member of the team will set out their respective tasks. In the implementation phase, each member is difficult to discuss the boundaries of their respective mandates frequently, but according to the document design stage to ensure that each task can be docked into a whole self. Thus in the implementation phase, in strict accordance with the contract on the development of very important documents. When iteration β and γ stage, move to another team as a back-end development tasks. Thanks to the lessons of α phase at the beginning stage sprint author and member of the development of the front end of the middle of the negotiated interface format. Just then the front and rear end in strict accordance with the interface to write code, we can ensure consistency of the final function of the front and rear ends, and eliminates a lot of unnecessary discussions during development.

Test - complete testing is the key

  During the testing phase, the author is responsible for the back-end code unit testing. "Construction of Law" book mentioned way a test-driven development, i.e. to achieve the design stage of the unit before the test code. I tried to develop in this way in the development. While writing code in this way would ensure the completion of its correctness. In addition, coverage testing were tested in accordance with the "Building of the law," a book talking about, I still in the testing phase. Complete testing is the foundation to produce high quality software. For each module in the project, often you need to use more code to test it.

Release - release early versions of the smallest available

  Agile development is a major feature is the rapid iteration, which requires the development team quickly given version can be used. This means that agile development team is not required to give a one-time final version of the software. In the book, the software requirements for each stage of the need to give the team the "Building of the law" has the following description:

Alpha stage : the first refers to the integration of the main functions of a trial version. Some small features are not implemented in this version. In fact, many Alpha version of the software is only used internally. Alpha version to outside users will play a more wonderful name, for example, technical preview (Tech-nical Preview), and so on.
Beta phase : complete basic function, high stability than the Alpha version, users can use the small range in practical work, can have Beta1, Beta2, Beta3 ......
ZBB stage (Zero Bug Build): One day version of make before (for example, 48 hours ago) recorded Bug are resolved.
RC stage (Release Candidate): release candidate, RC1, RC2 ...... until RTM, version of the intervals are shorter.
RTM stage (Release To Manufacturer): final release version. If one of the RC version is not a big problem, then this will be the final version of the RC, under normal circumstances, will the final version of the software company and the relevant documents and other information to another team (Manu-facturer) to packaging, lithography CD. In the AppStore / Marketplace era, we have the appropriate RTM (Release To Market).
RTW stage(Release To Web): RTM and similar, for network applications, we do not rely on distribution channels "Manufacturer / Market" CD-ROM authoring software or management software, but to rely on "Web" to publish our final version. If the software product is a web service, the general will be forwarded to the site operations team (Operation Team) to manage, this release also called RTO (Release To Operation), decided on the line when the system together with the operations team and R & D team ( Go Live). The software submitted to the respective application store can be called Release To Store.

  In the development of the team, I experienced the Alpha, Beta and Gamma phases. Which in Alpha stage, the team is still the main run-in period, after nearly a month's time gives the prototype software, the basic functions and some "killer feature." In the Beta phase it is in the existing prototype to perfect: fix existing problems, add functionality on demand. The Gamma stage is similar to RTM stage, basically the first two phases of the software for finishing work, targeted to improve.
  This duration of each phase is not long enough, it aims to release versions available as soon as possible for users. Only users actually use the software to be able to get the most realistic feedback. This is a questionnaire survey research methods can not achieve.

Maintenance - timely response to user feedback

  After the release version of the software is available, the team's maintenance team needs to obtain timely feedback from users, monitor changes in actual demand, as well as changing the software in response section. When γ stage, I participated in team received a request for a software development outside the school. After the software is released into user testing, and soon received a lot of feedback from users, covering advice from UI to function in all aspects. After a summary of the feedback, team members were recommended choice, and quickly the software has been updated.
  Timely maintenance based on user feedback, the software can make the actual needs of the user more closely. In addition, in the maintenance phase, from time to time to test the software can find and fix hidden problems, increase the life of the software.


A semester Review

  In a semester of study software engineering, I experienced a total iteration time and three pair programming team development. Through a variety of software development practices, the author of the software development methods and programming capabilities and others have a lot of harvest.
  On the programming ability, as a result of the move after the Alpha stage, the author conducted a total of development work in the three environments. During the pair programming, the author uses a teammate as the programming language C ++. And during team development, the author has studied the Laravel PHP framework and Python Django framework. In addition, it also lifted the front part of the development language. This greatly enrich the author's development technology stack, enriched patterns and skills before and after the end of the development. Nevertheless, the author is responsible for the development of the back-end part, for the back-end code operation mechanism, the back-end data abstraction, back-end to front-end delivery and so have a more profound understanding.
  For software engineering, the author of the most profound understanding is pure programming work throughout the project is not the most important. Especially when team development, non-programming work often play an important role in software development. When the development team, the author and his teammates spend a lot of time in research, discussion, communication, design, etc. work. The work is the foundation for development. Obviously you can feel when these non-programmers to work are doing very well, it promote the development work will be very easy. When Alpha stage, the author's team precisely because of communication and other work done inadequate, leading to the final development problems. Although encountered many problems and setbacks in the process, but I also gains deep. Worked on this semester, we more deeply understand for software engineering development, working with the various stages.

Guess you like

Origin www.cnblogs.com/Cookize/p/11084023.html