insanitydotcpp
insanitydotcpp
Software Engineering
51 posts
Welcome! This is a blog about my experience learning how to program with C++, Java, Python, etc. I will talk about my programs, what I've learned, problems I’ve ran into, and much more. I started this blog when I was coursing COMP3010, restarted it when I was coursing INSO4101, and am continuing it now that I am taking INSO4115 and INSO4117.
Don't wanna be here? Send us removal request.
insanitydotcpp · 5 years ago
Text
Requirements-Testing Post 12
This will be my last post overall here for these courses, and will be more of a feedback post as I feel it is greatly needed. Needless to say, I was very motivated to take these classes at the beginning of the semester. That motivation quickly turned into confusion with so many things going on at the same time. Prior to this, I had no experience or knowledge in web development as that is not a requirement in the INSO curriculum at this level. This made my experience very overwhelming and difficult to keep up with, hence made it harder to learn specifically about requirements and testing. 
Another huge issue is that in our curriculum, Database Management as well as Networking are the last courses we take, and both have Operating Systems as a pre-requisite, which many of us have not taken yet. In my opinion, it seems very farfetched to make students work with material that has not been taught to them yet, and that is at a higher level. 
The team rotation dynamic was very, and I cannot stress this enough, very frustrating because not every team decided on the same technologies for the project so many of us spent a whole lot of time researching and learning these, just to get switched to another group and have to start researching and learning all over again, which only resulted in a significant delay in project progress. I believe the pair rotation dynamic was good enough and proved the whole purpose of teamwork, it should’ve just stayed at that.
Too much homework is inefficient, but so is not having homework. What I mean by this is that assignments should be a requirement for a more effective learning experience. This is where we put into practice what we learn by reading and paying attention in class. If we are not tested, how do we know that what we are “learning” is actually what we are supposed to be learning? Or that we are doing things correctly? 
Regardless, I tried to make the most out of the situation and did a lot of reading on my end to compensate for the faults. Unfortunately, and I mean this with no disrespect, the classes mostly served as guidelines to what I should be reading and researching about. I strongly believe this should not be like this, as I’ve taken previous courses where I have learned plenty with just paying attention in meetings. I truly hope we can find a better dynamic for the Software Design course as it will be the last INSO course many of us take, and would like to have the best experience possible, while maximizing our overall learning experience. 
0 notes
insanitydotcpp · 5 years ago
Text
Testing Post 11
Likewise, this will also be my last individual post for the Software Reliability Testing course. Unfortunately, the boat did not sail so smoothly on this class’s project. Due to bad administration, and lack of motivation from many integrants, the project was not developed as planned and some requirements had to be discarded. Fortunately, we were still able to develop some test suites for the work we managed to get done. For the most of it, we developed unit tests for most of our functions, and followed a test-driven development paradigm. 
Prior to implementing the interface, we had some Selenium Tests suites programmed so the development of the project was centered towards satisfying these tests. We also did some Usability Testing on the front end to see if our UI/UX design was achieving expectations. Given the fact that implementation was as basic as possible, due to insufficient work contribution, we did not get as much benefit from this type of testing as we should have. 
In actuality, one way we could’ve benefit from Usability Testing would be to make a few versions of our design, implement and deploy them simultaneously so we could record the time the users spent on each view (i.e.) and select highest one as our control version. The following would be to implement another design and re-deploy it so we can run the same analysis again. This type of testing is A/B Testing which is a type of Usability Testing. Ideally, if every team member would’ve contributed equally, we may had been possible to run these types of test.
Nevertheless, there are many more types of testing that unfortunately we did not have the chance to indulge. The ones we did do, I would say are pretty well developed and we made the most out of them. Anyway, that would be all for this post; thank you for reading and remember to work hard and code harder!
0 notes
insanitydotcpp · 5 years ago
Text
Requirements Post 11
So this will be my last separate post for the Requirements Engineering course. We finally finished the project (Disaster Relief) and I have to admit I am impressed with the outcome. I also have to admit that, at some point, I feared we were  not going to be able to accomplish our goal. Thankfully, everybody pitched in and we all worked together and developed the project. Another factor that helped a lot was the good choice of development tools. I worked with the Front End team and we decided to use Angular; even though we struggled a bit at the beginning, we quickly caught up and started developing. 
I really liked this team’s communication and consistency, as well as the overall motivation. I feel like I got a good experience from it working as a team, as I usually work alone, and learned a lot from our mistakes. First one was that we used Angular wrong, lol. This framework is component-based which means we are to make our own customs components but, since we didn’t know, we made them as pages. It still worked but it was harder to test and debug. 
Developing this project, we got a good feel of the whole Requirements Engineering process, and the benefits behind gathering and properly documenting these requirements. For the development of the front end, we began by collecting the user stories, which in this case were provided by ourselves, and then modeling these stories with control flow and use case diagrams. Once we had these, we started with the UI/UX design and, in the process, we discovered more requirements so we proceeded to documenting them and integrating them in our project. Finally, we started implementing the design and, in doing so, discovered even more requirements, specifically functional ones! With this, it was very easy to see the benefit of an Agile development environment and capture the fundamentals of it.
Overall, I am content to have worked with this team as everybody contributed in one way or another. I also liked developing this project because I feel like I got benefit from it, given the fact that it is easier to learn by practicing than by reading stocking up on theories. Specifically, I got to see the Requirements Engineering process at the front-lines.  For these reasons, I am looking forward to working in a similar environment and developing more complex projects following these tools and methodologies. Anyway, this will be all for now; thank you for reading and as always, work hard and code harder! ;)
0 notes
insanitydotcpp · 5 years ago
Text
Requirements-Testing Post 10
It’s been a while since I last wrote here; I hope everyone is doing okay! My last post was me talking about the education system shifting towards remote education and us being worried about how it’d play out. Well, I think I speak for most of us when I say that this sucks lol. Not speaking specifically though, I mean in general; we weren’t ready to take online classes. Regardless, it’s our reality now so we have to adapt to it and try to make the most out of it. 
So moving on to the projects, I’ve mentioned before that we were developing them in Scala; thankfully, we were offered the choice to use Python instead. After the team discussing the decision, which is a bigger team now by the way, we decided that it was best to use Python as most of us had experience and fluency in it. The whole class was divided in two teams and most projects were absorbed by either the disaster relief app I mentioned before, or a chore app which I believe I also mentioned previously. Hopefully, this will play off for the best since we were having difficulties, given the fact that the majority of us did not knew about web development.
Luckily, many sites like CodeCademy have offered free scholarships for their online courses, which include web development. Since I took the opportunity to enroll as soon as I heard about it (which was close to when they announced it), I was granted a scholarship and have been practicing a lot. Hopefully, I’ll learn quick so I can apply that on the class projects, but to be honest, I don’t think I should have to rely on external resources to be able to work on a project for a class that I already paid a couple hundred dollars to take. Specially since these “external resources” are whole classes themselves.  It’s not even about finances, it’s about the immense amount of time I’ve had to dedicate to just learn the tools when I have other classes that are also assigning an unusual amount of work so it’s very hard to keep up with everything. 
Anyway, I’m still looking forward to the outcomes of these projects, specially now since we are working as a bigger team. For the same reason, we have created five sub-groups to better distribute the tasks. These sub-groups are for the Front End, Database management, API routes, Integration, and Administration which deals with documentation and version control. For version control we are using GitHub and have structured a pretty neat project layout and instructed everyone to work on separate branches for better traceability when it comes to mistakes. 
I think I’ll leave this post at here for now, lol. I’ll keep y’all posted on project progress, and, as always, work hard and code harder!!
0 notes
insanitydotcpp · 5 years ago
Text
Requirements-Testing Post 9
So this is a special kind of post as it doesn’t really have much to do with the classes, instead more with the crisis we are facing today with the coronavirus disease. The whole island is on lockdown and basically everything is cancelled, lol.
Last week they told us that our university will be taking precautious methods to avoid spreading the disease throughout campus so they shut down operations for a whole week.
During this time, professors have to update their classes and provide us with education at a distance, so that we can finish our semester online. 
We really don’t know how this will play out since presencial classes offer way much more benefit than online meetings. I’ve never even taken online classes so I personally don’t know what to expect.
I’m pretty sure many other students are riding the same boat and the worst part of it all is the uncertainty of what will happen with school and our semester. Apparently, the upcoming semesters will also be online, or at least provide an online section for the courses being offered. 
Anyway, I guess there isn’t much to do than just wait patiently, take precautious steps, and just hope for the best. In the mean time, we should continue furthering our knowledge by our own pace, and working on our project as we still have to hand in our work.
I guess that’s that! I’ll keep you all posted, please send good vibes this way, they will be much appreciated. As always, work hard and code harder!
0 notes
insanitydotcpp · 5 years ago
Photo
Tumblr media
Lmao!! Us programmers can greatly relate to this meme.
0 notes
insanitydotcpp · 5 years ago
Text
Testing Post 8
Last time I was talking about implementing a Scala interface to provide communication between our app and a database of our choosing, which was MySQL for both projects. It took me a while, a good two days of coding, but I managed to do so successfully and efficiently. 
I implemented a couple of methods that allow us to connect to servers, send queries, execute updates, and close any active connections, all within our Scala code. I used the JDBC driver I mentioned at my last post too, and I found it to be super useful! Definitely noted it down for personal use. 
Even though no SQL scripts are required to use this module, its syntax knowledge is required to use the ‘sendQuery()’ and ‘executeUpdate()’ methods I implemented in my class.
The first method handles the GET requests used to fetch data from the database, meanwhile, the second method handles the POST, UPDATE, and DELETE requests used to update the information on the database. 
Sadly, all of this work was not required since there are Akka libraries used to model, or simulate, database systems. Unfortunately, we did not know of this and we were under the impression we had to provide data management for our projects so we went ahead and did so.
Nevertheless, like I mentioned before, I found this very useful and I would like to use it on my personal app development, so this all served as practice. I really enjoyed working on this and I found an interest in database systems so I might dig into that some more.
In the mean time, I’ll keep working hard and coding harder! 
0 notes
insanitydotcpp · 5 years ago
Text
Requirements Post 8
So we started working with our Requirements Engineering phase homework and it’s basically whatever we did on our Domain Engineering phase, do it again but more narrow and more detailed. The RE process consists of many steps similar to the ones in DE but with a shorter set of stakeholders, with the purpose of developing more domain specific requirements. 
Again, we start off with the elicitation process where we undergo a serious of interviews, questionnaires, and domain specific studies, with the purpose of gathering requirements prescription units which will be used to form our requirements concepts.
Like in DE, the result of this elicitation process is a ‘pool’ of requirements prescription units, along with elicitation reports on the stakeholders that were elicited. These units shall also be tagged, or marked, so that we can organize them and use them for our concept formation. 
Once these requirements concepts are formed, we can formally develop our software requirements so that we can begin the design phase, or even start implementing some of them. 
Although these steps might seem redundant, the Domain Engineering phase focuses more on covering the whole domain, which will help us understand the domain, whereas the Requirements Engineering phase focuses more on covering domain specific phenomena, which help us actually design the software needed to model the domain. 
Anyway, as before, there is much more to Requirements Engineering than what is being mentioned here, but for the sake of succinctness, I will leave it here. I’ll be back soon with more intel, lol. As always, work hard and code harder!
0 notes
insanitydotcpp · 5 years ago
Text
Testing Post 7
As mentioned at last post, for the requirements course, I will be developing the interface of communication for our app and a database management system. For this, we chose to use MySQL since it features a lot of neat tools like the Workbench, or the MySQL Server. 
The workbench is pretty much a GUI that allows us to create tables and populate them without having to write any SQL scripts, and the MySQL Server allows us to host such data over our local network. 
For the Scala code, I will be using the JDBC (Java DataBase Connectivity) driver which features many useful libraries for handling these connections. I also found a similar library, called ScalikeJDBC, which is basically the same driver but specifically for Scala.
I opted to use the first driver, since it offers the same functionality, and was the first one I discovered, hence the first one I researched. 
I like that a lot about Scala; the ability to use Java libraries with my Scala code. I think I mentioned that in one of my first posts, but that’s one of the reasons why it is one of my favorite programming languages. 
Nonetheless, there are a few things that need setup prior to implementing in Scala and one of them is the simple build tool (sbt) and dependencies such as the driver mentioned above. 
With that being said, I better get to it, lol. I’ll let you guys know how it played off next time. Remember, work hard and code harder! 
0 notes
insanitydotcpp · 5 years ago
Text
Requirements Post 7
So we have the upcoming Phase I of our semester long project deadline coming up, along with our Requirements Engineering phase homework for the course. I’m mostly excited about the project because I assigned myself the task to implement all the database management interface our application will use. 
Since both projects have similar generic features, like login screens and user account managements, the same code we will be using for this course will be used for the other project too. These are one of the advantages of implementing code in a modular approach. 
I forgot to mention that the first team rotation took place and I got shifted out of both my original teams. I was a bit upset at first because I liked the idea of the platform to sponsor household services, but the new team’s idea are also pretty cool. 
For this one we are developing an app similar to the one we were developing in testing but instead of smart receipts, it’s to store all your movie tickets in one place and to allow ticket checking to be done electronically. 
I’m looking forward to working with the new teams, and to put in practice my leadership skills, as one of my ultimate goals is to land a professional role where I am in charge of managing projects, as I’ve always been a good leader too. 
Nonetheless, we have plenty of work to do and I have plenty of catching up to do since this is a whole new domain compared to the previous one. Anyway, I think that will be all for now, lol. As always, I’ll keep you posted and remember, Work hard and Code harder! 
0 notes
insanitydotcpp · 5 years ago
Photo
Tumblr media
Lol! Coding without testing is like cooking without turning on the stove.
0 notes
insanitydotcpp · 5 years ago
Text
Requirements-Testing Post 6
So we recently took our first midterms for both classes and I have to say, that went way better than expected, lol. I was very nervous and anxious about the tests since this semester they were held at class hours, meaning we only had 50 minutes to complete them. I thought that wasn’t going to be enough time, given that past tests were very extensive. 
To our surprise, they were shorter than expected; the first test (Requirements) consisted of eight questions, meanwhile, the second one consisted of seven questions. In my opinion, the first one was easier but I guess it’s because the information is more straightforward. 
Nevertheless, I did pretty good in both of them! I got a 92 on Requirements, and 82 in Testing. There were a couple tricky questions; for example, there was a question regarding two clashing statements from two different stakeholders and asked us to classify the clash as an inconsistency or a conflict. On a second question, we were asked to classify the same two statements but with a minor adjustment to one of them, therefore the whole outcome changed.
On the testing exam we were handed a multiple choice question regarding the different debugging points in software debuggers. I remember the answers being a watchpoint, a standard breakpoint, and a conditional breakpoint. I found this interesting because I had never read about watchpoints prior to this, so I got to read new material. 
There was another multiple answer question regarding mutation testing and I remember I got that one partially wrong but because I missed some bullets. During the review, I learned that mutation testing helps software developers answer the question “Is our test suit sufficient?” 
So, overall I’m very happy with the outcome of these midterms; I hope I do just as good or even better in out next examinations! Anyway, I think that will be all for now, lol. Never forget to work hard and code harder! 
0 notes
insanitydotcpp · 5 years ago
Text
Testing Post 5
So to my surprise, although it shouldn’t have been, there are many ways of testing our software, without even writing any code! When I started this course I thought it would be a lot of code testing, lol. Although that is one of the methods of code testing, called unit testing, there are many more!
The test method which consists of testing without any code is called acceptance testing and one of the ways to do so is by validating our requirements with our stakeholders. The way I see this is, we are abstractly testing if our code-to-be is what it is supposed to be, without even being so! 
That sounds crazy, I know, but half the stuff I study sounds crazy to me, LOL. Another way of testing, and I would say is one of the most common, is test driven development. As the name implies, this is where you test as you develop the software, and I believe this should come as intuition for us developers. 
We’ve also talked about version control software like Git clients where we can establish our own branch policies to make sure every code that is being pushed, is being done so properly. 
The form of testing that I found most interesting, and the name too, was mutation testing. This consist of making minor adjustments to the source code as to make certain statements change and see if they fail the test cases provided. This form of testing helps us see if our test suites are sufficient or if we need more.
Testing is a very crucial part of the software development cycle and as mentioned by our professor, testing does not fix the problems, it only helps us identify them. It is our responsibility to manage these errors as to provide the best user experience available, upon code delivery.
0 notes
insanitydotcpp · 5 years ago
Text
Requirements Post 5
As expected, our first assignment was about domain engineering! It pretty much covered the whole phase and helped me understand the process. It all begins with defining the current situation, needs, ideas, and a synopsis about the problem we are attacking. With this, we wrote down our proposal, and the following step was to define our domain stakeholders so we could begin the domain acquisition process.
There are many elicitation techniques useful in the process of acquiring the domain description units. The more common ways are holding interviews, questionnaires, and domain specific studies. 
After this elicitation process is completed, the result is the aforementioned domain description units and an elicitation report on every stakeholder elicited. These units should be tagged or marked in a way that it is easier to categorize them for further analysis. 
Once we have are description units organized, it is time to analyze them and form our domain concepts, which will be used to develop our domain theories. These concepts are behaviors observed between our domain phenomena abstracted into concepts. 
Furthermore, once these concepts are formed, we use them to develop the domain theories we will use to formally describe our domain. This can also be done in an informal way, but it will require strong reasoning whereas if done formally, one can use software to officially prove these theories in a more efficient manner. 
Finally, once our domain is officially described, it is time to validate it with the domain stakeholders to make sure we are modeling exactly what is being described.
I guess that pretty much sums up the domain engineering process in a nutshell, lol. Obviously, there’s much more to it than this but, for the sake or briefness, this shall be it. Until next time, and as always, work hard and code harder! 
0 notes
insanitydotcpp · 5 years ago
Text
Requirements-Testing Post 4
So we recently had to present our proposals in front of the whole class and I honestly have to say, I did not like the vibe some students were giving. There was this “I don’t like your idea, it’s garbage” feeling in the whole classroom and most of us felt bad that this was allowed. 
There was a student that was literally bashing a project because she thought the app was useless and it shouldn’t be implemented. Now, if you ask me, I don’t think the point of the project is to develop a groundbreaking, life changing, revolutionary app within a semester. 
I believe the point is to develop and practice skills that will allow us to grow both personally and professionally as software engineers so that maybe, one day, we can implement such apps.
Regardless, we feel pretty good about our presentations as we prepared abundantly with many diagrams such as use cases, sequence, flow charts, and class diagrams. These diagrams help us understand, and explain, how our application will work and what will it do. It also serves us as guidelines for what we are about to develop.
For example, when I am designing an app, I like to begin by creating a use case diagram so that I can describe (on a high level) what my application will do. Afterwards, I elaborate each use case with a flow chart, and sequence chart if needed, to model how each of these uses will play out. With this done, I usually have an idea of what I have to implement so I encapsulate that information in class diagrams. 
Once I have these diagrams, the implementation becomes very straightforward so the plan I brought up to the team was to follow this analogy and the feedback I received was pretty good. So I guess that is what we will be doing in the next few days. 
P.S. I didn’t mean to nag about my peers, I just honestly found it super disrespectful to be bashing other students projects when the purpose of this is to learn and further our software engineering skills. 
Anyway, until next time and always remember: Work hard and code harder! 
0 notes
insanitydotcpp · 5 years ago
Photo
Tumblr media
Lol! Part II of the previous meme.
0 notes
insanitydotcpp · 5 years ago
Text
Testing Post 3
For this class’s project, the team decided to develop a smart wallet app to store electronic receipts. I like the idea but I find it a bit complicated to develop in just one semester. Let’s see how it plays out with so many different minds working towards the same goal.
In previous posts, I had mentioned a rotation dynamic that was going on but we quite didn’t understand. Well we finally do, lol. It’s both types of rotations: pair and team, meaning teammates will be shifted out of the team throughout the semester. 
Since this project also follows an agile approach, we are supposed to hold weekly or biweekly sprints where we start off by prioritizing and assigning the requirements to be developed during this timespan. We also hold weekly scrum meetings to keep ourselves updated on the individual progress of each pair, and what our next plans are. 
I like this dynamic because it feels very practical and like a training, just how it should feel. I am still not loving the fact that I might get switched from the team but as mentioned before, we have to be adaptable. 
Let’s see how much progress we can make before we get switched out, lol. Anyway, until next time and remember, work hard and coder harder! 
0 notes