到了软件初步实现阶段,我和同伴们进行了简单设计。首先理解问题,过滤非核心信息,抽象出关键信息和他们之间的关系。要给事物构建出一个模型,描述事物、事物的属性、事物之间的关系以及各个事物之间的信息传递。表达实体与实体之间的关系可以用思维导图、实体关系图、用例图。表达数据流动用DFD工具。由此人们建立了统一的表达方式,从结构化数据的角度看ERD,强调静态,强调动态交互有DFD,UCD,ACTIVITY DIAGRAM,从面向对象分为class diagram和sequence diagram,从控制角度看动态的是FSM,flow chart, UML state machine.其他设计方法有形式化的方法,比如vienna development method.和文化学编程。从spec到实现需要把修改集集成到代码库中,开发人员则要根据功能需求复审spc,进行设计,详细设计,实现设计或是编写代码,Dev自测,同伴复审,源代码进行同步、合并、构建,在此过程中不断的发现Bug,分析bug,并进行修改,提交签入关联work item.,自动测试,功能全面测试,从而功能完成。实现完毕后,进行实际测试依然存在问题,进行面对面商讨修改,并查找资料解决问题。
用vsts写单元测试,未经验证的单元测试,如:
///<summary>
///A test for Users(string)
///</summary>
[TestMethod()]
public void ConstructorTest()
{
string userEmail=null;//TODO:initialize to an appropriate
//value
User target=new User(userEmail);
//TODO:implement code to verify target
Assert.Inconlusive("TODO:Implement code to verify target");
}
做了修改:
[TestMethod()]
[ExpectedException(typeof (ArgumentNullException))]
public void ConstructorTestNull()
{
User target=new User(null);
}
[TestMethod()]
[ExpectedException(typeof (ArgumentException))]
public void ConstructorTestEmpty()
{
User target=new User(" ");
}
[TestMethod()]
[ExpectedException(typeof (ArgumentNullException))]
public void ConstructorTestBlank()
{
User target=new User(" ");
}
好的单元测试标准应该在最基本的功能、参数上验证程序的正确性。,单元测试由最熟悉代码的人来写,过后机器状态保持不变,要快,可产生可重复、一致的结果,不依赖与别的测试,可以认为构造数据,覆盖所有代码路径,单元测试应该集成到自动测试的框架中,必须和产品一起保存和维护。进行回归测试和效能分析,有两种分析方法:抽样和代码注入。
软件工程包括了开发、运营、维护软件的过程中很多技术、做法、思想,把这些相关技术和过程统一到一个体系中,叫做“软件开发流程”软件开发的工作量和质量由四个因素衡量:项目的大小、花费的时间、交付的缺陷、是否按时交付。自我评估需要一些核心技能和扩展知识。
两人合作需要我们代码规范,风格规范、设计规范、风格规范如缩进、行宽、括号、断行与空白的{}行、分行、命名、下划线、大小写、注释。设计规范包括函数、goto、错误处理、如何处理C++中的类。最后进行代码复审,目的在于找出错误、发现代码错误、逻辑错误、算法错误、潜在和回归性错误、需要改进的地方等。复审后将错误整理出来,做一个核查表。结对编程来说更能提供更好的设计质量和代码质量。两人合作阶段分为萌芽阶段、磨合阶段、规范阶段、创造阶段、解体阶段。从各个层次给出反馈,最外层是行为和后果、中间层是习惯和动机、最内层是本质和固有属性。希望在这些阶段中我们能合作配合得很好。