I want to learn RUP but don't find a practical book!. I read the "Guide to the Unified Process featuring UML, Java and Design Patterns" by John Hunt But this book is so brief. is there a book that learns the RUP step by step with UML diagram(each discipline)?
What about this one:
Hope that helps
If you define practical as "helps me get my work done," I don't find anything practical about RUP, prescriptive maybe not not particularly practical. If you are just interested in picking up a methodology and don't have to learn RUP, then I suggest any of many different books on Agile Methods. Highsmith's Agile Software Development Ecosystems is a good overview of several. If you're really stuck on RUP, then you may want to consider the Agile Unified Process.
The book on RUP is probably The Rational Unified Process: An Introduction. You may want to check it out of your local library. I can't say I remember it well enough to give you a recommendation.
My company does not follow any well defined process for software development. I want to implement a simple but effective process which will suit my company.
We have all sets of resources right from project managers to developers and testers.
Please provide some references or process templates that I can use.
Jim Highsmith's book, Agile Software Development Ecosystems, provides a good overview of the main agile software development methods. I'd suggest checking it out of the library or buying a copy to get a feel for the different possibilities and see which (if any) fit your company and products best. Other processes that you may want to look at include the IBM Rational Unified Process (there is an agile version of this as well) and the Team Software Process.
What is the best method you have found for deciding whether or not to implement features into your software product?
EDIT: Can you recommend some reading material (online or book) for me on this topic?
Look at any of the various agile methodologies and see how they put the customer in control of deciding which features to implement. View it as a cooperative process between developers and customers to meet the customer's goals. Ultimately the customer has to decide what is most important, though developers also need to sometimes explain why to get Feature X that the customer wants, we must have Feature Y and Z first. Use rapid, iterative feedback to discover the actual features that the customer really wants. When she has a chance to actually use the product early, you get much better answers as to what is really needed.
Pick up Jim Highsmith's Agile Software Development Eco-Systems for a good overview of various agile methodologies. In particular, look at chapter 5, "Deliver Something Useful", for a discussion on how to get the customer involved. Perhaps your local library can get you a copy to preview.
Just to expand on dommer's answer, the "customer" -- he person for whom the software is argeted, the audience -- is he only one that can decide. If there is no audience, like a new speculative product, then find someone who can play audience. Unless the target audience is programmers, make sure it's not a programmer, and in any case, at all costs don't give that job to one of the developers on the project. (For details why, read The Inmates are Running the Asylum by Alan Cooper.)
Then define your feature list by expansion and contractions: expand by generating all the crazy ideas you can think of, by brainstorming or similar. Have the customer or surrogate customer define which once are nicest to have, that is prioritize them. Find the minimal useful system and build that, and then expand and contract again because both you and the customer will know more about the problem.
I am wondering whether there is any methodology to design the program logic which is agile-proof.
Currently for example I am developing an application for video recording and uploading. At the beginning it was planned just to enable the user to select the stored recordings from the library and edit title or upload the selected video. Then the program had to be modified to display the title dialog aoutomatically when the user stops recording. Now the program has to display the title dialog on record stop then it has to ask user if he wants to upload video and then the flow proceeds in accordance with user's selection.
There might be some better example to describe the problem of executing the program methods with different combination of condition states. The main question however is how to "keep the logic under control" during the development cycle.
It simple to make a complex design based upon predefined functionalities and then write the code from beginning to the end but I believe such cases are rare. Currently I write on paper all known scenarios, then run the debugger and make modifications in order to fix the logic and bugs. Unfortunatelly at some point when the complexity grows it becomes really painful to work this way. If there exists any methodology to simplify the development I would definitely like to learn about it so if you know any good book or just give any suggestion about the issue I would be very thankful!
I don't know why you would want to "agile-proof" your methodology when agile methods seem to be the exact solution you are looking for. Agile methods anticipate (embrace, I think, is the word Kent Beck uses) change and look for ways to minimize risk in the face of inevitable change. It sounds like your project is the poster child for why we need agile methods.
I'd suggest reading one of many books on agile methods and learning about techniques such as TDD, frequent delivery, story-based development, etc. that could really help you to manage the unavoidable change that all projects experience. Jim Highsmith has a good book, Agile Software Development Ecosystems, that provides an overview of several different agile methodologies and how they address particular problems in development.
EDIT: It occurs to me that perhaps what you mean is "change-proof" your development. I sorry to say that I don't think that this is really possible. There are techniques to minimize change, but you can't eliminate it. I've found that it's better to recognize that it will happen and use a methodology that expects it and can manage it better than to try and minimize it. Processes that try to minimize change are very front-loaded with planning activity and take much longer than I am willing to spend for the types of projects that I typically work on. I find that with agile methods I'm able to complete my projects in about the amount of time that I would otherwise have spent planning for a different methodology.
As an aside I recently had a project that, because of political reasons, we had to spend a lot of time gathering requirements and doing product evaluations. It took us about a year to eventually decide what product to get. I had the installation and integration (which used my agile methods) done in about 2 months.