Personal reading Assignment 3

Source: Internet
Author: User
Tags java spring framework

    • A summary of software engineering m1/m2

Soft work class At the beginning, I am ambitious, determined to earn high points, I am on time class, listen carefully. Finally ushered in the first job-the word frequency statistical procedures, after the full effort or was defeated, the same input, others 4s, why my delay results? Is it because others use C # I use C + +, certainly not. The original people used HashMap I use is red black tree ...
Well, I look forward to the Revenge of the second program--Elevator scheduling algorithm finally arrived, behold a small problem unexpectedly will be so complex, have to follow the simplest algorithm to carry out--half fool dispatch.
I am not reconciled, I think I am good at C + +, good algorithm, the results have been defeated.
Team project came, I have struggled to find the master, he is our pm--sun * *. My task is to search the function, I am very happy, because the search is also more interested. I secretly decided to conscientiously complete the assignment to my task, as far as possible to do the perfect, live up to the expectations of others, from the first day I started strictly according to the teacher's request-two hours a day, and report the progress of the work. To tell the truth, at first, really the task of the team project to see very important, feel can not drag everyone. A few days later, I am still looking at the code, I really am looking at the code, because of contact with new things, have to surf the internet various learning. A week later, I have not started to knock on my own code, because the seniors of that code out a bit of a problem, too late to find the reason, so has been unable to run normally. I also began to worry, simply began to write their own from the beginning, referring to the official documentation examples, their own elusive for a long time, and finally write a version that can produce results. However, it is very difficult to use the project, encountered a variety of unresolved problems, such as multiple objects simultaneously manipulate a file and other parallel exceptions. Helpless had to go back to the code of the seniors, only to find that the original did not understand why to write such a place. Later, a force of teammates told me that the search is part of a dedicated team developed, has been written, I just Huanran dawu, originally this part of the code is a team developed. After changing a few places, I can finally use it. and changed a few places to finally get the alpha phase before the release of the normal search problem. During the period due to other classes of large work, delayed a few days, but the total time is not under the request. But the biggest problem is that I've been refining the search for the one months, and I'm still making more problems.
I feel guilty to enter the beta phase, at the beginning of the period I would like to make some more in the beta phase to compensate. But powerless. All kinds of big homework to cut off, a variety of examinations approaching, I can not cope with the soft work. Most of the teammates also stopped living, but still have a very strong team to do a lot of work. I was very moved when I eased up a little bit and then quickly went into the soft work and found that my teammates had made N-more update sets. Then the next few days to focus on the search document to solve the function, not last, the exam came again ...
I think I learned a lot about the technology of search, the Architecture of ASP, SQL Server database and C # Four things in the soft work, although my personal pay is not very important to the team, but it is the core function.

    • Link to a blog with a premise issue

Http://www.cnblogs.com/yxr1993/p/4027851.html

    • Please explain what questions are now clear, please clarify how to read, practice, or discuss to find out.
    • What questions are not yet understood, please analyze
    1. The character set is not yet understood, but the problem is not related to software engineering itself. This semester is really troubled by the character set, that is, in the Web-sevlet-database transmission process is easy to appear in Chinese garbled. Generally can find a solution on the Internet, although temporarily feasible, but I do not understand the nature of the problem from the root, it is likely that the next encounter or do not know how to solve.
    2. Did not solve, I used to use C + + developed a simple Windows program, made out of the interface is ugly, for those beautiful interface still do not understand, it is said that C # can write a very beautiful interface, has also done Java interface Development, to be honest Java developed interface is not good, It's like eclipse, but it's the most convenient way to write the interface in Java.
    3. I am involved in the team to do the main site, so for the framework of the ASP. I know some of it, and in this semester's Android Class I am mainly responsible for doing an Android app as PM, and I am familiar with the architecture of the Android application.
    4. By browsing some articles on the web, it is possible to understand that the software architect has a wealth of project experience, has experience in all the problem areas involved in project development, has leadership qualities, excellent communication skills, and is proficient in the theory, practice and tools of architecture design, as well as mastering a variety of reference architectures, major reusable architecture mechanisms and patterns. To have all the skills of a system designer. We are in the university to enhance the programming skills, expand broad knowledge-based. There is a "mastery of a variety of reference architectures, the main reusable framework mechanisms and patterns" is what I am most concerned about in the software engineering class, but what bothers me is that there is little access to the architecture of reference value, I do not know how to use the common architecture.
    5. So far I do not understand how important the design document is, the actual project really need to waste a considerable amount of time on the design document? Perhaps the project I am currently in touch with is so humble that there is absolutely no need to spend too much time writing documentation, and when the project is complex enough, the document can be used as a guide to implementation, so there is no documentation. In addition, I have a deep understanding of the importance of a document when development is complete. On the one hand, when the other people to maintain the time to facilitate the rapid understanding of the whole system design; On the other hand, when the bug is found to understand the root cause of the problem, it is necessary to reflect on the design flaws, with a line of code projects, there are many convenient documentation.
    • What new problems arise, please raise
    1. To quickly improve the ability to engage in software engineering, do something from scratch and read a successful open source project source code, which is more effective? Because to beginners to do a slightly more complex software come out, we often can not touch the mind, do not know the whole program how to organize more reasonable, do not know the division of functions, do not know how to do interface and so on. Our team's task is to improve the previous seniors Genius website, although many people say that the code is too bad, but I think the entire site structure is reasonable, and use a lot of open source components, such as Lucene, if completely their own development estimates a little hanging. Personal feelings, although not for the team to contribute too much, but from the seniors in the code did learn a lot of things.
    2. Is the Burndown chart really useful? Although I am not pm, but from the PM to know that Burndown chart is not practical.
    3. How to measure the workload of members fairly in the team? It is difficult to accurately measure the contributions of individual members of a team, and it is inappropriate for the beta phase of the team project to use the code volume of individual members as a basis for the final assessment of individual contribution. Some people write code redundancy and quality is not high, and some people pay great attention to the simplicity of the code, which will result in evaluation of unfairness.
    4. are frequent short-term tasks necessarily more efficient than long-term tasks? The teacher's request is that no one at least two hours a day, the requirements are really not many, but in fact, only two hours a day almost nothing also can not do, maybe two hours only enough to find a mistake, so I usually do two times a week, each time in 7, 8 hours or more.
    • At the same time we also read 8 software engineering related papers or blogs, you look back at these articles, there is no new experience?

At that time, I didn't understand what the author was talking about, and after two months of team projects, though the understanding deepened, there are many places that are not quite clear enough to really understand the need for long-term software development.
The following I combined in the experience of participating in Xueba website development focus on my experience of the first document:
The so-called Silver Bullet, is in software project development, no one technology or method can make software engineering productivity in 10 years to increase 10 times times. The author analyzes in detail four unavoidable difficulties in software engineering, and these difficulties are also my deep experience.

Complexity

--No two software systems have exactly the same parts, which makes software engineering much more complex than computer hardware or building highly reusable projects.

Consistency

--Different people write code that varies widely, and integration takes a lot of time and effort.

Variability

--The demand is strange, time is changing.

Non-visibility

--The software is virtual, and developers face thousands of lines of code all day.

      software in the development process, the increase in the number of objects increases the complexity of the program logic, and the complex relationship between objects so that they can not be separated from the view, But it has to be connected to consider. The complexity of the function call increases the time complexity of the program, and the unreasonable data structure application increases the space complexity of the program, which makes the program run slowly and bear heavy burden. Sometimes many people work together to design a complex logic, taking into account all the circumstances, the use of special data results and in a specific case to set up the algorithm, the results found in the future need to expand the program when it is difficult to do, overturn and unwilling to heart, but the expansion is bound to be more complex or even error, There is also the possibility of a regression test failing to pass, resulting in a greater loss. Software updates are frequent, and after the software has been released, even after unit testing and internal testing have fixed most of the problems, software developers are likely to receive a large number of daily complaints and modification suggestions for different users around the world, which makes it necessary to maintain and update the software frequently. For example, the mobile phone QQ and other software, basically a few days to release the new version of this centralized repair several or dozens of issues, and the results are often users of the new interface is not bought, or found that some of the original functions are missing, that is, the user experience is not as good as the original, such as the recent Sina Weibo web version updated, And I found that some of the previous features are now useless or useless, which makes software developers feel overwhelmed and headache. In addition, hardware updates and changes to the use of the platform, as well as diversity, have also made it possible for software developers to develop multiplatform applications and adapt to changing hardware changes, such as the hardware updates of Apple phones and the upgrading of Microsoft systems, forcing software developers to constantly change programs to meet new needs. Take my elevator project distance, I estimate the next pair of project is likely to be the elevator design to put forward new requirements, when the need for new changes, will also have to carry out regression testing, think all is very troublesome, is equal to the trouble never stop, nightmares come and go repeatedly and you can not avoid. Although the author believes that the complexity of software engineering is determined from the very nature of its development, he still has hope, citing a series of potential silver bullets that have clearly played a role in solving problems in software engineering. I'll talk about my thoughts on high-level languages.

  1. Convenience: Although we learn the language are C language, Java language and so on high-level language, but we have also contacted the assembly language, understand that the lower level of language use is more complex and error prone, the main reason is too cumbersome low. While low-level languages are more efficient, the sheer amount of code in low-level languages and the hard-to-maintain program structure make us feel a great headache when writing and debugging. With high-level languages, many of the underlying designs no longer need to be considered by programmers, but are handled by compilers and assemblers. In this way, we can implement the conceptual model at the level of the advanced language, and the less time-consuming debugging will be able to complete the work, which undoubtedly increases the reliability of software development, reduce its complexity, especially now a lot of language compiler itself with powerful static or dynamic check function, even a large number of automatic code generation, And now the emergence of a variety of code frameworks, such as the Java Spring Framework, Ruby's rails framework, and so on, make our software development more convenient, fast, and secure.
  2. Modularity: Modular design also seems to be more clear, like now often write Java and C # are modular design, it is impossible to say that all the content is written in a class, a method, which is not easy to test, others are not easy to understand your code. Abstract data types are exposed in the course of object-oriented modeling techniques. At that time class has been talking about abstraction, made me bored, now C #, Java and other object-oriented programs to write more feel, their own process of writing procedures often in the abstract, the real object is abstracted into the program class, packaging good member variables and operation methods, and then can be used, This makes it easy to divide complex problems, each of which has his own part to be responsible for, the interaction between classes through information passing, the complexity of the program being classified as the object and the relationship between them, and the UML diagram undoubtedly helps the developer to clarify the connection between the program structure and the class. When you abstract a specific complex problem, you can often find some key points when you look at the problem at a higher level.
  3. Abstract: Inheritance hierarchy is conducive to code reuse, but also embodies the polymorphism, in fact, a bit like interface and implementation of the relationship between classes. Interface is actually an abstract result, abstract out the necessary members and methods of the object, the specification of good specifications, easy for others to call, reduce the program integration when the interface is not equal, from software development fundamentally solve some of the complexity and risk. In fact, many of the languages that many programmers use are object-oriented ideas, including the object-oriented language that we are now doing projects. Abstract data types and inheritance levels are the basic idea of object-oriented, and thus can be seen the role of object-oriented programming in modern software engineering, it simplifies a lot of things, eliminating unnecessary trouble, so that programmers in the abstract level, using a unified interface for communication.

    • What are the "knowledge points" you have learned in the project requirements/design/implementation/test/release/maintenance phase (altogether 6 phases), as long as you have a knowledge point at each stage.

1. Demand--NABCD model

When we develop the software, we always want to know what the user is thinking, what is the preference for various functions, and we can take the information to meet the needs of the users in a step-by-step manner. The NABCD analysis was done at the start of the team project, in turn:

Need (demand)-what are the customer needs that are not yet met but are urgently needed in the market?
Approach-How can I propose a unique approach to meet this need?
Benefits (earnings)-what is the convenience of this approach to customers?
Competition-What are the advantages of this unit cost benefit for competitors and other alternatives?
In addition, the teacher added a deliver (promotion).
These are the initial needs of the project investigation and analysis.

2. Design--specification says

When the team took over the genius website, there was no specification stating that everyone had browsed through the code to understand the architecture of the system gradually. If there are specifications that will be much easier, so when the project is nearing the end of the time I started to write a technical document to guide the next session of students continue to do genius. And the specification contains only a few key information, always updated to ensure that concise, easy to understand, easy to modify.

3. Implementation-Agile process

The team works under the guidance of the teacher according to the principle of agile development. This includes regular scrum meeting, daily Burndown charts, and extreme programming methods.

4. Release--alpha&beta release

As is known to all, a software release many versions, such as Alpha, beta (Beta), trial, unregistered, demo and other test versions and release, registered, Standard, Deluxe, Enhance, Reference, Professional, Enterprise, Ultimate and other official editions. As the first major phase of the entire software development cycle, the alpha version is primarily for internal testing and is not fully functional, but it can meet general requirements. The beta version is also beta, unlike Alpha, which is used for public testing and we haven't released it yet.

5. Maintenance--Review, Software maintainability

at the end of the personal assignment, we had a review. Although no more bugs were found in the review, the review was also a way of learning from each other and developing the ability to read the code.
In the team project, I learned about software maintainability. Although the seniors have done almost, but we are not fully according to the design of the seniors, so there are many design flaws or changes due to the need to change, from the bottom of the design including the database, the Web Service-to-page changes, including removal of the main color of the switch, etc. have been changed, we can say that our entire team has been continuously maintained from the time of the takeover.

6. Test-Unit Test

When you have finished writing your own module, it is up to the unit to test it correctly. From object-oriented modeling to software engineering, our teachers ask us to do unit tests, object-oriented modeling classes or even ask us to write out the correctness of the class, to determine the invariant
and a range of input and output requirements to ensure class and module correctness from an abstraction level. Each member of the team is responsible for the relevant modules, and finally in the integration, such as the song to ensure the normal operation of the entire system, the first is to ensure that everyone's own module does not make any mistakes. Unit testing is a good tool, I used to directly in main in the whole class to test, in fact, the role of unit testing is similar, that is, to ensure the correctness of the interface provided to the customer. Although the use case design of unit tests is troublesome, because of the need to take into account all aspects, and inevitably there will be omissions, and second to a large number of classes and methods to write a test program is also a very scary thing, testing time even longer than the programming time. But the idea of unit testing is good, and I have benefited from it.

Personal reading Assignment 3

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.