0%

软件工程基础

简介

  • 软件工程相关学习笔记

工程化代码和编程

  • 什么是编程和工程项目?

    • 编程(是编定程序的中文简称),就是让计算机代为解决某个问题,对某个计算体系规定一定的运算方式,使计算体系按照该计算方式运行,并最终得到相应结果的过程
    • 软件工程,(即咱们程序员经常口头说的项目),从软件开发的观点看,它就是使用适当的资源(包括人员,软硬件资源,时间等),为开发软件进行的一组开发活动,在活动结束时输入(即用户的需求)转化为输出(最终符合用户需求的软件产品)
  • 重要的三个阶段

    • 定义阶段:可行性研究初步项目计划、需求分析
    • 开发阶段:概要设计、详细设计、实现、测试
    • 运行和维护阶段:运行、维护、废弃
  • 编程和工程的区别?

    • 编程只是对某种问题的计算机解决方法,而工程却涉及到客户需求、人员、软硬件资源、时间、产品产出
    • 只有更好地了解整个工程流程,才能知道每个阶段需要干什么,客户需求什么,输出的产品是什么,才能轻松在给定时间内写出代码
  • 编写工程化代码需要注意:版本控制,接手项目,代码规范性和安全性,开发新项目

版本控制

  • 版本控制分三个部分——硬件资源环境、开发工具版本控制、程序版本控制

  • 硬件资源环境,

    • 不能只考虑自己电脑性能和程序能否在自己电脑运行。
    • 首先要确定运行工程代码的硬件环境是windows、还是linux、某个手机平台、或者arm开发板,其次确定是32位还是64位
  • 开发工具版本控制,

    • 只要和整个开发团队保持一致即可,
    • 如果只是你一个人使用的开发工具,不要追求最新、不稳定版本
  • 程序版本控制,这个最为重要。

    • 一般,公司都会有自己的版本控制服务器svn、github等,但我要说的是自己的程序版本控制,
    • 一般上传到服务器上的都是几经考验的稳定版本,但不排除有时候有些新修改漏斗没有觉察到或者自己需要恢复到某个阶段重新开发,这个时候有备份就至关重要了,
    • 所以每一个版本无论好坏都要给自己备份一下,有时候在关键时刻会助你一臂之力

接手项目

  • 接手项目,首先备份当前版本(版本控制的重要性)

  • 接着确认大环境,查看平台,动静态链接库是否齐全,配置文件是否还在,尝试编译运行一下能否通过,确认无误后再阅读代码,有问题了尽快请教。

  • 阅读代码时,先不要急于看每个功能如何实现,先把整个逻辑流程过一遍,找到自己业务的模块,再将该模块实现功能仔细阅读,并单独实现,最后再加以改进

  • 构思代码。为什么是构思代码,而不是写代码,因为直接写代码是没有灵魂的(大神除外)

  • 构思代码的好处是

    • 先把架构定下来,输入什么,输出什么,用什么数据结构和方法实现,
    • 这样不仅有助于接下来的编码,而且不容易反复推翻修改,三思而后动就是这个道理,这也有助于锻炼架构师思维

代码规范性和安全性

  • 很多大公司都有自己的一套编码规范。不论公司有没有规范,自己必须有一套符合大众的编码规范

  • 不仅代码看起来赏心悦目,方便问题查找,而且也便于以后阅读和维护,最重要的是代码可以烂,气势不能输

  • 代码的安全性分两个方面:代码自身的安全性和程序代码的安全性

  • 代码自身的安全性主要是指不要使用不安全的库函数、指针等

    • 编程语言也是代码,也会有bug,只是我们水平太菜,没发现而已。
    • 但是已经有很多前辈帮我们踏过这些雷区,我们需要的就是偶尔关注一下版本更替的说明和多看大神们的经验,避免使用那些具有安全隐患的库函数,
    • 尤其是在使用指针时,须慎重,如无必要,,不要耍酷(大神除外),血的教训告诉我指针引发的问题是最隐蔽的
  • 代码的安全性防范是写工程代码必须考虑的。

    • 程序代码的安全性就比较简单了,把自己的程序尽量封装成接口,这样既可以防止别人随意改动你的代码,也便于管理维护

开发新项目

  • 首先,分析需求,谨记一句话:如无必要,不要自作多情

    • 严格控制需求,仔细分析,清楚需求要做到什么程度,不要为了彰显自己半瓶水的功力,提升难度,补充需求
    • 本来让你做个人脸识别,你非要加个活体检测,结果GG了。学习研究可以挑战下自我,做工程就不必装×了
  • 其次,构思框架,三思而后行

    • 架构很重要,人有骨架,楼房也有钢筋,一个好的框架,可抗八级地震,减少二次开发的次数,提高运行效率,这些都不需要我们管,那是大佬构思的事情。
    • 我们要构思的是,如何采集数据,采集完数据,如何保存数据,分析数据,产出结果,结果如何展示给客户
  • 然后,确定环境

  • 接着,大环境确认了,就是详细设计

    • 输入什么,输出什么,数据格式,中间流经几个模块,实现方法,故障处理,实时性要求等等
    • 流程走下来,剩下就是填充代码和反复测试。最后,演示检验

谨记

  • 编程是练基本功的,工程是练思路和管理的,思路不行,永远只是个码农,基本功不扎实,思路再好也出不来干货,切勿眼高手低
感谢老板支持!敬礼(^^ゞ