Monday, March 27, 2006

Why do software projects fail so often?

hum.... we have do many project fomr diploma to higher diploma and now degree,,,, I have try to make up a software program for my friend company(as I meantion before...)but... it's just like to build up a buliding..why? acturally... the software also have the sturcue so far...I dont think my skill is good enough... at all when I try to trace back in the big program.. which I mand... seem hard to find some key some time... acturally.. it's already teach out in the lesson call"bad sturceure..." something like some chinese medicine doctor... which write the medicine paper in very bad format... only the himself and the chinese drug store understand.., why? it's to prevent no easy to understand... or herbit? just.. it's not easy to evolotion the program which make by oter people which do not have enough paper... docunment. which like cvili still have some sturecue we need to clear and understand~!
so..... Success need to pay many time... many source and the herbit of the programmer, for the program prepareation....! here is some information which I find in the internet, and that 's the source for refrences: http://www.outsource2india.com/software/SoftwareProjectFailure.asp
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Why Do Software Projects Fail?
“What are the chances that this project will succeed…?”
For most companies and entrepreneurs starting on a new software project, this is one of the first questions that are considered. Unfortunately, the question is a very relevant one. Studies conducted by major research groups show that 50% of software projects fail today.
Why do software projects fail? Are there preventive measures to avoid software project failure?
A recent research project at 'The Standish Group' has identified reasons for software project failure. Lets have a look at the results of the research project.
For purposes of the study, projects were classified into three resolution types – Resolution Type 1 or project success, Resolution Type 2 or project challenged and Resolution Type 3 or project impaired.
Resolution Type 1 or project success:
The software project is completed on-time and on-budget, with all features and functions as initially specified.
Among the Project Success Factors, it was noted that ' Clear Statement of Requirements' was ranked third in importance for the success of a project, after User Involvement and Executive management Support.
Resolution Type 2 or project challenged:
The software project is completed and operational but over-budget, over the time estimate, and offers fewer features and functions than originally specified.
'Incomplete Requirements and Specifications' was cited as the second main reason for exceeding the budget and time
Resolution Type 3 or project impaired:
The software project is canceled at some point during the development cycle. Here again, Incomplete Requirements was the main reason cited for the failure of the software project.
Overall, the success rate was only 16.2%. Challenged projects accounted for 52.7%, and impaired (canceled) for 31.1%.
The table below lists the criteria for software project success in order of importance.
SUCCESS CRITERIA
POINTS
1. User Involvement
19
2. Executive Management Support
16
3. Clear Statement of Requirements
15
4. Proper Planning
11
5. Realistic Expectations
10
6. Smaller Project Milestones
9
7. Competent Staff
8
8. Ownership
6
9. Clear Vision & Objectives
3
10. Hard-Working, Focused Staff
3
TOTAL
100
The chart clearly shows that 3 major factors greatly influence the success of a project - User Involvement, Executive Management Support and Clear Statement of Requirements. Out of these, “Clear Statement of Requirements” scores 15 points and is one among the top 3 reasons for the success or failure of a Software Project. It is clear therefore that Requirement Definition is a crucial step in Software Development. Read about our Requirement Analysis process here.
Requirements Evolution Requirements & Analysis is one of the most important and often most neglected activities of the software development life cycle. A good requirements model fosters communication between the business and IT by enabling them to share a common vision of the system’s solution prior to implementation. This will ensure that the system meets the business needs, can be delivered on time, and have the level of quality and flexibility to easily accommodate future business needs.
Requirement Capture and Analysis - The Difference
Requirements
Analysis
To determine what needs to be built
To understand users and their potential usage of the system.
To determine what users want to have built.
To describe what the customer requires
To understand what will be built
To understand why it should be built
To determine how much it is likely to cost. (estimation)
To determine the order in which should be built (prioritization)
To understand the system itself and explore the details of the problem domain
To understand how it will be built
To identify and translate business goals and needs into system features, and use them to derive both functional and nonfunctional (technical) system requirements
To ensure that it represents the middle ground between requirements and design
To define a set of requirements that can be validated
To establish a basis for the creation of a software design

How can we ensure that we have specified a system that properly meets the customer’s needs and satisfies the customer’s expectations?
There is no foolproof answer to this difficult question, but a solid requirements engineering process is the best solution we currently have.
Requirements engineering provides the appropriate mechanism for understanding what the customer wants, analyzing needs, assessing feasibility, negotiating a reasonable solution, specifying the solution unambiguously, validating the specification and managing requirements as they are transformed into an operational system. The requirements engineering process can be described in five distinct steps-
Requirements Elicitation
Requirements Analysis and negotiation
Requirements Specification
System modeling
Requirements Validation
Requirements Management

Outsource your software services to India
Do you require high quality, customized software services? Why not consider outsourcing to India? Indian service providers offer flexibility and dynamism in the process by customizing your software solution as per your requirements.

Tuesday, February 28, 2006

What is test-driven development?

for the problem....What is test-driven development?I have do some research.... for it~!
-->main idea of test-driven development?
The steps of test first development (TFD) are overviewed in the UML activity diagram of Figure 1. The first step is to quickly add a test, basically just enough code to fail. Next you run your tests, often the complete test suite although for sake of speed you may decide to run only a subset, to ensure that the new test does in fact fail. You then update your functional code to make it pass the new tests. The fourth step is to run your tests again. If they fail you need to update your functional code and retest. Once the tests pass the next step is to start over (you may first need to refactor any duplication out of your design as needed, turning TFD into TDD).
-->What is the goal of test-driven development?
A significant advantage of TDD is that it enables you to take small steps when writing software. This is a practice that I have promoted for years because it is far more productive than attempting to code in large steps. For example, assume you add some new functional code, compile, and test it. Chances are pretty good that your tests will be broken by defects that exist in the new code. It is much easier to find, and then fix, those defects if you've written two new lines of code than two thousand. The implication is that the faster your compiler and regression test suite, the more attractive it is to proceed in smaller and smaller steps. I generally prefer to add a few new lines of functional code, typically less than ten, before I recompile and rerun my tests.
I think Bob Martin says it well “The act of writing a unit test is more an act of design than of verification. It is also more an act of documentation than of verification. The act of writing a unit test closes a remarkable number of feedback loops, the least of which is the one pertaining to verification of function” (Martin, Newkirk, and Koss 2003).
The first reaction that many people have to agile techniques is that they're ok for small projects, perhaps involving a handful of people for several months, but that they wouldn't work for "real" projects that are much larger. That’s simply not true. Beck (2003) reports working on a Smalltalk system taking a completely test-driven approach which took 4 years and 40 person years of effort, resulting in 250,000 lines of functional code and 250,000 lines of test code. There are 4000 tests running in under 20 minutes, with the full suite being run several times a day. Although there are larger systems out there, I've personally worked on systems where several hundred person years of effort were involved, it is clear that TDD works for good-sized systems.
-->How does a test-driven development cycle look like?
A significant advantage of TDD is that it enables you to take small steps when writing software. This is a practice that I have promoted for years because it is far more productive than attempting to code in large steps. For example, assume you add some new functional code, compile, and test it. Chances are pretty good that your tests will be broken by defects that exist in the new code. It is much easier to find, and then fix, those defects if you've written two new lines of code than two thousand. The implication is that the faster your compiler and regression test suite, the more attractive it is to proceed in smaller and smaller steps. I generally prefer to add a few new lines of functional code, typically less than ten, before I recompile and rerun my tests.
I think Bob Martin says it well “The act of writing a unit test is more an act of design than of verification. It is also more an act of documentation than of verification. The act of writing a unit test closes a remarkable number of feedback loops, the least of which is the one pertaining to verification of function” (Martin, Newkirk, and Koss 2003).
The first reaction that many people have to agile techniques is that they're ok for small projects, perhaps involving a handful of people for several months, but that they wouldn't work for "real" projects that are much larger. That’s simply not true. Beck (2003) reports working on a Smalltalk system taking a completely test-driven approach which took 4 years and 40 person years of effort, resulting in 250,000 lines of functional code and 250,000 lines of test code. There are 4000 tests running in under 20 minutes, with the full suite being run several times a day. Although there are larger systems out there, I've personally worked on systems where several hundred person years of effort were involved, it is clear that TDD works for good-sized systems.

--->How does a test-driven development cycle look like?
see the figure 1 is the life cycle

Refrence:http://www.agiledata.org/essays/tdd.html

Saturday, February 25, 2006

Software Design Patterns: How much do you understand?

How Much do I understand? I think it's the most diffcuclt to understand about topic in this course... acturally.. I quite pay attenation in the lesson.. but.. seem it's so absert to understand~
In the three design patterns, the structural patterns .The adapter pattern uses both inheritance and delegation.For example, when two systems A nad B are totally different and cannot be modified, an adapter is needed. The adapter implements each method declared in A in terms of requests to B.According to the textbook, the bridge pattern decouples the interface of a class from its implementation. It serves the same purpose as the adapter pattern except that the developer is not constrained by an existing component.

So far.. hope you will not make the question for this topic in exam so hard ^_^!

Gear up to study the course

WEll, it's true that.... it's the time to gear up and study that.... we still have time from now till 14/4, right?

then we will have a reading week for 2 weeks and then have out final exam... everything seem move to fast for me... I have decide to work after this course... seem that.. it's the last "gold time" for me to play to laugh.. and to learn in the classroom by the full time learning in school... and have our lovely teacher...woo!

so... need to be to treasure the time.... and... prepair and plan up how and what to study ^_^!

Good luck to you all!!
Cheers!
see you alll happy in the Graduate Ceremony!

Saturday, February 18, 2006

How Internet email works

What's Email?

Electronic mail, abreviated e-mail or email, is a method of composing, sending, and receiving messages over electronic communication systems. The term e-mail applies both to the Internet e-mail system based on the Simple Mail Transfer Protocol (SMTP) and to intranet systems allowing users within one company or organization to send messages to each other. Often these workgroup collaboration systems natively use non-standard protocols but have some form of gateway to allow them to send and receive Internet e-mail. Some organizations may use the Internet protocols for internal e-mail service.

We can said that Internet email == webmail...

Webmail is a class of web applications that allow users to read and write e-mail using a web browser, or in a more general sense, an e-mail account accessed through such an application.
Webmail is commonly offered as a service by Internet companies, sometimes in exchange for providing personal information for marketing purposes. It may also be offered by one's Internet service provider for remote access to a regular e-mail account. Many companies also provide web-based access to their internal e-mail systems, for use by employees when at home or travelling.
Some mail servers, such as Microsoft Exchange , Kerio MailServer or Atmail, contain built-in webmail interfaces.
Features
Most webmail services have the following features:
folders
filtering (incoming e-mail to dispatch to related folder)
trash folder
address book
Several webmail services offer the following features:
E-mail spam detection
POP3 mail retrieval
anti-virus checking of mail attachments
dictionary and thesaurus when composing messages
spell checker
[edit]

Advantages of webmail services
e-mail is stored remotely on a web server, which means that it is accessible anywhere there is an internet connection and a web browser.
[edit]

Disadvantages of webmail services
The user must stay online to read and write more than one e-mail. They cannot easily edit mails they are working on offline (except by cutting and pasting the text).
Commercial webmail services often offer only limited e-mail storage space and either display advertisements during use or append them to mails sent. Unlike with a local client, the user cannot keep the messages on their local hard drive.
Most e-mails are usually short, plain text messages of less than 2 kB, but using webmail the original e-mail is wrapped in the website's HTML, which can be 40 kB or more. Obviously this brings a significant decrease in speed of use, especially on a slow network connection.
[edit]

Other features of webmail
Webmail accounts can be set up with minimum technical competence and provide independence from one's current ISP as well as a degree of anonymity.
The ability to access it anywhere means it is harder to trace the individual who uses an account than if they used a connection associated with their home address.
These features mean it can in theory be more easily used as a communication tool for nefarious purposes (or for avoiding oppressive authorities) than conventional e-mail. In practice, most governments security agencies are fairly easily able to track individuals who try to use such methods, just as with someone who calls from phone booths. Ordinary citizens will find it more difficult, however.

ref: http://en.wikipedia.org/wiki/Webmail#Other_features_of_webmail
http://en.wikipedia.org/wiki/E-mail#Internet_e-mail_header

Friday, February 17, 2006

Students Mini-project: Developing applications using the Web APIs

eso far.... I have think for the API in other topic before.... just... I misunderstand about the Topic"Web 2.0 API", I have refrence for the website on the list in steven web.... so far... many kind of web api like some "Email to fax", "News", "Map" many many...

many people have do the research on the Web API 2.0, many people have now start to think for the new way to use the web resource, one for the solution is the blog which we are using and the photo album, for the 10 year of the web, at the begin just some static or a BBS ...and then ...web 1.5 the web go for more mutlimedia like add some music... I belive that web can bring people the information but how to defind the information?

My project is not going to defind which one is correct and not correct....! the Idea of mine is... like doing some searching for the topic which is User want to read for... to provide more and more information for the user... no only the article... and the photo or some movie like news report , and I would like to just let the web chain with the local newspaper and the local boardcast televsion station, no only for the NEWS, it can also provide service for the finaces market to search the information befor the user buy the stock... to check up the stock holder company history... and the relation information, and of course the history beofre of the same day... which likely the program in ATV...........

Sunday, February 05, 2006

Stuff that lets agile software developers show off what they believe in

Refactoring
From Wikipedia, the free encyclopedia
(Redirected from
Refactor)
Jump to:
navigation, search
For the Wikipedia policy on refactoring, please see: Wikipedia:Refactoring talk pages
Refactoring is the process of
rewriting a computer program or other material to improve its structure or readability, while explicitly keeping its meaning or behavior.
Contents[
hide]
1 Refactoring code
2 Common refactorings
3 Forth
4 Refactoring other text
5 Etymology
6 References
7 See also
8 External links
//
[
edit]

Refactoring code
In
software engineering, the term refactoring means modifying source code without changing its external behavior, and is sometimes informally referred to as "cleaning it up". In extreme programming and other agile methodologies refactoring is an integral part of the software development cycle: developers alternate between adding new tests and functionality and refactoring the code to improve its internal consistency and clarity. Automated unit Testing ensures that refactoring does not make the code stop working.
Refactoring does not fix
bugs or add new functionality. Rather it is designed to improve the understandability of the code or change its structure and design, and remove dead code, to make it easier for human maintenance in the future. In particular, adding new behavior to a program might be difficult with the program's given structure, so a developer might refactor it first to make it easy, and then add the new behavior.
An example of a trivial refactoring is to change a variable name into something more meaningful, such as from a single letter 'i' to 'interestRate'. A more complex refactoring is to turn the code within an if block into a
subroutine. An even more complex refactoring is to replace an if conditional with polymorphism. While "cleaning up" code has happened for decades, the key insight in refactoring is to intentionally "clean up" code separately from adding new functionality, using a known catalogue of common useful refactoring methods, and then separately testing the code (knowing that any behavioral changes indicate a bug). The new aspect is explicitly wanting to improve an existing design without altering its intent or behavior.
The term is by analogy with the
factorization of numbers and polynomials. For example, x2 − 1 can be factored as (x + 1)(x – 1), revealing an internal structure that was previously not visible (such as the two roots at +1 and –1). Similarly, in software refactoring, the change in visible structure can often reveal the "hidden" internal structure of the original code.
Refactoring is done as a separate step, to simplify testing. At the end of the refactoring, any change in behavior is clearly a
bug and can be fixed separately from the problem of debugging the new behavior.
Martin Fowler's book Refactoring is the classic reference. Although refactoring code has been done informally for years, William Opdyke's 1993 PhD dissertation [1] is the first known paper to specifically examine refactoring. All of these resources provide a catalog of common methods for refactoring; a refactoring method has a description of how to apply the method and indicators for when you should (or should not) apply the method.
Refactoring is such an important
concept that it has been identified as one of the most important software innovations by author and commentator David A. Wheeler.

Ref:http://en.wikipedia.org/wiki/Refactor


------------------------------------------------------------------------------------------------
JsUnit

JsUnit is a Unit Testing framework for client-side (in-browser) JavaScript. It is essentially a port of JUnit to JavaScript. Also included is a platform for automating the execution of tests on multiple browsers and mutiple machines running different OSs. Its development began in January 2001.
The central area for discussion of JsUnit is a
mailing list/posting area hosted by Yahoo (founded 5/17/2001). To join click here.
If you would rather email me with questions, suggestions, problems, etc., my address for JsUnit-related correspondence is
edward@jsunit.net.
Please submit bugs to the
SourceForge bug tracker, and feature ideas/patches to the mailing list.
There is a high-level PowerPoint introduction to JsUnit
here.
JsUnit merchandise now available at
agilestuff.com.
JsUnit is an
Open Source project. It is distributed under the following licenses (download the distribution for more details): GNU Public License 2.0, GNU Lesser Public License 2.1, Mozilla Public License 1.1

ref:
http://www.edwardh.com/jsunit/

After these searching...

so....born to Refactoring..... is going to say... just like to re-enginnering the software and JsUnit the broswer the code can run in mutliplatform... means code run anywhere~

Another Blogger.....

basic software engineering..?

basic software engineering..?
Hello, What a wonderful day, I can sleep till 2:00pm~! what skills to the basic software engineering..?I have saw some of the classmate wrote : O, then I add it and write a little... at all... I think basically need to good at some programming language... no only know...you need to pay time to "play with the language" otherwise... you are just the man behide the door and can do nothing...andother point is...need to pay attenation for the bugs and how to slove the bugs... it's also test yourself EQ... otherwise.. you can't write a good program... as I say before... Bugs is just like germs...but.. see how much you can de-bug , you never say you are bugs free... right?and the last thing... as I'm a part time job to help my friend company to write a program...1.meet customers target(know what there need, and tell what you can do?)2. meet the deadline...I always blame myself..to finish it beofre the date... but many things can not count... just like our life, right?Hope it's not to long to the reader and my Dear Classmate.. and Steve ^_^!Have a nice day~!!and 10.1 go out and see firewark is better then see at home~ it's turth ^_^!

Saturday, February 04, 2006

Software quality: What makes a program code good?

Question/Seconiro: Suppose two programmers gave you two different programs that aim at doing the same task. You are the boss to select one of them and pass it to the program team to continue development of the whole project. What factors will you consider?

The Program code good or not are based on these factor.....
1. program code readable(the format and the comment),
2. easy understand and can it re-build or get some update/correct for a newly version by the other programmer
3. Program work propabaly?
4. What benifit for choose ?
5. The Documention of the program how to use (to under stand why the code wrote like that)

So far.... in these 5 points, of course no all of the point are list out, but most important is not only the point for the program work, is most important for the further development and let other programmer to understand and update or something to work with this program, it's why we need to learn the program format and praticse it well.... otherwise... the program can only understand by the developer... it's only can work with one people... as chinese we have a sentence call"Close the door to bulid up a car" no only you cant get the update and correct comment by other programmer.... at all... you can't get help..... that's what I try before... seem... it's no good to the programmer user... and the people what are going to update the programme.. by you did~!

Stuff that lets agile software developers show off what they believe in

Refactoring
From Wikipedia, the free encyclopedia
(Redirected from
Refactor)
Jump to:
navigation, search
For the Wikipedia policy on refactoring, please see: Wikipedia:Refactoring talk pages
Refactoring is the process of
rewriting a computer program or other material to improve its structure or readability, while explicitly keeping its meaning or behavior.
Contents[
hide]
1 Refactoring code
2 Common refactorings
3 Forth
4 Refactoring other text
5 Etymology
6 References
7 See also
8 External links
//
[
edit]

Refactoring code
In
software engineering, the term refactoring means modifying source code without changing its external behavior, and is sometimes informally referred to as "cleaning it up". In extreme programming and other agile methodologies refactoring is an integral part of the software development cycle: developers alternate between adding new tests and functionality and refactoring the code to improve its internal consistency and clarity. Automated unit Testing ensures that refactoring does not make the code stop working.
Refactoring does not fix
bugs or add new functionality. Rather it is designed to improve the understandability of the code or change its structure and design, and remove dead code, to make it easier for human maintenance in the future. In particular, adding new behavior to a program might be difficult with the program's given structure, so a developer might refactor it first to make it easy, and then add the new behavior.
An example of a trivial refactoring is to change a variable name into something more meaningful, such as from a single letter 'i' to 'interestRate'. A more complex refactoring is to turn the code within an if block into a
subroutine. An even more complex refactoring is to replace an if conditional with polymorphism. While "cleaning up" code has happened for decades, the key insight in refactoring is to intentionally "clean up" code separately from adding new functionality, using a known catalogue of common useful refactoring methods, and then separately testing the code (knowing that any behavioral changes indicate a bug). The new aspect is explicitly wanting to improve an existing design without altering its intent or behavior.
The term is by analogy with the
factorization of numbers and polynomials. For example, x2 − 1 can be factored as (x + 1)(x – 1), revealing an internal structure that was previously not visible (such as the two roots at +1 and –1). Similarly, in software refactoring, the change in visible structure can often reveal the "hidden" internal structure of the original code.
Refactoring is done as a separate step, to simplify testing. At the end of the refactoring, any change in behavior is clearly a
bug and can be fixed separately from the problem of debugging the new behavior.
Martin Fowler's book Refactoring is the classic reference. Although refactoring code has been done informally for years, William Opdyke's 1993 PhD dissertation [1] is the first known paper to specifically examine refactoring. All of these resources provide a catalog of common methods for refactoring; a refactoring method has a description of how to apply the method and indicators for when you should (or should not) apply the method.
Refactoring is such an important
concept that it has been identified as one of the most important software innovations by author and commentator David A. Wheeler.

Ref:http://en.wikipedia.org/wiki/Refactor


------------------------------------------------------------------------------------------------
JsUnit

JsUnit is a Unit Testing framework for client-side (in-browser) JavaScript. It is essentially a port of JUnit to JavaScript. Also included is a platform for automating the execution of tests on multiple browsers and mutiple machines running different OSs. Its development began in January 2001.
The central area for discussion of JsUnit is a
mailing list/posting area hosted by Yahoo (founded 5/17/2001). To join click here.
If you would rather email me with questions, suggestions, problems, etc., my address for JsUnit-related correspondence is
edward@jsunit.net.
Please submit bugs to the
SourceForge bug tracker, and feature ideas/patches to the mailing list.
There is a high-level PowerPoint introduction to JsUnit
here.
JsUnit merchandise now available at
agilestuff.com.
JsUnit is an
Open Source project. It is distributed under the following licenses (download the distribution for more details): GNU Public License 2.0, GNU Lesser Public License 2.1, Mozilla Public License 1.1

ref:http://www.edwardh.com/jsunit/

After these searching...

so....born to Refactoring..... is going to say... just like to re-enginnering the software and JsUnit the broswer the code can run in mutliplatform... means code run anywhere~

Software Engineering Certification Programs: What Can You Learn from Them?

Compare the IEEE Computer Society's CSDP bpdy of knowledge with our current coursem the things that are not in our textbook:
1. Enginnering Economics
2.Professional Pratices
3.Specialized Software Design Approaches
4.Code Design,Organization, Documentation,Tuning.

Since I'm still going with this course, so that I just find out these different between CSDP and MT356F that I've learnt~~~

UML Tools: What is your favorite?

...I forget what I talk about here before~~! I'm so sorry that ^_^!