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,

Thứ Hai, 13 tháng 1, 2014

Advantages and Disadvantages of integration of Facebook Connect in your site

Facebook Connect is a powerful tool to login on websites using the information on your Facebook profile. Most of the websites now have a one-click procedure with Facebook Connect while some of the websites do require you to fill a few extra details in the profile builder. It also enables users to see which friends are using the website.

After the launch of Facebook Connect back in 2008, many of the websites have used this tool to generate a user-friendly environment for the sign-up feature and also to make the web site more personal. Websites can generate more users using Facebook Connect, as most of the times users avoid filling out the information as the process has become tedious.

ADVANTAGES:
The biggest benefit is the speed with which you can get a new user into your app or site. With a couple of clicks, they are in and you know quite a bit about them. No email verification or lengthy forms requesting personal information necessary, since Facebook already did that for you.

It's a huge help that you can get a lot of profile information with little effort or conversion rate impact. Try asking a potential user of your new and unknown site for their birthday, hometown, full name, email, phone number, list of friends, profile picture, work history, etc, etc, and see how that changes your signup form conversion rate. Facebook Connect allows you to get this data by leveraging a user's trust in Facebook as a company.

Another benefit is that you can assume with some certainty, that the person signing up is real and not a random drive-by user creating a throw-away account. Of course, the Facebook account could be a sock puppet, but this requires more work and foresight than simply allowing someone to select a username and enter a junk email address.
  1. Attract more users to sign up by eliminating registration process & creating new usernames/passwords.
  2. Easy to maintain online identity of your users with higher level of security, as user credentials stay with Facebook.
  3. Better memorizing username/password since users use Facebook almost everyday. They even remember their password more than their personal identity number or passport.
  4. No more spamming by bots (no need of using captcha to verify a human).
  5. Collect accurate personal and demographic information that can be used in sales & marketing strategies.
  6. Utilize power of Facebook social networking features such as status update, online/offline access to a profile, friend invite, etc.
  7. Get rid of all the 'subscribe to' trouble, among others.

DISADVANTAGES:
  1. The biggest downside is that not every one of your potential users has a Facebook account, many more have an account but rarely use it and some Facebook users will be wary of what "Connect to Facebook" actually means and, therefore, will not do it.
  2. Website may get online/offline access to a user's Facebook profile; and may post content or may perform some activities on the Facebook profile.
  3. To incorporate advance capabilities of Facebook API, you need to have expertise and need to invest significant resources in R&D
  4. Facebook API keeps changes to incorporate various new features and upgrades; and you will be required to make required changes at your end, so will result into maintenance cost.
  5. The site doesn't create its own community. Solution: Creating a separated Facebook page and build the community separately.

Now let us take a look at some of the successful implementations of Facebook connect:

The Washington Post

In June, the Washington Post pushed out Facebook Connect integration. On the surface, this just adds a way for Facebook users to get by the annoying registration wall the paper puts on its content, and a way to easily share stories from the Post site with your Facebook friends.
But on a deeper level, Facebook Connect could theoretically be very valuable for the newspaper. They could get better ad targeting information from user profiles, for example, or they could increase traffic by syndicating user actions (like commenting) back to Facebook, or they could personalize news based on your age, location, interests, or work — the possibilities are really endless, and show how Facebook Connect could be important for the future of the newspaper business.

Livingsocial.com

The main theme for this Facebook Connect application is to offer deals at discounted prices to users. Once a user buys the deal, they receive a unique link to share with their friends. They have the option to ask them to buy the same deal. Incentive was provided to the users by providing them an opportunity to get the deal for free if they manage to recruit 3 friends. The users were saving and at the same time socializing with this application which itself is a very good strategy for Social Media Marketing.

References:


Thứ Tư, 1 tháng 1, 2014

Continuous Quality Improvement with Deming PDCA Model



Plan: Goals, Cost-Effective, anticipated Case Studies (đặt ra tình huống)…
Do: Follow-up, Work, Try and Error, R&D, Training…
Check: Measure and compare obtained resutls against expected results, including: Oversee, Review, Audit, Test…
Act: Doing retrospective, fine-tuning process, continnous improving weaknesses…

Note:
1) There are significant differences between Review and Audit.
Audit is a task which goes about verifying that work/project is compliant with regulations and standards. The objective of an audit is to provide a reasonable basis for expressing an opinion regarding the project taken as a whole.

A review does not provide a basis for the expression of such an opinion. A review may bring to the group’s attention significant matters affecting the whole project, but it does not provide assurance that the management team will become aware of all significant matters that would be disclosed in an audit. 

2) When it comes to each step, it might contain its own smaller PDCA circle.



Thứ Năm, 12 tháng 12, 2013

What is a fail safe scenario?

A fail-safe or fail-secure is one that, in the event of failure, responds in a way that will cause no harm, or at least a minimum of harm, to software apps, nor disrupt end users.

For example:attachEvent is deprecated, you can first check the addEventListener function availability on the browser and then use attachEvent as a fail safe scenario. (http://msdn.microsoft.com/en-us/library/ie/ms536343(v=vs.85).aspx)

if(window.addEventListener){    window.addEventListener("click", functionA, false)}else if (window.attachEvent) { {    window.attachEvent("onclick", functionA)}

Thứ Bảy, 24 tháng 8, 2013

How to check JQuery existence and load JQuery from script

Usually, we load JQuery by including JQuery resource in <script src="..."></script>. What's happening if there is always a JQuery to be loaded in parent page or another control. To resolve this, we do 2 steps:
1) Check if JQuery has existed or not.
2) If not exist, load JQuery directly in script code as opposed to including resource. Here is the code:
document.writeln("<script type='text/javascript' src='scripts/jquery-1.4.1.js'><" + "/script>");

Remember that, document.writeln("...") doesn't run sequentially. That means all the codesnipet written after this code can be executed immediately without waiting for document.writeln() to end. If you write your own control and use more than 2 controls in the same Web page, you might run across a conflict when JQuery is loaded more than 2 times. To resolve this, we need the 3rd step:

3) Use the flag variable to make sure JQuery is loaded only once.
var setLoadOnce = false;

To sum up, it should look like:
<head runat="server">
    <script type="text/javascript">
        var setLoadOnce = false;
        function initJQuery() {
            if (typeof(jQuery) == 'undefined') {
               if (! setLoadOnce) {
                  //alert('init jquery');
                  //only output the script once..
                  setLoadOnce = true;
                  //Load JQuery from JS code
                  document.writeln("<script type='text/javascript' src='scripts/jquery-1.4.1.js'><" + "/script>");
               }
            }
        }
        initJQuery();
    </script>
</head>

Please note if you load JQuery in JS code as above, the handler of JQuery events ('ready' event for example) must be placed after <body> to avoid running in wrong sequences (jquery events run first, jquery load runs later). Even if JQuery load is set to be written first, JQuery events load does after, it doesn't work.

In the following example, try to put all the scripts in <head> tag. Run it to see if both message "init jquery" and 'jquery ready" is displayed alltogether?
<head runat="server">
    <script type="text/javascript">
        var setLoadOnce = false;
        function initJQuery() {
            if (typeof(jQuery) == 'undefined') {
               if (! setLoadOnce) {
                  alert('init jquery');
                  //only output the script once..
                  setLoadOnce = true;
                  //Load JQuery from JS code
                  document.writeln("<script type='text/javascript' src='scripts/jquery-1.4.1.js'><" + "/script>");
               }
            }
        }
 
   </script>
   <script type="text/javascript">
        $(document).ready(function () {
           alert('jquery ready');
        });
   </script>
</head>

Now, put the "ready" event after <body>, we can see that both messages are displayed alltogether. It indicates that JQuery is loaded and executed as normally:
<head runat="server">
    <script type="text/javascript">
        var setLoadOnce = false;
        function initJQuery() {
            if (typeof(jQuery) == 'undefined') {
               if (! setLoadOnce) {
                  alert('init jquery');
                  //only output the script once..
                  setLoadOnce = true;
                  //Load JQuery from JS code
                  document.writeln("<script type='text/javascript' src='scripts/jquery-1.4.1.js'><" + "/script>");
               }
            }
        }
    </script>
 
</head>
<body>
   <script type="text/javascript">
        $(document).ready(function () {
           alert('jquery ready');
        });
   </script>
</body>

Side-effect of loading JQuery dynamically:
Loading JQuery on demand is great, but should not abuse it. The truth is, with JQuery loaded dynamically, you cannot create HTML elements on the fly using JQuery! There are always certain problems with dynamic script loading, no matter what. So please be careful! You should only use this technical if really needed.

Happy coding,