I have heard that Roger Teacher's software engineering course is a combination of practicality and theory of the class, in this course is not simply to write code, debugging procedures, but also to do iterative development, writing documents and other practical software engineering must be completed work. In order to exercise their ability to learn some of the different knowledge, this semester I chose Roger Teacher's software engineering class.
The course can be divided into three parts, individual projects, two-person team projects, and a group project (five people).
Individual projects emphasize personal ability, including the ability to write code, creativity, imagination and so on, Roger Teacher said: In the actual development of software in the process, is rarely "individual combat", but personal ability is the cornerstone of the team, only personal ability outstanding, team level can not be low. So arrange this personal project to test us. Our personal project is to write a Beijing Metro Search line program, enter the starting station and terminal, find the shortest route to achieve the goal and change to the minimum line, just received the task I thought this task and I previously wrote other big homework no difference, I write a code a lot of independent program, Which involves complex data structures used to store information about each Metro site, involving search algorithms, including width-first search, A-star algorithm, and so on, the whole program of tuning, functional testing and so on. I think so, but also to do so, but the actual score out of my score is not very high, afterwards I summed up the reason, I think the problem may appear in the most of the time I spent in the debugging of the code, and ignored the writing of the project documentation, resulting in the document language is too primitive, many of the implementation details are not reflected , I concluded that software engineering a good project to achieve the document, should be explained in detail every aspect of the program to achieve, some things not only to do in the program can, but to show him out, let the people who see the document know how you do, why do this.
With a trace of the understanding of software engineering, our curriculum into a two-person team project, I with a fellow selected so the class of friends formed a double team, before the other major assignments we also cooperated a lot back, so this time we are confident, Roger teacher once said: A team from the creation of the unfamiliar to the final heart to have a process, the beginning of two people may not know each other, to the later acquaintance, know, and then may be able to understand each other, there is a certain tacit understanding, the process may also encounter some problems in dispute ... Only through the various, to achieve the perfect fit, to form a true sense of the good team, I think we have already had the cooperation, although may not reach the heart of the request, but at least there should be some tacit understanding, holding the mood, we started a double project, this topic is still the subway, The difference is that this need to have a graphical interface, I have previously used the C + + GDK library, writing a graphical interface program, so I did not hesitate to choose the team's front-end development tasks, responsible for writing a graphical interface, and my teammates because of the foundation of the individual project, It is also easy to choose and implement the back-end algorithm and data structure. The process of writing the code is smooth. Drawing on the first lesson, we started writing documents early. Such a job we think is more satisfactory did not change to our expected results, see the results of the moment, my teammates and I have fallen into deep thought, through the comparison with other teams, we found some of the shortcomings we do with other teams-testing, in fact, to tell the truth, About testing we do not do less than other groups, after the completion of the program, we have tried any one of the input of the starting station and terminal combination, to see if the response of the program is a problem, I thought, the user does not care how you do this program, what algorithm you use, what data structure, what language , what advanced technology and so on, he only care, I use your software can not get the results I want. So when we finish this huge number of tests, we feel that our program is no problem, no need to write any unit test, the fact that our software stability is not a problem, but the problem appears in the test, the other group of test reports, basically covering the various branches of the program, Coverage of up to 90% or more. This overturned my understanding of software engineering, what is software engineering? Baidu Encyclopedia is a study of engineering methods to build and maintain effective, practical and high-quality software disciplines. In other words, we're not just trying to make the whole process of our program right, but to analyze it from the root cause, from design, to data structure, to the selection of algorithms, and why every change is right. The unsatisfactory score can weigh heavily on my self-confidence, but it also makes me more rational about what the course wants to teach us: the ability to write code is indispensable, but you have to say thatThe code is written correctly. It makes sense to think about it afterwards, in the actual project, the code is often tens of thousands, most of the code is not you write, you can not have the time and energy to understand each implementation details, then you use other people to write methods and functions, you can only assume that the other people's Code is right, So how to ensure that other people's code is right, you need that person in their own unit part of the test, in the same way, when you add new code to the project, in order to let other people who use your code rest assured that use, you must ensure that your changes will not affect the entire software, Or you change this part of the normal use, so you need to do sufficient testing in each unit, rather than the overall completion, and then test, our overall test can guarantee the correctness of the program, but we can in a short period of two weeks to debug and complete the code just because our project is too small, No matter from the code or manpower, once the program in the test out of the problem, not my fault is a teammate's fault, the code is two of us write, can easily locate the code error location. So, in summary, we've finished the program, but not the standard software engineering process, so it's natural to not get the ideal score.
Thinking so much, so I would like to be able to really apply the knowledge in the team project, our team project is the background data processing part of the Genius online website and the back-up part (crawler), this project to our hand has experienced several rounds of iterative development, the project at the beginning can be said to be bad progress, There is no documentation for the previous team, and even see the code of the previous classmate is Alpha version (not completed version), the C # language unfamiliar (previously only in C + + and C # programming classes and used, genius Web site data processing part of the source code used in C #) plus the code is not annotated, The code has too much redundancy (7 classes are completely useless), making our understanding of the code slow, and finally we decided to keep the core code after the focus of the writing language from our unfamiliar C # to Java, the use of Java calls C # A program-compiled dynamic-link library (. dll) preserves the original code for a new round of iterative development, which can be said to be the coexistence of opportunities and risks, in which the use of new technologies C # compiled dynamic link library can be referenced by Java This problem slows down the progress of the project. But development efficiencies written in the Java language are improved (familiarity with the Java language is higher than in C #), and Eclipse turns Java engineering into a jar package, turning the entire program into a program running in the background. The idea of using the Web to display and control process progress has also been recognized by the teacher in terms of user experience and effectiveness. In addition, it is too difficult to take on a project without project documentation for the first two projects, so our team has deliberately written two blogs explaining the intent and implementation details of each function implemented throughout the project. and instructions for the operation of the entire program.
Http://www.cnblogs.com/nrm1/p/6215275.html
Http://www.cnblogs.com/nrm1/p/6250988.html
As of the end of the beta phase, the software engineering course for this semester has come to a close, reviewing the course of this semester, under the double pressure of compiling technology and database, to be able to learn software engineering such a course burden no less than the above two courses I really feel proud of themselves, in the sense of their growth, I also want to give this course a bit of my own advice, the following suggestions are only representative of my personal opinion, if there are mistakes and I hope to forgive.
1, because in the second half of the Software engineering course (presumably in the database exam, compile the exam, database big job, compile big homework and other subjects, also is the key period of beta phase of the team project), considering these exams need to review and the big homework takes time to complete and directly affect the final results of these subjects, So the software engineering program has a very low priority, in fact, I personally spend less than 4 hours a week on software engineering in this time period (probably on the Wednesday night). So, I consider whether the teaching module can be adjusted, the team project is carried out at the beginning of the course, and then the two-person project, the last individual project, the reasons for this are as follows. First of all, because the second half of the semester the task is not heavy, students will have more time to do this project, can do better. Second, the two-person project and the individual project have a more clear target for the team project, and the code volume is smaller than the team project, can be debugged in a short time completely, suitable for the task of other tasks under heavy circumstances, and can be arranged in advance, so that the ability of the time to do first. This may break the teacher's gradual and progressive approach to teaching, but in fact, everyone may have chosen this course for the team project (at least I chose it for this purpose).
2, in the course of the project in addition to the completion of the code, but also to write some documents (blogs), as a computer department of students in general, the ability to write code can not be said very high, but also commonplace, but the normative documentation of software engineering does not know how to write, Although in each job request with a large number of words described in the document what to write, what should not write, but some of the details are not clear, so I hope to be able to decorate the job, the teacher can provide some excellent examples of the past, for reference.
3, about the team project iteration of the various stages of the project schedule, the current schedule is a weekly planning goals, two weeks sprint, a week of testing. The teacher's intention is not wrong, I hope we can have adequate time planning, adequate time test. But as a team that does not have much development experience, it is too difficult to plan a detailed schedule of tasks for the next two weeks without writing a single line of code, so in most cases only rough, large-scale plans can be made, not materialized, When the real realization of the code and then found that the original thought of the discrepancy, and then change or even overturn the original goal, so that the first week of the basic waste of time, so I would like to do so, the first week of project planning time reduced to 3 days, and then from the fourth day to sprint, sprint to four days later, The second week starts planning again three days, fixes or changes the first planning goal, and then completes the follow-up sprint, as for the fourth week of testing, I propose to shorten the next 4 days, the first three days again assigned to the sprint stage, not that the test is not important (in fact, I know the importance of testing by studying software engineering), But actually in the sprint phase, we have done a lot of testing the code has ensured that others do not error, that is, the work of the test is in progress, but the lack of records of the test results of the process, as long as we put the usual test code records together, in fact, we have completed the majority of unit testing, And can cover almost all of the code, and in fact, after the end of the sprint code should be integrated, almost all of the functions have been able to use the normal, then only need to adjust some extreme data. Therefore, it is recommended to reduce the final test time.
The above is my feeling and reflection on the software engineering course, as well as the suggestions on software engineering courses. Finally, thank all the teachers and teaching assistants for a semester of education and guidance, but also for all the students who choose this course to accompany. Thank you, everyone!
Summarization and reflection on software engineering course