ЧТО ДЕЛАТЬ С ЭТИМ ДИАЛОГОМ? ГДЕ ЗАДАНИЕ?



Caller: "Hello, is this Tech Support?"

Tech Repairer: "Yes, it is. How may I help you?"

Caller: "The cup holder on my PC is broken and I am within my warranty period. How do I go about getting that fixed?"

Tech Repairer: "I'm sorry, but did you say a cup holder?"

Caller: "Yes, it's attached to the front of my computer."

Tech Repairer: "Please excuse me if I seem a bit stumped, it's because I am. Did you receive this as part of a promotion, at a trade show? How did you get this cup holder? Does it have any trademark on it?"

Caller: "It came with my computer; I don't know anything about a promotion. It just has '4X' on it."

At this point the Tech Repairer had to mute the caller, because he couldn't stand it. He was laughing too hard. The caller had been using the load drawer of the CD-ROM drive as a cup holder, and snapped it off .

 

Computers in our life

When Charles Babbage, a professor of Mathematics at Cambridge University, invented the first calculating machine in 1812 he couldn’t imagine the situation we find ourselves in today. Nearly everything we do in the world is helped, or even controlled by computers, the complicated descendants of his simple machine. Computers are used more and more often in the world today, for the simple reason that they are far more efficient than human beings. They have much better memories and they can store much information. No man alive can do 500.000 sums in one second, but a computer can. In fact, computers can do many of the things we do, but faster and better. They can predict weather, and ever play chess, write poetry or compose music.

Symbol Language

Most people agree that symbols are useful, even if some authors invent their own favorite symbols. UML is the most widely accepted graphical notation for software design, although it is sometimes criticized for not being consistent. Even in mathematics, the ultimate language of symbols, there are controversies about symbols even for such established subjects as calculus (cf., Newton’s vs. Leibnitz’s symbols for calculus), lest to bring up more recent subjects. To sum up, you can invent your own symbols if you feel it absolutely necessary, but before using them, explain their meaning/semantics and ensure that it is always easy to look-up the meanings of your symbols. UML is not ideal, but it is the best currently available and most widely adopted. Arguably, symbol language has a greater importance than just being a way of describing one’s designs. Every language comes with a theory behind it, and every theory comes with a language.

Symbol language (and its theory) helps you articulate your thoughts. Einstein knew about the general relativity theory for a long time, but only when he employed tensors was he able to articulate the theory.

 

Google Personalizes Search with SearchWiki

November 20, 2008

By Brad Stone

Google is set on Thursday to significantly change the way some people use its search engine. The company is introducing a new feature called Search Wiki that will allow people to modify and save their results for specific Google searches. They can move the sites that appear in rankings up or down, take them out altogether, leave notes next to specific sites and suggest new sites that are not already in the results (or are buried too far down in the results to see). Users must be logged in to Google to use Search Wiki and can revisit their annotations when they perform the same search later.

Screen shot of Google’s new Search Wiki feature.

The company is also making these annotations public, in a move that may either deter Google users from writing anything too personal on Search Wiki or encourage spammers to exploit the tool.At the bottom of every Google search results page, logged-in Google users will see a link that says, “See all notes for this Search Wiki.” Clicking on it allow users to see how other people have re-ranked results or commented on sites. At least at first, there will not be any way to make these notes private, Google says, but users can change or delete their notes at any time.

Search Wiki may essentially allow users to rank and review the top sites for common searches— like “Indian restaurants in San Francisco,” for example. That could spur users to evaluate businesses and push Google into direct competition with review sites such as Yelp.com and CitySearch. Marissa Mayer, Google’s vice president of search product and user experience, says that in internal tests, people’s notes in Search Wiki have tended to be more about the relevancy of the Web site to that particular search term.

 

 

Software Development Methods

“Plan, v.t. To bother about the best method of accomplishing an accidental result.”

—Ambrose Bierce, The Devil’s Dictionary

he goal of software methodologists is to understand how high quality software can be developed efficiently. The hope is that new insights will emerge about effective product development, so both students and experts might benefit from learning and applying methodology. Ideally, the developer would adhere to the prescribed steps and a successful project would result—regardless of the developer’s knowledge and expertise. Methodology development often works by observing how expert developers work and deriving an abstract model of the development process. In reality, life cycle methods are often not followed; when they are, it is usually because of employer’s policy in place. Why is it so, if following a method should be a recipe for success?

There are several reasons why methodologies are ignored or resisted in practice. One reason is

that methodology is usually derived from past experience. But, what worked for one person may  not work for another. Both developers and projects have different characteristics and it is difficult to generalize across either one. Software development is so complex that it is impossible to create precise instructions for every scenario. In addition, method development takes relatively long time to recognize and extract “best practices.” By the time a method is mature, the technologies it is based on may become outdated. The method may simply be inappropriate for the new and emerging technologies and market conditions.

A development method usually lays out a prescriptive process by mandating a sequence of  development tasks. Some methods devise very elaborate processes with a rigid, documentationheavy methodology. The idea is that even if key people leave the project or organization, the project should go on as scheduled because everything is properly documented. This approach is known as “Big Design Up Front” (BDUF). However, experience teaches us that it is impossible to consider all potential scenarios just by thinking. And, regardless of how well the system is documented, if key people leave, the project suffers. It is much more sensible to develop initial versions of the system-to-be from a partial understanding of the problem, let users play with such a prototype, and then redesign and develop a new iteration based on the gained understanding.

SOFTWARE ENGINEERING ETHICS

Software engineering ethics can be approached from three directions. First, it can describe the activity of software engineers making practical choices that affect other people in significant ways. Second, it can be used to describe a collection of principles, guidelines, or ethical imperatives that guide or legislative action, and third, it can be used to name a discipline that studies the relationship between the other two senses of ethics.

Software engineering ethics is clearly both an activity and a body of principles. The iscipline of software engineering ethics that studies this activity and formalizes these principles, however, is in its infancy.

Software Engineering Ethical Activity

To avoid confusion, “ethics”, as understood here, addresses any intentional action that impacts negatively or positively the lives and values of others. Software engineering conceives of itself primarily as a technical discipline that develops software. There area ariety of names, such as information systems analyst, for those who engage in professional software development. Regardless of the title used, the focus of software engineering activity is primarily on the technical adequacy of the products developed. But the fact that roughly one billion people depend on software systems to effectively conduct their daily lives (Reed, 2000) has led many in computing to give more attention to the nontechnical aspects and to wrestle with the ethical impact of their daily decisions and the values imbedded therein. The relationship between computers and ethics can be described as occurring when humans make decisions about computers, and those decisions affect people's lives. Human values are linked to technical decisions in this way. The activity of Professional Software Engineering Ethics takes place when any decision made by computing professionals during the design, development, construction and maintenance of computing artifacts affect other people. These decisions may be made by individuals, teams, management, or the profession. The software engineering decision how to design the release of an airbag will affect the lives of others. This technical decision is also guided by an ethical decision about human values. Barry Boehm (1981) begins his work on software engineering economics with an anecdote about how the failure to consider human values affected the development of software for a high school attendance system.

Testing

The key idea of Test-Driven Development (TDD) is that every step in the development process must start with a plan of how to verify that the result meets some goal. The developer should not create a software artifact (such as a system requirement, a UML diagram, or source code) unless he has a plan of how it will be tested. For example, a requirement is not well-specified if an automated computer program cannot be written to test it for compliance. Such a requirement is vague, subjective, or contradictory and should be       .

The testing process is not simply confined to coding. Testing the system design with walkthroughs and other design review techniques is very helpful. Agile TDD methodology prescribes to make progress just enough to pass a test and avoid detailed analysis. When a problem is discovered, fix it. This approach may not be universally appropriate, e.g., for mission critical applications. Therein, when a problem is discovered, it might have led to a major human or economic loss. Discovering that you missed something only when system failed in actual use may prove very costly. Instead, a thorough analysis is needed in advance of implementation.

However, the philosophy of thinking while creating a software artifact about how it will be tested and designing for testability applies more broadly than agile TDD.Software defects (or, bugs) are typically not found by looking at source code. Rather, defects are found by mistreating software and observing how it fails, by reverse engineering it (approach used by people who want to exploit its security vulnerabilities), and by a user simply going about his business until discovering that a program has done something like delete all of the previous hour’s work. Test plans and test results are important software artifacts and should be preserved along with the rest of software documentation.

Agile TDD claims to improve the code, and detect design brittleness and lack of focus. It may well do that, but that is not the main purpose of testing, which is to test the correctness, not quality of software. Even a Rube-Goldberg design can pass tests under the right circumstances.

And we cannot ever check all circumstances for complex software systems. Therefore, it would be helpful to know if our system works correctly (testing) and if it is of high quality, not a RubeGoldberg machine. This is why we need software measurement.

Symbol Language

Most people agree that symbols are useful, even if some authors invent their own favorite symbols. UML is the most widely accepted graphical notation for software design, although it is sometimes criticized for not being consistent. Even in mathematics, the ultimate language of symbols, there are controversies about symbols even for such established subjects as calculus (cf., Newton’s vs. Leibnitz’s symbols for calculus), lest to bring up more recent subjects. To sum up, you can invent your own symbols if you feel it absolutely necessary, but before using them, explain their meaning/semantics and ensure that it is always easy to look-up the meanings of your symbols. UML is not ideal, but it is the best currently available and most widely adopted. Arguably, symbol language has a greater importance than just being a way of describing one’s designs. Every language comes with a theory behind it, and every theory comes with a language.

Symbol language (and its theory) helps you articulate your thoughts. Einstein knew about the general relativity theory for a long time, but only when he employed tensors was he able to articulate the theory.

 

Security

Most computers, telephones, and other computing devices are nowadays connected to the public Internet. Publicly accessible Web applications and services can be abused and twisted to nefarious ends. Even if the computer does not contain any “sensitive” information, its computing and communication resources may be abused to send out spam and malware as part of a distributed botnet. Such hijacked systems provide a “safe” means of distribution of illicit goods or services on someone else’s server without that person’s knowledge. Because of ubiquitous connectivity, anyone’s security problems impact everyone else, with only rare exceptions.

There are two kinds of technology-based security threats in software systems. One arises because of bad software, where the attacker exploits software defects. The other arises because of network interconnectedness, when the attacker exploits other infected systems to poison the traffic to or from targeted computers. Hence, even if software is designed with security features to prevent unauthorized use of system resources, it may be denied data or services from other computers.

Attackers rely on exploitable software defects as well as continuing to develop their own infrastructure. An experienced developer must understand both the principles of software design and the principles of network security. Otherwise, he will be prone to making naïve mistakes when assessing the security benefits of a particular approach to software development. This book focuses on better software design and does not cover network security.

Software Development Methods

“Plan, v.t. To bother about the best method of accomplishing an accidental result.”

—Ambrose Bierce, The Devil’s Dictionary

he goal of software methodologists is to understand how high quality software can be developed efficiently. The hope is that new insights will emerge about effective product development, so both students and experts might benefit from learning and applying methodology. Ideally, the developer would adhere to the prescribed steps and a successful project would result—regardless of the developer’s knowledge and expertise. Methodology development often works by observing how expert developers work and deriving an abstract model of the development process. In reality, life cycle methods are often not followed; when they are, it is usually because of employer’s policy in place. Why is it so, if following a method should be a recipe for success?

There are several reasons why methodologies are ignored or resisted in practice. One reason is that methodology is usually derived from past experience. But, what worked for one person may not work for another. Both developers and projects have different characteristics and it is difficult to generalize across either one. Software development is so complex that it is impossible to create precise instructions for every scenario. In addition, method development takes relatively long time to recognize and extract “best practices.” By the time a method is mature, the technologies it is based on may become outdated. The method may simply be inappropriate for the new and emerging technologies and market conditions.

A development method usually lays out a prescriptive process by mandating a sequence of development tasks. Some methods devise very elaborate processes with a rigid, documentationheavy methodology. The idea is that even if key people leave the project or organization, the project should go on as scheduled because everything is properly documented. This approach is known as “Big Design Up Front” (BDUF). However, experience teaches us that it is impossible to consider all potential scenarios just by thinking. And, regardless of how well the system is documented, if key people leave, the project suffers. It is much more sensible to develop initial versions of the system-to-be from a partial understanding of the problem, let users play with such a prototype, and then redesign and develop a new iteration based on the gained understanding.

 

Database

Depending on the intended use, there are a number of database architectures in use. Many databases use a combination of strategies. On-line Transaction Processing systems (OLTP) often use a row-oriented data store architecture, while data-warehouse and other retrieval-focused applications like Google's Big Table, or bibliographic database (library catalogue) systems may use a Column-oriented DBMS architecture.

Over many years the database industry has been dominated by General Purpose database systems, which offer a wide range of functions that are applicable to many, if not most circumstances in modern data processing. These have been enhanced with extensible data types, pioneered in the PostgreSQL project, to allow a very wide range of applications to be developed. A computer database relies upon software to organize the storage of data. This software is known as a database management system (DBMS). Database management systems are categorized according to the database model that they support.

Relational database management systems implements the features of the relational model outlined above. In this context, Date's "Information Principle" states: "the entire information content of the database is represented in one and only one way. Namely as explicit values in column positions (attributes) and rows in relations (tuples). Therefore, there are no explicit pointers between related tables."

Security

Most computers, telephones, and other computing devices are nowadays connected to the public Internet. Publicly accessible Web applications and services can be abused and twisted to nefarious ends. Even if the computer does not contain any “sensitive” information, its computing and communication resources may be abused to send out spam and malware as part of a distributed botnet. Such hijacked systems provide a “safe” means of distribution of illicit goods or services on someone else’s server without that person’s knowledge. Because of ubiquitous connectivity, anyone’s security problems impact everyone else, with only rare exceptions.

There are two kinds of technology-based security threats in software systems. One arises because of bad software, where the attacker exploits software defects. The other arises because of network interconnectedness, when the attacker exploits other infected systems to poison the traffic to or from targeted computers. Hence, even if software is designed with security features to prevent unauthorized use of system resources, it may be denied data or services from other computers.

Attackers rely on exploitable software defects as well as continuing to develop their own infrastructure. An experienced developer must understand both the principles of software design and the principles of network security. Otherwise, he will be prone to making naïve mistakes when assessing the security benefits of a particular approach to software development. This book focuses on better software design and does not cover network security.

The Security Development Lifecycle (SDL), promoted by Microsoft and other software organizations, combines the existing approaches to software development with security-focused activities throughout the development lifecycle. Security risk management focuses on minimizing design flaws (architectural and design-level problems) and code bugs (simple implementation errors in program code). Identifying security flaws is more difficult than looking for bugs, because it requires deep understanding of the business context and software architecture and design. We work to avoid design flaws while building secure software systems. Techniques include risk analysis, abuse cases (trying to misuse the system while thinking like an attacker), and code quality auditing.

 


Дата добавления: 2018-06-01; просмотров: 294; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!