Software Methodologies

Size: px
Start display at page:

Download "Software Methodologies"

Transcription

1 Question 1: What is a practical method of selecting a software project development methodology? Answer 1: There are many software development methodologies to choose from, so making the choice can be an arduous experience. Some organization and a good process can help a lot. The first step is to understand the project and the associated goals and constraints. Is it a long or short project? Does the project introduce new technologies and present risks? How experienced are the people who will be doing the development work? Are they new to the organization or programming in general? Document the answers to these questions while preparing your analysis. The nature of the business also comes into play. Is this a stable business with experienced managers? How well do the stakeholders understand the goals for the project, and is there general agreement among the team about these goals? Once again, document your analysis of the business. After the project and business aspects are prepared, build a decision matrix. Use the project and business criteria to match against the potential methodologies, and you will have an appropriate list of good candidates. Be sure to talk to people who have used these methodologies so you can understand how they work in real-world projects rather than just the conceptual potential the methodologies offer. Question 2: How can I select the best programming language to use for a software development project? Answer 2: Sometimes this choice is thrust upon us, but in many situations, you will have the opportunity to select a language to use for implementation of your solution. There are some practical considerations for programming language selection. The target system will be the first factor. Will the system be a Webbased application or a client system, or both? Some languages are only available on specific platforms. If your application must operate on multiple platforms, then your choice of language will also be limited to cross-platform languages such as Java or more generic C and C++ implementations that do not use platform specific libraries. 1

2 The experience of the development team with particular languages can influence your choice. If there are no other overwhelming factors, then you might want to choose the language your team already knows well. You may also have some existing code from a previous or similar project you can reuse for the project. In this case, it might not make sense to start again from scratch in another language. If you will need to use third-party libraries for some of the implementation, then you will need to check which languages are supported by the libraries you will use. Fortunately, most libraries can be integrated into an application even if they were written in another language, so this is not as important as it has been in the past. Question 3: How do I know if rapid application development (RAD) is right for my project? Answer 3: RAD has received a lot of positive attention in recent years, and this approach does offer a lot of benefits when used and managed properly. The focus on smaller teams and the focus on the task at hand can significantly improve productivity and improve the quality of the final product. Along with these benefits come associated risks. RAD requires significant organizational coordination and experience. RAD teams are required to operate with a high level of independence. All arms of the RAD development effort must operate with precision to produce the desired outcome. Requirements and specifications must be clear and accurate or the result will not meet expectations. If your software development team, including management, is able to administer and execute this type of process, then your results will be of high quality and productivity will be enhanced; however, if there is a question about the ability of the team to rise to the demands of RAD, then the risk of falling short of expectations can be dramatically increased. Ultimately, the question of using RAD for your development project will rest on the assessment of the experience of the team, the skills available, the time required for the project, and whether there are other risks that might affect the project. You must have a project that can be compartmentalized, the team must be disciplined, and the managers must have the skills and 2

3 experience necessary to drive the project. Question 4: Which Agile software methodologies are the best for real-world projects? Answer 4: Agile software development receives a lot of attention in the research of software development and it seems a new variation appears each time the topic is examined. There are many Agile methods documented in available research. The better known methods are as follows: Extreme Programming (XP) Scrum Agile Modeling Adaptive Software Development (ASD) Crystal Methodologies Dynamic Systems Development Method (DSDM) Feature Driven Development (FDD) Lean software development Agile Unified Process (AUP) These methods reduce risk by compartmentalizing development into short iterations, each of which are treated like individual projects that have all the same phases as a large project. These mini-projects produce an end product that might not be releasable on its own but is a defined part of the larger project. By separating the larger project into smaller pieces, overall project risk is minimized, and the organization of the pieces is easier to manage. All of this information does not answer the question of which methodology is best for your project. Ultimately, the approach you choose to take must be selected based on the best fit for your project and organization. Availability of process information and templates for one process over another will help. Some methods require more training than others, but if the project is large, then the effort will be worthwhile. Crystal and DSDM fall into this category, while XP and AUP can be used with less initial training because they are more conceptual. Other methods like Agile Modeling and FDD require more documentation during the design phase but can provide better guidance when the iterations during development take place. Question 5: What are the tradeoffs in product quality, dollar cost, and 3

4 delivery time when using RAD? Answer 5: RAD reduces large projects to smaller subprojects, and in doing so, RAD attempts to reduce the risks by compartmentalizing the effect on the overall project. Subprojects, with their own complete development cycle, are generally easier to monitor. If something goes wrong with a smaller project, the project manager can react and respond more quickly. An entire module developed in a mini-project might be important to the overall project, but if this subproject exceeds the time allowed by 10%, this has far less impact on the overall project than a 10% delay in the entire project. RAD generally requires more overall resources than traditional methodologies, but the high level of focus used in RAD development shortens the total project timeline to offset the additional resource costs. The increased visibility of the smaller project teams and the iterative review of results will also produce higher quality. The small teams can react more quickly to feature requests with less impact on the overall project, so RADdriven projects generally produce a feature set closer to the needs of the client. An additional benefit of RAD is that support and maintenance costs are reduced. The specific numbers will vary depending on the project, but in general, if a RAD project is managed properly, the timeline will be shorter, the quality higher, and the overall costs will be lower than traditional software development. Question 6: How do I decide between targeting my system to client systems or Web-based applications? Answer 6: The trend for the last decade has been to return to the early approach to computing and use a client-server model but now using the Internet as the backbone. The server side of the equation is the Web server, backend databases, and Windows Services to provide functionality. The client is either the Web browser or a client application using TCP/IP (Transmission Control Protocol/Internet Protocol) communication over the Internet to interact with the server. While this model is popular, is it the best for your system? 4

5 Web-based client-server applications still are plagued with connectivity and security issues, although great progress has been made in this area. These models are also more complicated, but they can reduce dependency on client computing power. Web-based systems can concentrate the computing and process on the server side. This makes maintenance and updates much easier, and also allows data sharing across wide parts of the system. If your system does not require data sharing and does require significant user interface (UI) work on the client computer, then a client application might be the best approach. Highly graphic-centric applications or applications where the required data input or storage is local only would also be good candidates for client-only systems. The lines are getting blurred on these criteria as well. With the advent of technologies like Asynchronous Java Script and XML (AJAX) and continued improvements in Java technologies, user interaction with Web-based applications has been enhanced to the point that it becomes difficult for the user to determine where the actual application is being executed. Ultimately, the decision of where your application will reside depends mostly on the data-sharing aspect and whether enough users will need access to the application to warrant the additional complexity of a Web-based application. Question 7: What is the difference between a software development methodology and a project management methodology? Answer 7: There are some commonalities between software development methodologies and project management methodologies because of the crossover of the tasks to be managed; however, the methodologies are separate. A software development methodology focuses on the phases in the software development process. The processes used in each of these phases is defined and executed based on the software development methodology. The time required for each of these processes is not defined in the software development methodology. The project management methodology defines how the relationships and timings of all tasks in the software development methodology will be managed. Project management requires evaluation of and communication of status and milestones. You can view the software development methodology as the how of the project and the project management methodology as the 5

6 when. Accordingly, you will need to select both the project management methodology and the software development methodology for your project. Question 8: How do I select the highest priority projects out of a list of potential software projects? Answer 8: Project prioritization is necessary when there are many projects and limited resources. When you prioritize projects, many factors must be considered. The number of users affected is one of the largest concerns. If the project will impact the ability of users to perform critical activities, then the project should move up on the prioritized list. The same type of consideration is important when you examine the impact on the business as a whole. If important business activities will be interrupted or postponed until delivery of the system, the project should have a higher priority. The available resources must be matched against project priorities. Scheduling more than one project that requires the same resources would not make sense unless you want to purposely divide the activities of those resources among multiple projects. Those projects would all proceed but at a slower pace. The focus of the resources should be considered in this case because this approach might result in lower productivity across the projects. Sometimes it is appropriate to schedule some smaller projects along with the larger ones to make sure the smaller or lower priority projects do not get delayed indefinitely. There are also outside influences on projects. If the company is producing a product for sale in the marketplace, competition might force higher priorities. Sometimes a project is part of a larger system where priorities from other businesses become important. Another example would be a company producing tax preparation software that must be updated in time for the clients to prepare taxes for a fiscal deadline. A general guideline is to first identify all the factors that impact the priorities of the projects in your list and assign weights to those factors. Next, list the projects and score them based on the weighted factors. Finally, rank the projects in order of their weighted score to produce your prioritized list. Question 9: When preparing for a software development project, what tools 6

7 should I include in my resource list? Answer 9: Many tools are required to go through all the phases of a project. Some tools are project specific, but there are some tools that are useful in most projects. It is helpful to examine each phase of a project to determine the types of tools you might need. The first phase is requirements analysis. During this phase, you will document the project requirements. This is typically done with a word processor or spreadsheet application. Typical office suites will have all the tools necessary for this phase. The next phase is design. You will be preparing design documents, so again, an office suite is a good start. Additional tools at this point might include visual design applications for diagramming, modeling applications, and even programming tools to build prototypes. At this phase, you should also be looking at good version control software. The implementation phase will focus on coding so the programming tools used for the language you select will be necessary. Version control becomes a high priority in this phase. The system might require the use of graphic design tools if it is Web-based, although even client-side applications sometimes require graphics for many purposes. Web-based products might also require animation and video preparation tools. During the testing phase, a critical tool is issue tracking software. The office suite is again used to prepare test plans. In addition, unit testing tools might be employed. Stress testing tools are important for testing many applications. Test automation tools can also be useful in many situations during the testing phase, particularly in regression testing. Question 10: What Rapid Application Development (RAD) techniques can I use if I am the only person working on a project? Answer 10: RAD often focuses on the team concept and many RAD documents discuss how small teams should work; however, the techniques can be applied to 7

8 individuals too. RAD attempts to lower risk by defining small, independent projects with relatively short time frames. Teams are usually identified to work on these smaller projects so the team members can draw from each other s skills and knowledge and overcome obstacles quickly. An individual may not have the other team members to draw from, but an individual can still work on the small, independent projects. A hybrid approach to RAD is to form a team of experts that the project teams can turn to for help when needed. Using this approach, individuals still have access to expertise but can work alone on the projects. The experts provide the experience and knowledge that might normally be confined to only one of the teams. This hybrid approach allows more effective use of all the resources in a RAD environment. 8