![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
软件工程
真理剑客
认知你自己
展开
-
25、软件安全-预防账号密码泄露
在软件项目开发时,安全是一个容易被忽略的问题,但又可能会造成严重损失。所以在开发时有必要对安全问题引起重视,防患未然,构建安全软件。一、软件安全问题软件安全问题本质上也是一种技术风险,我们可以借鉴对风险管理的方法来改进软件的安全问题,即风险识别、风险量化、应对计划、风险监控。识别和量化,软件中的安全问题主要分为以下三类:1、恶意输入如SQL注入、XSS攻击。应对方式就是对用户输入的数据...原创 2020-02-03 13:10:48 · 2176 阅读 · 0 评论 -
23、开发编码篇-Code Review的一些思考
1、目的CR主要承担的责任保证对需求的实现:程序的逻辑,对需求和设计的实现。提高代码质量:可读性、可扩展性、可维护性、重用性、性能、安全等。知识传递。不应主要承担的责任:Code Review不应该承担发现BUG的职责BUG、代码错误应该由 单元测试、功能测试、性能测试、回归测试来保证,BUG主要是单元测试。不应成为保证代码风格和编码风格的手段代码风格和编码规范是死的东西,不应浪...原创 2020-02-03 12:05:18 · 288 阅读 · 0 评论 -
22、开发编码篇-源代码管理
分布式版本管理工具的典型代表是Git,整个代码库的副本都可以存储在用户的本地系统上,主存储库关闭或删除,可以很容易的从本地存储库恢复。一、如何用户源代码管理工具?要频繁的提交完整的内容。每次提交后要跑自动化测试。提交的代码要有人审查。二、选择开发流程现在基于源代码管理有三种主要的开发流程:Git flow、Github flow、Gitlab flow。1、Git flow存在两个...原创 2019-12-30 17:11:43 · 246 阅读 · 1 评论 -
21、开发编码篇-持续交付
一、持续交付持续交付可以细分为持续集成、持续交付、持续部署三个概念。持续交付未来会像源代码管理一样,成为开发团队的标配。1、持续集成 continuous integrate持续集成指频繁地将代码集成到主干,在代码集成到主干之前,必须通过自动化测试(单元测试、集成测试、端对端测试等),只要有一个测试案例失败,就不能集成。优点有两个:快速发现错误、防止分支大幅偏离主干。2、持续交付 co...原创 2019-12-30 16:21:44 · 249 阅读 · 0 评论 -
20、开发编码篇-开发效率
无论是做软件开发还是做其他工作,一些思维方式和行为方式可以帮助我们提升效率。一、积极主动的态度和行动工作中我们会遇到各种状况,抱怨排斥的心态对于实际工作的改进是没有任何帮助的,如何做到不抱怨,并且积极主动呢?1、想想再回应每个人对外界的刺激都会做出本能的或者习惯性的反应,遇到问题会本能的觉得都是外部原因,即基本归因谬误。而如果一直这样,就会进入恶性循环,无法改进自己,变的越来越消极麻木。...原创 2019-12-30 16:16:19 · 189 阅读 · 0 评论 -
19、系统设计篇-技术债务
一、技术债务软件项目中对架构质量和代码质量的透支。在软件开发中,范围不减、成本不加、还想节约时间,就会影响到质量。我们需要清楚的知道项目中有哪些技术债务,以及它给项目带来的收益和利息,这样才能管理好技术债务。技术债务的利息: 在后面对软件做修改的时候,需要额外的时间成本。技术债务不一定都是坏的: 如快速原型开发模型,或为了占领市场刻意欠一些技术债务短期提升开发速度。二、技术债务产生的原因...原创 2019-12-30 15:13:30 · 311 阅读 · 0 评论 -
18、系统设计篇-架构师
对于程序员来说,并不一定要有一个架构师的头衔,而是心中有大局观,有架构师的思维,从而能够理解架构设计,写出好的程序。一、什么是架构师思维?架构设计,就是控制技术的复杂性,有几种有效的方式:抽象、分治、复用、迭代。1、抽象思维抽象思维是整个架构设计的基础。对需求抽象建模后,可以帮助我们隐藏很多无关紧要的细节,在进行高层次的架构设计时,可以关注在几个主要的模型上,而不必关心模型内的细节实现。...原创 2019-12-25 14:42:14 · 278 阅读 · 0 评论 -
17、系统设计篇-技术选型
技术选型,就是在两个或多个技术方案中选择适合当前项目情况的方案。技术选型不仅是个技术的选择,也是一个和项目情况密切相关的项目决策。要做好技术选型,就是要做好项目决策。一、项目决策需考虑的角度1、时间、范围、成本的约束随着项目的推进,制约项目的三个要素一直在动态变化,需及时根据情况及时调整项目决策。2、分析可行性和风险不考虑可行性、不预估风险,就极有可能导致决策失败。3、利益相关人做决...原创 2019-12-20 15:59:28 · 2153 阅读 · 0 评论 -
16、系统设计篇-架构设计
一、为什么软件项目需要架构设计?复杂的软件项目通常有两个特点:需求不确定和技术复杂。技术复杂性体现在:需求让技术复杂、人员让技术复杂、技术本身是复杂的、让软件稳定运行是复杂的,而技术架构可以解决这些问题。架构设计可以降低满足需求和需求变化的开发成本:通过对系统抽象和分解,将复杂系统拆分成若干简单的,让普通程序员也能实现复杂系统。架构设计可以组织人员一起高效协作:拆分系统,独立完成任务后根据...原创 2019-12-20 14:32:06 · 1094 阅读 · 0 评论 -
15、需求分析篇-需求变更
在需求变更这件事上,没有赢家,每个人都是受害者。国内很多软件公司,需求变更是常事,导致开发过程中很多代码需要修改,不得不加班加点赶进度。一、为什么建筑工程中少有需求变更?1、需求的确定性建筑需求是很具象的,各方都明确地知道要什么。而软件工程的需求经常是抽象、模糊、不精确的,随着开发有了雏形才慢慢想清楚真正想要的是什么。2、需求变更的成本建筑项目里的需求变更,我们都很容易和成本挂钩。很...原创 2019-12-18 16:22:31 · 853 阅读 · 0 评论 -
14、需求分析篇-产品意识
一、程序员的价值程序员的价值通常体现在两个方面:1、所做的产品的价值你做的产品越有价值,你的价值就越大。2、自身的稀缺性价值高的程序员通常在技术之外还有一技之长,如擅长沟通、培训新人、架构设计能力等,可以帮团队创造更大的价值,也因为其难以被取代,从而具有稀缺性。技术水平提升到一定程度后会有瓶颈,提升缓慢,这时候就需要在其他领域同步发展。产品意识与程序员的思维正好互补,拥有产品意识可以帮...原创 2019-12-18 11:23:35 · 1915 阅读 · 0 评论 -
13、需求分析篇-原型设计
软件项目中,很多问题都和需求有关,比如需求不明确、需求变更等。而原型设计是确认需求、设计产品最重要的沟通工具。一、原型设计的发展历史原型设计最初是一种快速开发模式,逐步演进成来今天的原型设计工具。让产品经理不需要会编程知识,就可以低成本、高效率的确认清楚产品需求。快速原型模型:第一阶段确认界面布局和内容,第二阶段确认交互,第三阶段实现。快速原型模型可以低成本、快速的确认好需求。不过问题是...原创 2019-12-17 12:11:39 · 2559 阅读 · 0 评论 -
12、需求分析篇-需求分析
一、什么是需求用户需求:由用户提出来,期望满足自身一定需要的要求,通常原始的用户需求是不能直接做成产品的。产品需求:分析提炼用户真实需求后,提出的符合产品定位的解决方案。需求是整个产品的源头,很多软件项目失败的原因就在于没有做好需求分析,软件中很多浪费也来源于需求没想清楚导致的返工。二、需求分析是要分析什么?需求分析,就是对用户需求进行提炼分析,最终形成产品需求的过程,包括3个步骤。1...原创 2019-12-16 11:33:48 · 535 阅读 · 0 评论 -
11、项目规划篇-项目文档
一、为什么要写文档?1、帮助写文档的人理清思路先写文档,就需要抛开代码细节,去站在全局思考,写作的过程,就是思考的过程。写文档可以帮助在写代码之前理清思路和想清整体结构,必须努力把心中一些未成型的混乱的想法和概念确定化和具体化,才能写出来。2、便于未来的维护和交接一个正常的项目组,如果需要长期维护,就需要一定的文档,把设计、操作流程、环境配置等内容记录下来,而不能依赖于口口相传。另外把...原创 2019-12-12 16:42:48 · 435 阅读 · 0 评论 -
10、项目规划篇-风险管理
一、什么是风险管理?风险是指不确定但是一旦发生,可能会造成消极影响的事件。风险包括两方面的内容:1、发生后,会造成什么样的损失?2、发生的概率有多大?风险管理就是指在项目进行过程中,识别可能的风险并进行评估和加以监控,从而减少风险对项目的负面影响。二、风险管理重要吗?通过对风险的管理,可以有效降低风险发生的概率,减少风险发生后的损失。对软件项目风险的管理,才是体现项目管理水平的地方。...原创 2019-12-09 15:53:20 · 605 阅读 · 0 评论 -
9、项目规划篇-项目管理工具
一切工程问题,首先要思考能否通过技术解决,当前技术无法解决的问题,暂时由管理手段代劳,同时不停止寻找技术手段。每一次工具的进化,项目管理工作就可以得到简化,很多早期的管理问题也不再是问题了。一、最初的项目管理软件:项目计划工具MS Project,可以非常好的将所有任务分解、制定计划、按照计划跟踪执行。不足之处:进度不直观,不方便跟踪任务进度。二、基于Ticket的任务跟踪系统一个Ti...原创 2019-12-09 10:45:09 · 523 阅读 · 0 评论 -
8、项目规划篇-流程与规范
一、为什么要有流程规范提升团队效率从个体看,因为流程规范的存在,确实可能存在效率降低的情况,但从团队的角度看,好的流程规范反而是提升效率的。将好的实践标准化流程化,让大家可以共享经验如代码规范、瀑布模型、敏捷开发借助流程规范,让项目管理从人治到”法治“在项目管理中,过于依赖人的管理,项目经理就会成为瓶颈。好的项目管理,不需要直接管人管事,而是管理好计划和流程规范;项目成员不需要按照项...原创 2019-12-05 11:34:19 · 501 阅读 · 1 评论 -
7、项目规划篇-项目计划
如果没有项目计划,项目很可能会陷入无序和混乱中。项目计划可以帮助我们清楚地看到项目整体的安排,提醒我们目标是什么,知道什么时间做什么事,了解项目过程中是不是出现了偏差而及时调整。一、技术人员也要关系计划吗?1、做计划是很好的培养大局观的方式。需要综合考虑各种因素,并以更高的视角看待当前工作。2、万事皆项目,学会做计划对工作生活的方方面面都会起到积极作用。因为要实现一个目标,就需要对目标进行...原创 2019-12-02 20:07:42 · 373 阅读 · 0 评论 -
6、项目规划篇-项目管理
项目管理是最基础的管理,既要管理一个项目,又要协调整个团队一起完成共同的目标。项目管理通常是技术人员转型管理的第一步。从专注局部技术实现,转向关注项目整体;从个人的单打独斗,到借助整个团队的力量一起完成一个项目。一、技术人员转管理的障碍是什么?**大局观:**管理最重要的一点就是大局观,要能从整个项目的角度、整个团队的角度去思考,去确定和调整方向,去发现及解决问题。从技术思维转换到工程思维...原创 2019-12-02 10:16:55 · 267 阅读 · 0 评论 -
5、项目规划篇-可行性研究
可行性研究 通常讲的是如何科学地论证项目的可行性,以及这个项目是不是值得做。在工程领域,项目正式启动前都会有可行性研究这一环节,来帮助发现风险、避免损失,来决定是否立项。另外如果可行性研究无法给到一个很明确的结果,可以考虑小范围试点、MVP等,先验证了可行性,再逐步加大投入。一、为什么软件项目很少做可行性研究?1、软件项目的特殊性?可行性研究是基于问题和解决方案来分析的,只有搞明白需求是...原创 2019-11-27 10:51:21 · 492 阅读 · 0 评论 -
4、基础理论-平衡软件项目的质量与时间、范围、成本
1、什么是软件项目管理金三角?软件工程的目标就是构建和维护高质量的软件,因此质量高于一切,然后在时间、成本、范围之间寻求平衡。项目管理是项目中一系列问题的平衡和妥协。瀑布模型:范围固定,时间和成本变量敏捷开发:时间、成本固定,范围变量2、如何平衡好软件质量与时间成本范围的关系?从时间、成本和范围这三条边中找出来固定的一条或者两条,再去调整另一条。3、极限编程如何做到极限?在敏捷开...原创 2019-11-25 18:46:55 · 1701 阅读 · 0 评论 -
3、基础理论-敏捷开发
原创 2019-11-25 18:31:37 · 110 阅读 · 0 评论 -
2、基础理论-瀑布模型
原创 2019-11-25 18:31:05 · 427 阅读 · 0 评论 -
1、软件工程基础理论
软件项目的开发是一个工程,整个开发过程是可以有效组织起来的;对于开发过程的各个阶段,已经有很多解决问题的最佳实践来帮助我们高效完成任务;我们可以借助工具来协助管理,提升开发效率。...原创 2019-11-25 18:26:54 · 1100 阅读 · 0 评论