Well, this is a little post, with a little review of #TC1019, in general about Fundamentals of Software Engineering. At the end I share a video link of my talked review.
Commonly, we think that SE is a science of alone people, we think Eoftware borns in a dark room with only one people and only at this decade we are starting to see that Engineers are funny, extrovert and they can develop whatever social habilities as other people.
Well, an important thing not even in SE, but in life is to learn to be social, to use Technology and the tools you have to share and use whatever people shares, the smart way.
Please notice that auto-study is not like memorizing things but deciding what you want to learn to your LIFE.
This is a general blog about Software, and I want to Thank Professor Kenneth William Bauer, for his knowledge, and more important for exploring different ways of teach, learning is always a process different to each student, not different to each assignment.
Thank you very much.
In one of our previous post we have talked about software testing. There are many options totest your software, but now we have another topic related to discuss. Is software validation the same as software verification?
In https://iiseblogs.org/ words:
Validation can be described as verifying that you are building what the customer wants. Software validation is the process of ensuring that your application meets functional and non-functional requirements before coding and during development.
Verification if verifying that the product is being assembled correctly, after you have determined what you are supposed to build.
Keep in mind both concepts, the difference between validation and verification is functional. Validations is to cover all of the “requirements” of the user, and verification means “functionality” in all of thse parts.
For example, we have shown that software testing is performed in different layers, from Unit testing to Exploratory testing. In verification you guarantee that all of this parts really works appropiately before the project is “built”.
In http://www.fda.gov/RegulatoryInformation/Guidances/ucm085281.htm you can find a really complete guide ofsoftware validation, actually the name of the document is:
General Principles of Software Validation; Final Guidance for Industry and FDA Staff
Some of the topics covered are:
I personally read the 4.7, which I saw asone of the most important ones. Let me give you a little explanation of my thouhgs:
Think on what an application tells you there is an update available (yes an update instead on an upgrade), there are a lot of steps before developers launch this
Continue reading "SW Verification and Validation"
User Interface Design is an area of the Software development, that emphazises the users needs by the time he/she is implementing the software we developed.
We have seen that, for example, Google and all of the big trademarks have chosen the method of minimize the style of their User interfaces. But first, what exactly is a user interface?
Acording the definition of http://techterms.com:
A user interface, also called a “UI” or simply an “interface,” is the means in which a person controls a software application or hardware device. A good user interface provides a “user-friendly” experience, allowing the user to interact with the software or hardware in a natural and intuitive way.
Yes, there is one keyword “user friendly”. Just imagine for a second your 10 years old son, brother, cousin managing all of those characters in your application, compiling, running and checking for all of the options code style (This doesn´t mean there aren´t boyswho did this), but in general, we need to offer a simple manner for users, to actually use what we develop.
UI has gone as far that hardware applications has also a UI instead they are not as complex as software UI´s (you know, high and low level are always trying to healp the other one).
So lets know what are the fundamentals of designing a UI:
- The user is the most important part, so know for whom the Software is oriented to and this way you will know how to make your UI, it different an Android app to play minecraft or something, than a API to connect with your banks accounts.
- Use good patterns, you know, if people likes the interface they really are going to use it.
- Be coherent about the changes updates and patters you have chosen. If your user sees
Continue reading "User Interface Design"
Sinse we have discussed different topics about software we haven´t had the chance to discuss about Software Maintenance.
We mention this in SDLC, did you remember this?
Maintenance is an important part of the Software process. This refers to keep tracking all the upgrades, updates and changes a code or software experiments and keep developing on them. We have also mentioned how Open Source Software makes life of some developers easier. And maintenance is agood example of and advantage of Open Source as we comented before.
But, this maintenance has a cost, the most elevated of the SDLC process.
- Original at: https://www.tutorialspoint.com/
The maintenance can be done due to the need of upgrade, the chance to make more reliable or efficient the product or for bugs appeared.
IEEE provides a framework for sequential maintenance process activities. It can be used in iterative manner and can be extended so that customized items and processes can be included.
- Original at: https://www.tutorialspoint.com/software_engineering/
- Identification – identification of requirement of modification or maintenance.
- Analysis – The modification is analyzed for its impact on the system including safety and security implications.
- Design – New modules, which need to be replaced or modified, are designed against requirement specifications set in the previous stage.
- Implementation – The new modules are coded with the help of structured design created in the design step.Every programmer is expected to do unit testing in parallel.
- System Testing – Integration testing is done among newly created modules. Integration testing is also carried out between new modules and the system. Finally the system is tested as a whole, following regressive testing procedures.
- Acceptance Testing – After testing the system internally, it is tested for acceptance with the help of users.
- Delivery – After acceptance test, the system is
Continue reading "SW Maintenance"
It´s time to talk a little about Open Source Software.
If you can remember, we published a post about Software Licenses. This are to ensure software are going to be well distributed/implemented/modified by all of the user that sees it.
Recently I want to comment I assist to a litlle course of Software optimization for Machine learning, this means having all the posible resources of the machine (Yes Hardware level) really beaing used for your algorithm, code or software in general.
Only as a little intro, we used AVX3 and AVX2 to compare time execution and time optimization in code. All of these in Linux using gcc.
I am telling this little history because the topic of today is Open Source Software.
Acording to https://opensource.com/
Open source software is software with source code that anyone can inspect, modify, and enhance.
“Source code” is the part of software that most computer users don’t ever see; it’s the code computer programmers can manipulate to change how a piece of software—a “program” or “application”—works. Programmers who have access to a computer program’s source code can improve that program by adding features to it or fixing parts that don’t always work correctly.
Yes, If you remember i.e. GNU GPL this source code can be implemented, changed and distributed free. This means if you want to modify a part of the source code of a GNU GPL and sell it to another you can´t.
Something to keep on mind:
Given a large enough beta-tester and co-developer base, almost every problem will be characterized quickly and the fix obvious to someone.
Or, less formally, “Given enough eyeballs, all bugs are shallow.” I dub this: “Linus’s Law”.
Some of the benefits of using an Open Source software are:
Control: This means,
Continue reading "Open Source SW"
We have talked a little about Software Design, and to be more specific we have talked about UML. This diagrams tools help us to design our general idea of understandig how software is going to behave.
Software Architecture is a little bit different. In a Software Architecture diagram, you show the “skeleton” of your software, is like thinking in layers were you separate by layer the functionality and each layer is intercomunicates with the others surrounding them by priority or programming level.
Software application architecture is the process of defining a structured solution that meets all of the technical and operational requirements, while optimizing common quality attributes such as performance, security, and manageability. It involves a series of decisions based on a wide range of factors, and each of these decisions can have considerable impact on the quality, performance, maintainability, and overall success of the application.
Architecture comprises the frameworks, tools, programming paradigms, component-based software engineering standards, high-level principles.
The goal of architecture is to identify the requirements that affect the structure of the application. Good architecture reduces the business risks associated with building a technical solution.
Key Architecture Principles
Consider the following key principles when designing your architecture:
- Build to change instead of building to last. Consider how the application may need to change over time to address new requirements and challenges, and build in the flexibility to support this.
- Model to analyze and reduce risk. Use design tools, modeling systems such as Unified Modeling Language (UML), and visualizations where appropriate to help you capture requirements and architectural and design decisions, and to analyze their impact. However, do not formalize the model to the extent that it suppresses the capability to iterate and adapt the design easily.
- Use models and visualizations as a communication and collaboration tool. Efficient
Continue reading "Software Architecture"
This will be a very very short post about tools related with Software testing.
The various types of test tools according to the test process activities are:
- Tool support for management of testing and tests:
- Test management tools
- Requirements management tools
- Incident management tools
- Configuration management tools
- Tool support for static testing:
- Review process support tools
- Static analysis tools (D)
- Modelling tools (D)
- Tool support for test specification:
- Test design tools
- Test data preparation tools
- Tool support for test execution and logging:
- Test execution tools
- Test harness/ Unit test framework tools (D)
- Test comparators
- Coverage measurement tools (D)
- Security tools
- Tools support for performance and monitoring:
- Dynamic analysis tools (D)
- Performance testing, Load testing and stress-testing tools
- Monitoring tools
As we saw on one of our previous post, software testing is fundamental to know our projects have achieved its goals, so lets keep our hands worknig with the following tools:
We know Oriented Object programming is one of the principal paradigms today to program, but here we have a tool for make your code in Java fail: JUnit.
JUnit is a unit testing framework for Java programming language. JUnit has been important in the development of test-driven development, and is one of a family of unit testing frameworks collectively known as xUnit, that originated with JUnit.
Features of JUnit
- JUnit is an open source framework, which is used for writing and running tests.
- Provides annotations to identify test methods.
- Provides assertions for testing expected results.
- Provides test runners for running tests.
- JUnit tests allow you to write codes faster, which increases quality.
- JUnit is elegantly simple. It is less complex and takes less time.
- JUnit tests can be run automatically and they check their own results and provide immediate feedback. There’s no need to manually comb through a
Continue reading "Software Testing tools"
Up to this point we have talked a little about different ways to organize the way you program. Look one thing, we are posting different tools to help you and help us manage the way we program.
This doesn´t mean you need always to follow this specific rules to program step by step.
Program is like talking, everybody is different than the others.
Taking in mind that, we are going to talk about some of the testing tools that are availabe in the web to help you test your software.
First let´s see the different test steps according Atlassian.com:
- Retrived from: Atlassian.com
Exploratory Software Testing:
This is the test related with the workflow of your work. This is also related with how is looked your software as users, some users will be domain experts while others will be beginners. Exploratory software test covers all types of users and is fundamental for validating user experience,as opposed to focusing on a specific area of code.
Exploratory tests fit well with the Agile concept of user stories. A user story is a plain English description of how software should work. Engineers implement software based on user stories. Software test engineers and other users can easily turn a user story into a Test Session. Test Sessions are short, focused tests that can evaluate a user story for correctness.
Also, a Exploratory Test allows you to receive good feedback of your work. This means, updates, and all the upgrades of it are followed directly from the users, that are the final consumers of your software.
Remember, a happy customer is a happy developer.
This means, testing all the parts of the project or the software by units of its. All of the units are the minimal
Continue reading "Software testing"
It´s time to talk about Software Design Patterns.
They are solutions to common problems that developers face. Many software design patterns address common situations that developers need to implement in every application they build (e.g. object initialization). Take just about any programming problem and there are only a few good implementation approaches, but many bad approaches. Software design patterns capture the experience of experts in a form that others can reuse.
First of all, I will take few info of what we comment on a previous post of our blog:
Design patterns provide a standard terminology and are specific to particular scenario.
As per the design pattern reference book Design Patterns – Elements of Reusable Object-Oriented Software , there are 23 design patterns. These patterns can be classified in three categories: Creational, Structural and behavioral patterns. We’ll also discuss another category of design patterns: J2EE design patterns.
||Pattern & Description
These design patterns provides way to create objects while hiding the creation logic, rather than instantiating objects directly using new opreator. This gives program more flexibility in deciding which objects need to be created for a given use case.
These design patterns concern class and object composition. Concept of inheritance is used to compose interfaces and define ways to compose objects to obtain new functionalities.
These design patterns are specifically concerned with communication between objects.
These design patterns are specifically concerned with the presentation tier. These patterns are identified by Sun Java Center.
Taking the info about Design patterns at Wikipedia we have the following table of Design patterns:
The past days we write a little about API´s and also we have the enormous pleasure to have a little talk with Kin Lane (@kinlane at twitter) about API´s and how they are changing and have changed the world.
Personally, I love Aerospace sciences, and that is why I want to write a little about API´s in aerospace sciences:
First of all, the API´s Aerospace organization like NASA (governmetn institution) use to provide it´s data to normal persons like you and me are a little complex to use. But lets think about the enormous amount of information the satellites and the stations are taking everyday.
To select data to download (Yes, is free, inforamtion about the world, about climate and Earth conditions) visit the following pages:
There are different for each data tipes, and you only need to read a little to get the idea of what you are doing.
Feel free to check about API´s related work in NASA at:
And most important of all, don´t give up thinking API´s, Engineering or Sciences is only one thing, you can apply nowadays the knowledge of what you love in practuically everything.