Thứ Năm, 27 tháng 2, 2014

Software Industry Glossary - Things you should know

Software Developer:
A tech-savvy person who has knowledge of software industry and project life cycle. Developer isn't same with "programmer" who knows how to write code that usually requires algorithms and data structures. Unlike Project Manager or other senior roles (include Software Engineer), developer participates not only in software release but also in post-release activities.

Software Engineer:
A software engineer is someone who can apply the principles of engineering, computer science and mathematical principles to the design, development, testing and evaluation (verification, validation) of of the software. Furthermore, software engineer has a good grasp on Software Patterns, a good problem solving skill and especially has ability to research technologies instead of pure coding like developer.

Techno-Functional
Functional People - are the one that knows the behavior of the data. They know how to create data. They are the one who will give the information and specification to the technical people. They also know what is the outcome or expected data of the program. Technical people - are the one that is responsible in coding the specification that was given by the Functional team. They are more on codes.

Non-functional Requirements
A non-functional requirement is a requirement that specifies criteria that can be used to judge the operation of a system, rather than specific behaviors.


Codebase
The term codebase, or code base, is used in software development to mean the whole collection of source code used to build a particular application or component. Typically, the codebase includes only human-written source code files, not source code files generated by tools or binary library files

Code Drop
The common definition of 'code drop' is to deploy new or updated application code. "Code drop" can refer to the placement of code for a deployment.

Code Freezing

A freeze is a point in time in the development process after which the rules for making changes to the source code or related resources become more strict, or the period during which those rules are applied.

Fan-in
This is the number of superordinate modules that call a module. 
Maximise fan-in for good modularity.
Low fan in - absorb into other modules.

Fan-out (span of control)
This is the number of subordinate modules called by a module. 
A high fan-out (>7) may indicate that a module is too complex. That is, it contains too much control and coordination logic. 

Verification
Verification is to check whether the software conforms to specifications. Verification uses methods like inspections, reviews, walk-through...

Validation
Validation is to check whether software meets the customer expectations and requirements.Validation uses methods like black box (functional)  testing, gray box testing, and white box (structural) testing etc.


To compare verification versus validation, check out the post at:
http://testingbasicinterviewquestions.blogspot.com/2012/01/difference-between-verification-and.html

Incremental Model
The incremental build model is a method of software development where the model is designed, implemented and tested incrementally
When we work incrementally we are adding piece by piece but expect that each piece is fully finished. Thus keep on adding the pieces until it’s complete.

Iterative Model
Unlike Incremental Model, an iterative life cycle model does not attempt to start with a full specification of requirements. Instead, development begins by specifying and implementing just part of the software, which can then be reviewed in order to identify further requirements. This process is then repeated, producing a new version of the software for each cycle of the model.


RAD
Rapid application development (RAD) is a software development methodology that uses minimal planning with incremental changes. It is a type of incremental model. In RAD model the components or functions are developed in parallel as if they were mini projects. The developments are time boxed, delivered and then assembled into a working prototype. This can quickly give the customer something to see and use and to provide feedback regarding the delivery and their requirements.

UI/UX
Describe the overarching experience a person has as a result of their interactions with a particular product or service, its delivery, and related artifacts, according to their design.
Some examples:
  • Using PPR (Partial Page Render) for updating small information to avoid full post back for the whole web page (page flicker)
  • Using AutoComplete to help end user easily get what they are looking for
Here is the sample quoted from an IT expert during a project meeting. This meeting is all about whether using Postback or Callback on the Web app.

"When you need to maintain a lot of state on your web form - e.g., each call to the server will likely need information about the state of more than just the one control which invoked the callback - postbacks are much easier. If RAD is your first priority, use postbacks in this case. But full postbacks rarely, if ever, provide a really clean UX. If UX is your top priority, you can afford to spend the time necessary to build a system which can maintain state on both sides."

Vertical application
A vertical application is any software application that supports a specific business process and targets a smaller number of users with specific skill sets and job responsibilities within an organization. Enterprise applications such as ERP (Enterprise Resource Planning) and CRM (customer relationship management) are types of vertical applications.

Vertical applications are often customized to meet the needs of industry-specific users. Vertical apps are also more complicated to use than horizontal apps, and because they need to integrate with other systems used in the organization, they may require IT assistance and deployment.

Horizontal application 
A horizontal application is any software application that targets a large number of users with different knowledge and skill sets. Because these types of applications can extend across markets and be used in a range of industries, they typically do not offer market-specific features. Some examples of horizontal applications include word processors, spreadsheets, financial software and Web browsers.

(Cont.)

Thứ Tư, 26 tháng 2, 2014

Software Industry Glossary - Things you should know

Software Developer:
A tech-savvy person who has knowledge of software industry and project life cycle. Developer isn't same with "programmer" who knows how to write code that usually requires algorithms and data structures. Unlike Project Manager or other senior roles (include Software Engineer), developer participates not only in software release but also in post-release activities.

Software Engineer:
A software engineer is someone who can apply the principles of engineering, computer science and mathematical principles to the design, development, testing and evaluation (verification, validation) of of the software. Furthermore, software engineer has a good grasp on Software Patterns, a good problem solving skill and especially has ability to research technologies instead of pure coding like developer.

Techno-Functional
Functional People - are the one that knows the behavior of the data. They know how to create data. They are the one who will give the information and specification to the technical people. They also know what is the outcome or expected data of the program. Technical people - are the one that is responsible in coding the specification that was given by the Functional team. They are more on codes.

Non-functional Requirements
A non-functional requirement is a requirement that specifies criteria that can be used to judge the operation of a system, rather than specific behaviors.


Codebase
The term codebase, or code base, is used in software development to mean the whole collection of source code used to build a particular application or component. Typically, the codebase includes only human-written source code files, not source code files generated by tools or binary library files

Code Drop
The common definition of 'code drop' is to deploy new or updated application code. "Code drop" can refer to the placement of code for a deployment.

Code Freezing

A freeze is a point in time in the development process after which the rules for making changes to the source code or related resources become more strict, or the period during which those rules are applied.

Fan-in
This is the number of superordinate modules that call a module. 
Maximise fan-in for good modularity.
Low fan in - absorb into other modules.

Fan-out (span of control)
This is the number of subordinate modules called by a module. 
A high fan-out (>7) may indicate that a module is too complex. That is, it contains too much control and coordination logic. 

Verification
Verification is to check whether the software conforms to specifications. Verification uses methods like inspections, reviews, walk-through...

Validation
Validation is to check whether software meets the customer expectations and requirements.Validation uses methods like black box (functional)  testing, gray box testing, and white box (structural) testing etc.


To compare verification versus validation, check out the post at:
http://testingbasicinterviewquestions.blogspot.com/2012/01/difference-between-verification-and.html

Incremental Model
The incremental build model is a method of software development where the model is designed, implemented and tested incrementally
When we work incrementally we are adding piece by piece but expect that each piece is fully finished. Thus keep on adding the pieces until it’s complete.

Iterative Model
Unlike Incremental Model, an iterative life cycle model does not attempt to start with a full specification of requirements. Instead, development begins by specifying and implementing just part of the software, which can then be reviewed in order to identify further requirements. This process is then repeated, producing a new version of the software for each cycle of the model.


RAD
Rapid application development (RAD) is a software development methodology that uses minimal planning with incremental changes. It is a type of incremental model. In RAD model the components or functions are developed in parallel as if they were mini projects. The developments are time boxed, delivered and then assembled into a working prototype. This can quickly give the customer something to see and use and to provide feedback regarding the delivery and their requirements.

UI/UX
Describe the overarching experience a person has as a result of their interactions with a particular product or service, its delivery, and related artifacts, according to their design.
Some examples:

  • Using PPR (Partial Page Render) for updating small information to avoid full post back for the whole web page (page flicker)
  • Using AutoComplete to help end user easily get what they are looking for


Here is the sample quoted from an IT expert during a project meeting. This meeting is all about whether using Postback or Callback on the Web app.

"When you need to maintain a lot of state on your web form - e.g., each call to the server will likely need information about the state of more than just the one control which invoked the callback - postbacks are much easier. If RAD is your first priority, use postbacks in this case. But full postbacks rarely, if ever, provide a really clean UX. If UX is your top priority, you can afford to spend the time necessary to build a system which can maintain state on both sides."

(Cont.)

Chủ Nhật, 23 tháng 2, 2014

Anti-bot/spam - An invisible control without user intervention

NoBot is a control that attempts to provide CAPTCHA-like bot/spam prevention without requiring any user interaction. This approach is easier to bypass than an implementation that requires actual human intervention, but NoBot has the benefit of being completely invisible. NoBot is probably most relevant for low-traffic sites where blog/comment spam is a problem and 100% effectiveness is not required.

NoBot employs a few different anti-bot techniques:

  • Forcing the client's browser to perform a configurable JavaScript calculation and verifying the result as part of the postback. (Ex: the calculation may be a simple numeric one, or may also involve the DOM for added assurance that a browser is involved)
  • Enforcing a configurable delay between when a form is requested and when it can be posted back. (Ex: a human is unlikely to complete a form in less than two seconds)
  • Enforcing a configurable limit to the number of acceptable requests per IP address per unit of time. (Ex: a human is unlikely to submit the same form more than five times in one minute)
NoBot can be tested by violating any of the above techniques: posting back quickly, posting back many times, or disabling JavaScript in the browser.

NoBot Properties
  • OnGenerateChallengeAndResponse - Optional EventHandler providing a custom implementation of the challenge/response code
  • ResponseMinimumDelaySeconds - Optional minimum number of seconds before which a response (postback) is considered valid
  • CutoffWindowSeconds - Optional number of seconds specifying the length of the cutoff window that tracks previous postbacks from each IP address
  • CutoffMaximumInstances - Optional maximum number of postbacks to allow by a single IP addresses within the cutoff window

Example (Thank sailajareddy for good article on his blog):
If all the checks are correct , then NoBotState will return “Valid” Message.

Nobot_1

If within the time specified in "ResponseMinimumDelaySeconds" i.e  3 sec , if end user clicks on button more than once , it returns "InvalidResponseTooSoon".

nobot_2

“CutoffMaximumInstances” specifies number of post backs that can occur within time specified in "CutoffWindowSeconds" , so if end user clicks button more than 4 times
within 15 sec , then it returns "InValidAddressTooActive" message.

nobot_3

Happy coding,