让我们先来看一下软件开发生命周期的各个阶段:
· 实现
· 测试与集成
· 维护
实现
实现是编写代码以解决软件实际需求的过程,这些需求应该已经定义,并在SDLC的第一阶段中进行了详细记录。 由于可以以多种方式实施需求,因此取决于团队来寻找最佳需求。
环境设定
> https://unsplash.com/photos/MFLNpz5FZRk
大多数团队的共同之处之一是设置环境以开始编写代码的过程,如果您阅读许多项目的说明,就会发现有大量的终端命令可以下载,安装,更新和 配置事物以使计算机准备开始开发。
这样做的最大问题是,大多数情况下,这些命令是基于特定计算机的,并且在另一台计算机上尝试使用这些命令时,会出现许多问题,例如与计算机上安装的其他组件(甚至是操作系统)不兼容。 本身),缺少的内容,不同的版本等。
为什么这是个问题? 因为当有人加入团队时,除了学习代码的体系结构,所使用的工具,如何使用它们的方法等之外,他们还需要花费大量时间来尝试建立自己的环境,并且在大多数情况下, 安装程序的功能不够强大,以至于在计算机中进行某些修改后,所有程序都会停止工作,因此必须重新设置所有程序。
如何解决呢? 通过使环境设置最直接和最不可知。 实现此目的的一种方法是通过将项目封装在虚拟环境,容器甚至虚拟机中来确保所有环境都相同。 可以用于此目的的一些工具是:
· 虚拟环境,例如Pipenv(如果您使用的是python)
· Docker或Kubernetes等容器
· 像Vagrant这样的虚拟化
通过使用这种方法,环境设置可能需要几分钟而不是几天。 当然,配置这些工具中的任何一个在开始时都将花费一些时间,但是在那之后,可能要运行两个命令来准备开始开发,就像下面的示例一样。
docker build –tag bulletinboard:1.0 .docker run –publish 8000:8080 –detach –name bb bulletinboard:1.0
遵循此方法的最好之处在于,它不仅对开发环境有用,而且在部署到其他环境时也将有很大帮助。
合作
> https://unsplash.com/photos/842ofHC6MaI
团队合作的一个关键方面是协作,而对于协作,则需要沟通。 在谈论编写代码时,有两个有用的东西可以改善沟通和协作:版本控制系统和定义的工作流。
版本控制系统。
没有版本控制,开发人员最终将覆盖其他人可能没有意识到的代码更改。 即使团队成员之间的沟通几乎完美,这种情况最终还是会发生。
通过使用版本控制系统,团队中的任何成员都可以在提交任何代码之前根据需要比较文件,识别差异并解决冲突。
版本控制的另一个重要用途是在解决问题时,因为它提供了对代码所做的所有更改的历史记录,因此比较上一个工作版本与有问题的版本比较容易,从而减少了查明原因的时间。
今天,最受欢迎的VCS是Git,尽管还有其他选择,例如SVN。
工作流程。
仅通过安装VCS并不能使所有工作都完美无缺,实际上需要定义的工作流程才能使其根据项目的需要而表现良好。 两个常用的工作流是Git流和GitHub流。
Git流非常适合显式版本化的项目,或者需要同时支持多个版本的项目,它基于两个主要分支,即master以及开发和使用标签来识别版本。
> Git-flow model
GitHub flow更适合于持续交付的项目,它仅基于master分支,并且包括六个主要阶段。
> GitHub flow model
这两个工作流程只是指导,可以按原样使用它们,也可以对其进行调整以满足团队和项目的需求。
代码质量
> https://unsplash.com/photos/pgSkeh0yl8o
更好的软件与它所基于的代码的质量成正比,更好的质量意味着更好的可维护性,减少了修复错误或实现新功能的时间。 编写高质量代码时需要考虑的一些方面是:
· 可维护性。 修复,更新和升级软件应尽可能简单,而不是固有地复杂。
· 可重用性和模块化。 该代码应该是安全,可靠和可靠的,以便可以重复使用。
· 可读性。 阅读和理解代码部分应该很容易,这是通过清晰,简单和文档化的方式实现的。
· 效率。 代码效率与算法效率和软件的运行时执行速度直接相关。 这是确保高性能的关键因素。
· 错误倾向。 软件行为应该是可预测的,并且不易出现隐藏错误。
如何提高代码质量?
规则。 定义一组规则是提高代码质量的最佳方法,因为它们使所有团队的代码风格同质,这些规则可以包括文件结构,命名约定,缩进,文档,注释等。
工具。 诸如linters,代码格式化程序或git hook之类的工具对于执行以前定义的规则有很大的帮助,它们也是节省时间的绝佳工具。
代码审查。 工具目前无法执行的操作是根据上下文强制执行规则,也许一段代码根据定义的规则编写得很好,但是它不能满足项目的需求,可能是因为它具有 糟糕的性能,有更好的方法来实现,有人已经实现了相同的功能(可重用性),它的功能超出了预期,或者仅仅是开发人员在编写代码时没有看到的错误。
代码审查是维护代码质量,将其视为质量保证过程的好方法,其他团队成员可以分析代码并检查代码可能存在的任何缺陷,以便在将其包含在代码库中之前对其进行修复。
代码审查已经存在了很长时间,并且是一个非常广泛的主题。看看世界上最大的软件公司之一如何处理此过程。
测试与集成
继续执行代码主题,在将某些内容包含到代码库中之前,必须确保它可以按预期工作,为此需要对其进行测试。 测试通常由质量检查工程师完成,但开发人员自行进行测试并不少见。 有两种类型的软件测试,功能测试和非功能测试。
功能测试
顾名思义,这种类型的测试仅针对软件的功能部分,这意味着它只有在所有可能的情况下才能通过这种类型的测试。 功能测试的一些示例是:
· 单元测试。 这种类型的测试是为了确保代码(单元)能够按预期隔离地工作,通常是由开发人员编写一个额外的代码片段来测试该单元来完成的,有两种方法可以做到这一点,首先编写单元,然后 测试,或者反之,将需求转换为测试用例,然后开发人员编写代码以解决这些测试用例,最后一个过程称为”测试驱动开发”。
> A basic example of Unit testing
· 集成测试。 确保将代码隔离工作后,将其与其余代码集成并进行测试以确保其正常工作,尽管已与所有代码集成,但仅测试了新代码。
· GUI测试。 此测试是为了确保图形界面(如果有)符合设计团队的规格,颜色,大小,间距,版式等。
· 回归测试。 在验证了引入的代码工作是否与其他代码隔离并集成之后,有必要验证整个代码库是否像引入新代码之前一样继续工作,这种测试是详尽的,并且通常由自动化工具完成。
非功能测试
非功能测试是在功能测试通过后进行的,仅代码是行不通的,它需要以安全,快速和可靠的方式工作。 这些测试的一些示例是:
· 性能测试。 新代码应尽可能快,并且仅使用必要的资源来交付预期的结果,例如读/写操作(数据库,内存或磁盘),进程之间传递的数据量,算法的复杂性( s)使用等
· 安全测试。 根据软件的性质,此测试可能会有所不同,在谈论Web应用程序时,根据OWASP,此测试可确保代码不易受注入,身份验证损坏,敏感数据公开,XML外部实体(XXE),访问中断的影响 控制,安全性错误配置,跨站点脚本XSS,不安全的反序列化,使用具有已知漏洞以及日志和监控不足的组件。
集成
集成是将新创建的代码包含到代码库中,因此可以对其进行构建和部署。 为了改进此过程,应建立一种一致,自动化的方式来构建,打包和测试软件。
有了集成过程中的一致性,团队就更有可能更频繁地提交代码更改,从而带来更好的协作和软件质量。
集成策略应该是前面定义的工作流的一部分,因为集成是与VCS并行进行的,为实现代码的自动化集成而创建的一些工具是:
· Jenkins
· CircleCI
· Travis CI
部署方式
使软件对用户可用的最后一步是部署,该过程还取决于应用程序的性质,对于Web应用程序来说,与移动应用程序或混合应用程序不同。
对于Web应用程序,此过程的自动化也是集成过程中提到的工具的一部分,通常同时执行这两个过程非常普遍。
对于移动应用程序,此过程可能有所不同,因为它取决于外部实体来批准构建,例如iOS的App Store或Android的Google Play商店。 进行连续部署会更加困难,因为要在商店中看到该应用会花费更长的时间。 对于某些Web应用程序(如Wordpress VIP)也是如此,它们遵循与移动应用程序相同的方法。
维护
如果软件是基于高质量的代码构建的,则其工作团队之间将保持良好的沟通和协作,建立了良好的工作流程,测试套件可靠,并且集成和部署过程实现了良好的自动化,因此不应对软件进行维护 代表任何问题。 添加,升级或修复功能将比以往更加轻松。
维护阶段有助于确定先前的所有阶段是否运行良好,或者是否需要进行某些更改。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!